Ansible 小記 - shell module 與 apt module
Ansible 的 Module 可以在官網找到所有的 Module, 這邊是按照分類的 Index http://docs.ansible.com/ansible/modules_by_category.html
今天先來介紹兩個 module - shell 與 apt
首先是 shell module
shell
- 執行 shell, 適合執行多次處理
- 例如
- ansible testserver -m shell -a ' dpkg -l | grep nginx'
shell module 跟 command module 的差別就是可以處理 pipe 之類的做法
可以把在系統習慣的執行方式透過 shell module 來執行
指令的做法
$ ansible  cenic_master -m shell   -a   'dpkg -l  |  grep ftp'
cenic_master | success | rc=0 >>
ii  ftp                                 0.17-28                             amd64        classical file transfer client
範例
ansible-playbook 方式
建立一個 yml 檔案
$ vi  test_shell_module.yml
- name: Test shell module
  hosts: cenic_master
  tasks:
    - name: Test shell module
      shell: dpkg -l | grep ftp
      register: dpkg
    - debug: var=dpkg.stdout_lines
以 ansible-playbook 指令執行
$ ansible-playbook test_shell_module.yml 
PLAY [Test shell module] ****************************************************** 
GATHERING FACTS *************************************************************** 
ok: [cenic_master]
TASK: [Test shell module] ***************************************************** 
changed: [cenic_master]
TASK: [debug var=dpkg.stdout_lines] ******************************************* 
ok: [cenic_master] => {
    "var": {
        "dpkg.stdout_lines": [
            "ii  ftp                                 0.17-28                             amd64        classical file transfer client", 
            "ii  lftp                                4.4.13-1                            amd64        Sophisticated command-line FTP/HTTP client programs", 
            "ii  openssh-sftp-server                 1:6.6p1-2ubuntu2                    amd64        secure shell (SSH) sftp server module, for SFTP access from remote machines"
        ]
    }
}
PLAY RECAP ******************************************************************** 
cenic_master               : ok=3    changed=1    unreachable=0    failed=0   
另外一個 module 就是 apt
apt
- ubuntu 使用, 套件管理
- 要注意 update_cache=yes 使用, 來更新套件庫
- # 可以搭配 cache_valid_time=3600 來節省重複 update,
指令的方式
例如 安裝 telnetd 套件
$ ansible cenic_master  -s   -m  apt  -a ' name=telnetd update_cache=yes '
這邊要注意兩件事情
- -s 代表 sudo , 因為要更新套件庫還有安裝, 所以需要 sudo
- apt 通常要搭配 update_cache=yes, 來更新, 以免套件安裝有問題
範例
ansible-playbook 方式
建立一個 yml 檔案, 這邊我們透過 with_item 的方式一次安裝多個套件
$ vi  test_apt_module.yml
- name: Using Iteration (with_item) to install multiple packages
  hosts: cenic_master
#  sudo: True 這邊學到 sudo 不一定要放在一般選項內, 也可以放在 task 內
  tasks:
    - name: install apt packages
# 於 apt moudule 使用 sudo
      sudo: True
# 使用 pkg 加上 {{ item }} 配合後面的 with_item 來安裝多個套件
      apt: pkg={{ item }} update_cache=yes cache_valid_time=3600
# 配合前面的 {{ item }} 來安裝多套件
      with_items:
        - openjdk-7-jdk
        - wget
        - scala
以 ansible-playbook 指令執行
$ ansible-playbook  test_apt_module.yml 
PLAY [Using Iteration (with_item) to install multiple packages] *************** 
GATHERING FACTS *************************************************************** 
ok: [cenic_master]
TASK: [install apt packages] ************************************************** 
changed: [cenic_master] => (item=openjdk-7-jdk,wget,scala)
PLAY RECAP ******************************************************************** 
cenic_master               : ok=2    changed=1    unreachable=0    failed=0   
okay, 今天先到這邊
~ enjoy it
 
 
沒有留言:
張貼留言