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

时间:2019-03-01 09:51:57

标签: ansible

我试图创建一个具有共同角色的简单薪水簿。不幸的是我被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)

我有一个简单的playbook.yml

---
# 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)
...

我运行以下命令来启动剧本:

~/Ansible_Do$ ansible-playbook -vv --vault-id @prompt -i ~/Ansible_Do/inventory playbook.yml

我输入延续剧本的保管库密码。

剧本开始从服务器的测试组中提取事实。然后读取角色并在/ roles / common下工作。那将调用/common/tasks/main.yml文件。这是发生错误的地方。

错误似乎出在'/home/~/Ansible_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
...

./ roles / common / tasks / ricahrd_e.yml是一个简单的测试任务。

---
- name: say hi
  debug:
    msg: "Active server."
...

“-名称”错误。我已经在线检查并在Ansible文档中查看是否有我遗失的钥匙。我在/ role / tasks(https://gist.github.com/halberom/ef3ea6d6764e929923b0888740e05211)中找到了include_vars的示例,该示例以简单的角色显示了正确的语法(我认为是)。该代码是一部分,但不能一起使用。

我已经达到了我能理解的程度。我觉得错误很简单,我错过了一些东西(森林就是树木)。

2 个答案:

答案 0 :(得分:1)

该错误的含义与所讲的完全相同,除了“模块名称”在您的情况下不是拼写错误,而是完全丢失。

这个...

height

...不是有效的任务定义,它没有声明操作。
Ansible中的动作是对模块的调用,因此是“拼写错误的模块名称”。
错误出现在firstAttribute之后,因为这是Ansible期望您要调用的“模块”名称的地方,例如for constraint in cell.textView.constraints { if constraint.firstAttribute == .height { constraint.isActive = false break } } 在您的第一个示例中。

您可能假设- name: Super Richard <====== Error become: yes vars: ansible_become_pass: "{{ My_password }}" 是一个“模块”,但实际上不是。
它是一个“ playbook关键字”,在这种情况下适用于任务级别,其作用是您成为该任务的另一个用户 。 但是由于该任务没有执行任何操作,因此会出现此错误。

查看文档:
Playbook keywords
Understanding privilege escalation

答案 1 :(得分:0)

经过一些工作,我得到了剧本。知道“成为”不是一项任务。我还发现了如何从库中提取适当的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文件访问库,然后vars:提取become使用的密码。启用become后,我以最后一个独立任务运行了common角色中的其他任务。最后,不要尝试在剧本的顶层- name:触发主机未定义的错误。