星期二, 11月 24, 2015

Ansible 小記 - shell module 與 apt module

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 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

指令的方式
例如 安裝 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

沒有留言: