Ansible显示错误:
ERROR!任务中未检测到任何操作。这通常表示拼写错误的模块名称或模块路径不正确。
有什么问题?
确切的成绩单是:
ERROR! no action detected in task. This often indicates a misspelled module name, or incorrect module path.
The error appears to have been in 'playbook.yml': line 10, column 3, but may
be elsewhere in the file depending on the exact syntax problem.
The offending line appears to be:
---
- name: My task name
^ here
答案 0 :(得分:60)
您使用的是较旧版本的Ansible,它没有您尝试运行的模块。
如何检查?
打开模块列表module documentation,找到模块的文档页面。
阅读页面顶部的标题 - 它通常显示引入模块的Ansible版本。例如:
2.2版中的新功能。
确保您运行的是指定版本的Ansible或更高版本。运行:
ansible-playbook --version
检查输出。它应该显示如下:
ansible-playbook 2.4.1.0
你试图写一个角色并在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
操作模块名称拼写错误。
这很明显,但被忽视了。如果您使用的模块名称不正确,例如users
而不是user
,则Ansible将报告"在任务"中未检测到任何操作。
Ansible被设计为高度可扩展的系统。它没有一组有限的模块可以运行,也无法提前检查"每个动作模块的拼写。
实际上你可以编写然后指定你自己的名为qLQn1BHxzirz
的模块,而Ansible必须尊重它。因为它是一种解释性语言,它发现了#34;只有在尝试执行任务时才会出错。
您正在尝试执行未随Ansible分发的模块。
操作模块名称正确,但它不是与Ansible一起分发的标准模块。
如果您使用的是由第三方提供的模块 - 软件/硬件供应商或公开共享的其他模块,您必须先下载该模块并将其放在适当的目录中。
您可以将其放在剧本的modules
子目录中或公共路径中。
Ansible查找ANSIBLE_LIBRARY
或--module-path
命令行参数。
要检查哪些路径有效,请运行:
ansible-playbook --version
并检查以下值:
配置模块搜索路径=
Ansible 2.4及更高版本应提供路径列表。
你真的没有在任务中采取任何行动。
任务必须定义一些操作模块。以下示例无效:
- name: My task
become: true
答案 1 :(得分:5)
我无法真正改善@techraf的答案https://stackoverflow.com/a/47159200/619760。 我想添加原因#6我的特殊情况
错误地使用roles:
来导入/包括角色作为子任务。
这不起作用,您不能以这种方式将角色作为子任务包含在剧本中。
---
- hosts: somehosts
tasks:
- name: include somerole
roles:
- somerole
您现在可以使用import_role或include_role将角色与其他任何任务一起使用:
- hosts: webservers
tasks:
- debug:
msg: "before we run our role"
- import_role:
name: example
- include_role:
name: example
- debug:
msg: "after we ran our role"
在顶部添加角色
---
- hosts: somehosts
roles:
- somerole
tasks:
- name: some static task
import_role:
name: somerole
hosts: some host
- include_role:
name: example
之间的区别
答案 2 :(得分:2)
错误的说明:
没有要执行的任务意味着它无法执行您的剧本中描述的操作
根本原因:
如何检查:
ansible --version
解决方案:
如何升级Ansible:
Ubuntu快速说明:
sudo apt update
sudo apt install software-properties-common
sudo apt-add-repository --yes --update ppa:ansible/ansible
sudo apt install ansible
P.S:遵循此路径,并从版本2.0.2升级到2.9 升级后,同一本剧本就像魅惑一样
答案 3 :(得分:1)
对我来说,“ systemd”模块出现了问题。原来我的ansible --version
是 2.0.0.2 ,并且该模块最初是在版本 2.2 中引入的。将我的ansible更新到最新版本已解决了该问题。
playbook.yaml
- name: "Enable and start docker service and ensure it's not masked"
systemd:
name: docker
state: started
enabled: yes
masked: no
错误
ERROR! no action detected in task
etc..
etc..
etc..
- name: "Enable and start docker service and ensure it's not masked"
^ here
答案 4 :(得分:1)
当我将 debug
任务引用为 ansible.builtin.debug
导致 CI 中的语法错误(但在本地工作):
- name: "Echo the jenkins job template"
ansible.builtin.debug:
var: template_xml
verbosity: 1
在本地和 CI 中工作:
- name: "Echo the jenkins job template"
debug:
var: template_xml
verbosity: 1
我相信 - 但尚未证实 - 本地与 CI 的差异是可靠的版本。
答案 5 :(得分:0)
就我而言,这是修复:
ansible-galaxy collection install ansible.posix