Ansible 错误!在任务中未检测到任何操作。这通常表示模块名称拼写错误或模块路径不正确

Ansible 错误!在任务中未检测到任何操作。这通常表示模块名称拼写错误或模块路径不正确,ansible,Ansible,我正在尝试创建一个简单的工资薄,其中有一个共同的角色。不幸的是,我被ansible妨碍了。我在互联网上到处寻找这个错误的解决方案 设置: 我正在Ubuntu 18.04上运行ansible 2.7.4 目录结构: ~/Ansible_Do playbook.yml inventory (hosts file) /roles /common /defaults main.yml (other variables)

我正在尝试创建一个简单的工资薄,其中有一个共同的角色。不幸的是,我被ansible妨碍了。我在互联网上到处寻找这个错误的解决方案

设置: 我正在Ubuntu 18.04上运行ansible 2.7.4

目录结构:

~/Ansible_Do
 playbook.yml
 inventory  (hosts file) 
    /roles
      /common 
        /defaults
            main.yml   (other variables)
        /tasks
            main.yml
            richard_e.yml
        /vars
            vars_and_stuff.yml   (vault)
我有一本简单的剧本

---
# My playbook 1
- hosts: test

- name: Go to common role to run tasks.
  roles:
    - common

  tasks:
  - name: echo something
    shell: echo $(ip addr | grep inet)
...
我运行此命令以启动playbook:

~/Ansible_Do$ ansible-playbook -vv --vault-id @prompt -i ~/Ansible_Do/inventory playbook.yml
我输入保险库密码继续播放剧本

playbook开始从服务器的测试组中提取事实。然后读取角色并将其转换为/roles/common。它调用/common/tasks/main.yml文件。这就是错误发生的地方

错误似乎出现在“/home/~/Ansible\u Do/roles/common/tasks/main.yml”中:第8行,第3列

# Common/tasks file
---
- name: Bring variable from vault
  include_vars:
    file: vars_and_stuff.yml
    name: My_password

- name: Super Richard   <======  Error 
  become: yes  
  vars:
    ansible_become_pass: "{{ My_password }}"

- import_tasks: ./roles/common/tasks/ricahrd_e.yml
...
“-name”上的错误。我已经在网上和Ansible文档中进行了检查,看看是否有我丢失的钥匙。我在/role/tasks()中找到了一个include_vars示例,它在一个简单的角色中显示了正确的语法(我想)。代码作为部分工作,但不能一起工作


我已经达到了我能理解的程度。我觉得这是一个非常简单的错误,我错过了一些东西(以林换树)

除了“模块名”在您的案例中没有拼写错误之外,该错误的意思与它所说的完全相同,但完全丢失了

这个

- name: Super Richard   <======  Error 
  become: yes  
  vars:
    ansible_become_pass: "{{ My_password }}"

-name:Super Richard经过一段时间的工作,我把剧本准备好了。知道“成为”不是一项任务是开始。我还发现了如何从保险库中取出合适的VAR

# My first playbook 1
- hosts: test
  become: yes

  vars_files:
  - ./roles/common/vars/vars_and_stuff.yml

  vars:
    ansible_become_pass: "{{ My_password }}"

  roles:
    - common

  tasks:
  - name: echo something
    shell: echo $(ip addr | grep inet)

vars文件访问vault,然后
vars:
提取
使用的密码,使其成为
。随着
been
生效,我使用最后一个独立任务运行了
common
角色中的其他任务。最后,不要试图将
-name:
放在剧本的顶层,因为它会触发主机未定义的错误。

我可以看出对“成为”的误解。我将从任务列表文件中查看如何使用been。我会看看主要的剧本并解决这个问题。一般来说,我会建议只把它放在真正需要它的任务上。您还可以混合和匹配它,即在剧本上设置
been:yes
,并在任务级别上用
been:no
覆盖。
# My first playbook 1
- hosts: test
  become: yes

  vars_files:
  - ./roles/common/vars/vars_and_stuff.yml

  vars:
    ansible_become_pass: "{{ My_password }}"

  roles:
    - common

  tasks:
  - name: echo something
    shell: echo $(ip addr | grep inet)