原因 #1
您使用的是旧版本的 Ansible,它没有您尝试运行的模块。
如何检查?
打开模块列表module documentation 并找到您的模块的文档页面。
-
阅读页面顶部的标题 - 它通常显示引入模块的 Ansible 版本。例如:
2.2 版中的新功能。
-
确保您正在运行指定版本的 Ansible 或更高版本。运行:
ansible-playbook --version
然后检查输出。它应该显示如下内容:
ansible-playbook 2.4.1.0
原因 #2
您尝试编写一个角色并将剧本放入my_role/tasks/main.yml。
tasks/main.yml 文件应仅包含任务列表。如果您指定:
---
- name: Configure servers
hosts: my_hosts
tasks:
- name: My first task
my_module:
parameter1: value1
Ansible 尝试查找名为 hosts 的操作模块和名为 tasks 的操作模块。它没有,所以它会抛出一个错误。
解决方案:在tasks/main.yml 文件中只指定一个任务列表:
---
- name: My first task
my_module:
parameter1: value1
原因 #3
动作模块名称拼写错误。
这很明显,但被忽视了。如果您使用不正确的模块名称,例如 users 而不是 user,Ansible 将报告“在任务中未检测到任何操作”。
Ansible 被设计成一个高度可扩展的系统。它没有您可以运行的有限模块集,也无法“提前”检查每个动作模块的拼写。
事实上,您可以编写并指定您自己的名为qLQn1BHxzirz 的模块,Ansible 必须尊重这一点。由于它是一种解释型语言,它仅在尝试执行任务时“发现”错误。
原因 #4
您正在尝试执行未随 Ansible 分发的模块。
动作模块名称正确,但它不是随 Ansible 分发的标准模块。
如果您使用的是第三方提供的模块 - 软件/硬件供应商或其他公开共享的模块,您必须首先下载该模块并将其放置在适当的目录中。
您可以将其放置在 playbook 的 modules 子目录或公共路径中。
Ansible 看起来像 ANSIBLE_LIBRARY 或 --module-path 命令行参数。
要检查哪些路径有效,请运行:
ansible-playbook --version
并检查以下值:
配置的模块搜索路径 =
Ansible 2.4 及更高版本应提供路径列表。
原因 #5
您在任务中确实没有任何操作。
任务必须定义一些动作模块。以下示例无效:
- name: My task
become: true