简介

模块(也被称为 “task plugins” 或 “library plugins”)是在 Ansible 中实际在执行的.它们就是在每个 playbook 任务中被执行的.你也可以仅仅通过 ‘ansible’ 命令来运行它们.

让我们回顾一下我们是如何通过命令行来执行三个不同的模块:

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

每个模块都能接收参数. 几乎所有的模块都接受键值对(key=value)参数,空格分隔.一些模块不接收参数,只需在命令行输入相关的命令就能调用.

在 playbook 中, Ansible 模块以类似的方式执行:

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

也可以简写成:

  1. - name: reboot the servers
  2. command: /sbin/reboot -t now

另一种给模块传递参数的方式是使用 ymal 语法,这也被称为 ‘complex args’

  1. - name: restart webserver
  2. service:
  3. name: httpd
  4. state: restarted

无论你是使用命令行还是 playbooks 所有模块都会返回以 JSON 格式组织的数据.一般来说,对此你无需知道太多.但如果你在编写你自己的模块,那你需要在意,这意味着你不需要以特定的语言来编写你的模块 – 你可以自行选择.

模块努力使自身幂等,这意味着它们会尽可能避免对系统做出改动除非那是必须的.当使用 Ansibleplaybooks 时,这些模块能够触发 ‘change events’,以这种形式通知 ‘handlers’ 去运行附加任务.

每个模块的文档能够通过命令行的 ansible-doc 工具来获取:

  1. ansible-doc yum

列出所有已安装的模块文档:

  1. ansible-doc -l

See also