- 前言
- Ansible 是什么?
- 怎么部署 Ansible 环境?
- 怎么用 Vagrant 练习 Ansible?
- 怎么用 Docker 练习 Ansible?
- 怎么操作 Ansible?
- 怎么用 Jupyter 操控 Ansible?(localhost)
- 怎么用 Jupyter 操控 Ansible?(Managed node)
- 怎么用 Docker Compose 练习 Ansible?
- Ansible 的开发工具有哪些?
- 怎么看 Ansible Modules 文件?
- 常用的 Ansible Module 有哪些?
- 怎么使用 setup 取得 Managed node 的 facts?
- 怎么使用 Ansible 的 Template 系统?
- 怎么在 Playbooks 里使用 Handlers?
- Ansible 如何发送 notification 到 Slack?
- Ansible 如何发送 notification 到 HipChat?
- 如何在 Playbooks 使用 loops?
- 如何维护大型的 Playbooks?
- Roles 是什么?
- 怎么使用 Roles?
- 怎么用 Roles 部署 LNMP 网页应用程式?(上)
- 怎么用 Roles 部署 LNMP 网页应用程式?(下)
- 怎么用 Roles 部署 TestLink?
- 怎么在 Ansible Galaxy 分享 Roles?(上)
- 怎么在 Ansible Galaxy 分享 Roles?(下)
- 怎么用 Travis CI 测试 Roles?
- 怎么混用 Ansible 建置 Docker image?
- 怎么在 Docker Hub 混用 Ansible 自动建置 Docker image?
- 怎么用 Vault 管理敏感资料?
- 总结
常用的 Ansible Module 有哪些?
現代 IT 人一定要知道的 Ansible 自動化組態技巧
12. 常用的 Ansible Module 有哪些?
在上一章「11. 怎麼看 Ansible Modules 文件?」學會怎麼看文件以後,接著凍仁將介紹自己較常用的 8 個模組 (Modules)。
(以下依英文字母排列)
apt
apt module 是給 Debian, Ubuntu 等作業系統 (OS) 使用的套件模組 (Packaging Modules),我們可以透過它管理 apt 套件。其類似的 Linux 指令有 apt
, apt-get
, aptitude
和 dpkg
。
系統需求:需先安裝 python-apt (python 2) 或 python3-apt (python 3) 的 apt 套件。
更新套件索引 (快取),等同於
apt-get update
指令。- name: Update repositories cache apt: update_cache: yes
安裝 vim 套件。
- name: Install the package "vim" apt: name: vim state: present
移除 nano 套件。
- name: Remove "nano" package apt: name: nano state: absent
command
command module 是個可以在遠端上執行指令的指令模組 (Commands Modules),剛入門 Ansible 會用 module 不多?只要 Linux Shell 會通的指令都可以透過它使用。但它不支援變數 (variables) 和 <
, >
, |
, ;
和 &
等運算,若有這類需求請改用 shell module。
重新開機。
- name: Reboot at now command: /sbin/shutdown -r now
當某個檔案不存在時才執行該指令。
- name: create .ssh directory command: mkdir .ssh creates=.ssh/
先切換目錄再執行指令。
- name: cat /etc/passwd command: cat passwd args: chdir: /etc
copy
copy module 是從本地複製檔案到遠端的檔案模組 (Files Modules),若有使用變數需求者,可改用 template module,這部份凍仁會在第 14 章提到。其類似的 Linux 指令為 scp
。
複製 ssh public key 到遠端 (
chmod 644 /target/file
)。- name: copy ssh public key to remote node copy: src: files/id_rsa.pub dest: /home/docker/.ssh/authorized_keys owner: docker group: docker mode: 0644
複製 ssh public key 到遠端 (
chmod u=rw,g=r,o=r /target/file
)。- name: copy ssh public key to remote node copy: src: files/id_rsa.pub dest: /home/docker/.ssh/authorized_keys owner: docker group: docker mode: "u=rw,g=r,o=r"
複製 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
, mkdir
和 touch
。
建立檔案 (
touch
),並設定檔案權限為 644。- name: touch a file, and set the permissions file: path: /etc/motd state: touch mode: "u=rw,g=r,o=r"
建立目錄 (
mkdir
),並設定檔案擁有者為 docker。- name: create a directory, and set the permissions file: path: /home/docker/.ssh/ state: directory owner: docker mode: "700"
建立軟連結 (
ln
)。- name: create a symlink file file: src: /tmp dest: /home/docker/tmp state: link
lineinfile
lineinfile module 是個可用正規表示式對檔案進行插入或取代文字的檔案模組 (Files Modules)。其類似的 Linux 指令為 sed
。
移除 docker 使用者的 sudo 權限。
- name: remove sudo permission of docker lineinfile: dest: /etc/sudoers state: absent regexp: '^docker'
在
/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
。
啟用 nginx。
- name: start nginx service service: name: nginx state: started
停止 nginx。
- name: stop nginx service service: name: nginx state: stopped
重開網路服務。
- name: restart network service service: name: network state: restarted args: eth0
shell
shell module 是可以在遠端用 /bin/sh
執行指令的指令模組 (Commands Modules),支援變數 (variables) 和 <
, >
, |
, ;
和 &
等運算。
藉由
ls
和wc
檢查檔案數量。- name: check files number shell: ls /home/docker/ | wc -l
把所有的 Python 行程給砍掉。
- name: kill all python process shell: kill -9 $(ps aux | grep python | awk '{ print $2 }')
stat
stat module 是用來檢查檔案狀態的檔案模組 (Files Modules)。其類似的 Linux 指令為 stat
。
檢查檔案是否存在,若不存在則建立它。
- 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
取得某檔案的 md5sum。
- name: Use md5sum to calculate checksum stat: path: /path/to/something checksum_algorithm: md5sum
後語
以上為凍仁較常用的 8 個 Modules,大家可以先從以上的 Modules 入門 Ansible 喔!
參賽第 12 天的凍仁,一早騎車上班時出了點小小的車禍,也很幸運的沒什麼大礙。各位鐵人們在參賽的同時也要多加留意自身安全喔!
相關連結
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论