簡介

模組(也被稱為 “task plugins” 或 “library plugins”)是在 Ansible 中實際在執行的.它們就 是在每個 playbook 任務中被執行的.你也可以僅僅通過 ‘ansible’ 命令來執行它們.

讓我們回顧一下我們是如何通過命令列來執行三個不同的模組:

ansible webservers -m service -a "name=httpd state=started"
ansible webservers -m ping
ansible webservers -m command -a "/sbin/reboot -t now"

每個模組都能接收參數. 幾乎所有的模組都接受鍵值對(key=value)參數,空格分隔.一些模組 不接收參數,只需在命令列輸入相關的命令就能呼叫.

在 playbook 中, Ansible 模組以類似的方式執行:

- name: reboot the servers
  action: command /sbin/reboot -t now

也可以簡寫成:

- name: reboot the servers
  command: /sbin/reboot -t now

另一種給模組傳遞參數的方式是使用 ymal 語法,這也被稱為 ‘complex args’

- name: restart webserver
  service:
    name: httpd
    state: restarted

無論你是使用命令列還是 playbooks 所有模組都會返回以 JSON 格式組織的資料.一般來說,對此你 無需知道太多.但如果你在編寫你自己的模組,那你需要在意,這意味著你不需要以特定的語言來編寫 你的模組 – 你可以自行選擇.

模組努力使自身冪等,這意味著它們會盡可能避免對系統做出改動除非那是必須的.當使用 Ansible playbooks 時,這些模組能夠觸發 ‘change events’,以這種形式通知 ‘handlers’ 去執行附加任務.

每個模組的文件能夠通過命令列的 ansible-doc 工具來獲取:

ansible-doc yum

列出所有已安裝的模組文件:

ansible-doc -l

See also

Introduction To Ad-Hoc Commands
Examples of using modules in /usr/bin/ansible
Playbooks
Examples of using modules with /usr/bin/ansible-playbook
Developing Modules
How to write your own modules
Python API
Examples of using modules with the Python API
Mailing List
Questions? Help? Ideas? Stop by the list on Google Groups
irc.freenode.net
#ansible IRC chat channel