iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 12
1

現代 IT 人一定要知道的 Ansible 自動化組態技巧

12. 常用的 Ansible Module 有哪些?

在上一章「11. 怎麼看 Ansible Modules 文件?」學會怎麼看文件以後,接著凍仁將介紹自己較常用的 8 個模組 (Modules)。

automate_with_ansible_practice-17.jpg

(以下依英文字母排列)

apt

apt module 是給 Debian, Ubuntu 等作業系統 (OS) 使用的套件模組 (Packaging Modules),我們可以透過它管理 apt 套件。其類似的 Linux 指令有 apt, apt-get, aptitudedpkg

系統需求:需先安裝 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. 移除 nano 套件。

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

command

command module 是個可以在遠端上執行指令的指令模組 (Commands Modules),剛入門 Ansible 會用 module 不多?只要 Linux Shell 會通的指令都可以透過它使用。但它不支援變數 (variables) 和 <, >, |, ;& 等運算,若有這類需求請改用 shell module。

  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

copy module 是從本地複製檔案到遠端的檔案模組 (Files Modules),若有使用變數需求者,可改用 template module,這部份凍仁會在第 14 章提到。其類似的 Linux 指令為 scp

  1. 複製 ssh public key 到遠端 (chmod 644 /target/file)。

    - name: copy ssh public key to remote
      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
      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
    

file

file module 是在遠端建立和刪除檔案 (file)、目錄 (directory)、軟連結 (symlinks) 的檔案模組 (Files Modules)。其類似的 Linux 指令為 chown, chown, ln, mkdirtouch

  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. 移除 docker 使用者的 sudo 權限。

    - 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

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
    

shell

shell module 是可以在遠端用 /bin/sh 執行指令的指令模組 (Commands Modules),支援變數 (variables) 和 <, >, |, ;& 等運算。

  1. 藉由 lswc 檢查檔案數量。

    - 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

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 個 Modules,大家可以先從以上的 Modules 入門 Ansible 喔!

參賽第 12 天的凍仁,一早騎車上班時出了點小小的車禍,也很幸運的沒什麼大礙。各位鐵人們在參賽的同時也要多加留意自身安全喔!

相關連結


上一篇
11. 怎麼看 Ansible Modules 文件?
下一篇
13. 怎麼使用 setup 取得 Managed node 的 facts?
系列文
現代 IT 人一定要知道的 Ansible 自動化組態技巧31

尚未有邦友留言

立即登入留言