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
沒有留言:
張貼留言