作者 主題: Ansible 小記 - shell module 與 apt module  (閱讀 1034 次)

0 會員 與 1 訪客 正在閱讀本文。

sakana

  • 酷!學園 學長們
  • 俺是博士!
  • *****
  • 文章數: 2587
  • 性別: 男
    • 檢視個人資料
    • sakananote
Ansible 小記 - shell module 與 apt module
« 於: 2015-11-24 06:31 »
原文在 http://sakananote2.blogspot.com/2015/11/ansible-shell-module-apt-module.html

Ansible 的 Module 可以在官網找到所有的 Module, 這邊是按照分類的 Index http://docs.ansible.com/ansible/modules_by_category.html

 今天先來介紹兩個 module - shell 與 apt

 首先是 shell module

shell
* http://docs.ansible.com/ansible/shell_module.html
* 執行 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
* http://docs.ansible.com/ansible/apt_module.html
* 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
專心投入研究才是王道!!
http://sakananote2.blogspot.com

netman

  • 管理員
  • 俺是博士!
  • *****
  • 文章數: 17333
    • 檢視個人資料
    • http://www.study-area.org
Re: Ansible 小記 - shell module 與 apt module
« 回覆 #1 於: 2015-11-24 21:13 »
讚啦~