codecamp

Ansible 常用的 Ansible Module

在上一章「Ansible查看Ansible Modules文件」学会怎么看文件以后,接着冻仁将介绍自己较常用的8个模组(Modules)。

automate_with_ansible_practice-17

(以下依英文字母排列)

易于

易于  模块的英文给的Debian,Ubuntu的等作业系统(OS)使用的套件模组(包装模块),我们可以通过它管理易于套件。其类似Linux的指令有  apt ,  apt-get,  aptitude 和  dpkg

系统需求:需先安装python-apt(python 2)或python3-apt(python 3)的apt套件。

  1. 更新套件索引(快取),等同于  apt-get update 指令。

    - name: Update repositories cache
     apt:
       update_cache: yes
    
  2. 安装VIM套件。

    - name: Install the package "vim"
     apt:
       name: vim
       state: present
    
  3. 移除纳米套件。

    - name: Remove "nano" package
     apt:
       name: nano
       state: absent
    

命令

命令  模块是个可以在远端上执行指令的指令模组(Commands Modules),刚入门Ansible会用模块不多?只要Linux Shell会通的指令都可以透过它使用。但它不支持变数(变量)和  < ,  >,  |,  ;  和  & 等运算,若有这类请需求改用  外壳  模块。

  1. 重新开机。

    - name: Reboot at now
     command: /sbin/shutdown -r now
    
  2. 当某个档案不存在时才执行该指令。

    - name: create .ssh directory
     command: mkdir .ssh creates=.ssh/
    
  3. 先切换目录再执行指令。

    - name: cat /etc/passwd
     command: cat passwd
     args:
       chdir: /etc
    

复制

copy  module是从本地复制档案到远端的档案模组(Files Modules),若有使用变数需求者,可改用  模板  模块,这部份冻仁会在第14章提到。其类似的Linux指令为  scp

  1. 复制ssh public key到远端( chmod 644 /target/file)。

    - name: copy ssh public key to remote node
     copy:
       src: files/id_rsa.pub
       dest: /home/docker/.ssh/authorized_keys
       owner: docker
       group: docker
       mode: 0644
    
  2. 复制ssh public key到远端( chmod u=rw,g=r,o=r /target/file)。

    - name: copy ssh public key to remote node
     copy:
       src: files/id_rsa.pub
       dest: /home/docker/.ssh/authorized_keys
       owner: docker
       group: docker
       mode: "u=rw,g=r,o=r"
    
  3. 复制nginx vhost设定档到远端,并备份原有的档案。

    - name: copy nginx vhost and backup the original
     copy:
       src: files/ironman.conf
       dest: /etc/nginx/sites-available/default
       owner: root
       group: root
       mode: 0644
       backup: yes
    

文件

文件  模块的英文在远端建立和删除档案(文件),目录(目录),软连结(符号连接)的档案模组(文件的模块)。其类似的Linux的的的指令为  chown ,  chown,  ln,  mkdir  和  touch

  1. 建立档案( touch),并设定档案权限为644。

    - name: touch a file, and set the permissions
     file:
       path: /etc/motd
       state: touch
       mode: "u=rw,g=r,o=r"
    
  2. 建立目录( mkdir),并设定档案拥有者为docker。

    - name: create a directory, and set the permissions
     file:
       path: /home/docker/.ssh/
       state: directory
       owner: docker
       mode: "700"
    
  3. 建立软连结( ln)。

    - name: create a symlink file
     file:
       src: /tmp
       dest: /home/docker/tmp
       state: link
    

lineinfile

lineinfile  module是个可用正规表示式对档案进行插入或取代文字的档案模组(Files Modules)。其类似的Linux指令为  sed

  1. 移除搬运工使用者的须藤的权限。

    - name: remove sudo permission of docker
     lineinfile:
       dest: /etc/sudoers
       state: absent
       regexp: '^docker'
    
  2. 在  /etc/hosts 档案里用  127.0.0.1 localhost  取代开头和结尾结尾状语从句:状语结尾从句:为  127.0.0.1 的一行。

    - name: set localhost as 127.0.0.1
     lineinfile:
       dest: /etc/hosts
       regexp: '^127\.0\.0\.1'
       line: '127.0.0.1 localhost'
       owner: root
       group: root
       mode: 0644
    

服务

service  module是个用来管理远端系统服务的系统模组(System Modules)。其类似的Linux指令为  service

  1. 启用nginx的的。

    - name: start nginx service
     service:
       name: nginx
       state: started
    
  2. 停止nginx的的。

    - name: stop nginx service
     service:
       name: nginx
       state: stopped
    
  3. 重开网路服务。

    - name: restart network service
     service:
       name: network
       state: restarted
       args: eth0
    

贝壳

外壳  模块可以的英文在远端用  /bin/sh  执行指令的指令模组(命令模块),支持变数(变量)和  <,  >,  | ,  ; 和  & 等运算。

  1. 借由  ls 状语从句:  wc 检查档案数量。

    - name: check files number
     shell: ls /home/docker/ | wc -l
    
  2. 把所有的Python的中的行程给砍掉。

    - name: kill all python process
     shell: kill -9 $(ps aux | grep ssh | awk '{ print $2 }')
    

统计

stat  module是用来检查档案状态的档案模组(Files Modules)。其类似的Linux指令为  stat

  1. 检查档案是否存在,若不存在则建立它。

    - name: check the 'vimrc' target exists
     stat:
       path: /home/docker/.vimrc
     register: stat_vimrc
    
    - name: touch vimrc
     file:
       path: /home/docker/.vimrc
       state: touch
             mode: "u=rw,g=r,o=r"
     when: stat_vimrc.stat.exists == false
    
  2. 取得某档案的md5sum。

    - name: Use md5sum to calculate checksum
     stat:
       path: /path/to/something
       checksum_algorithm: md5sum
    

后话

以上为冻仁较常用的8个模块,大家可以先从以上的模块入门Ansible喔!

参赛第12天的冻仁,一早骑车上班时出了点小小的车祸,也很幸运的没什么大碍。各位铁人们在参赛的同时也要多加留意自身安全喔!

相关连结


Ansible 查看 Ansible Modules 文件
Ansible 使用 setup 取得 Managed node 的 facts
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }