我试图创建一个具有共同角色的简单支付书。不幸的是,我被安排所困扰。我已经在互联网上查找解决方案以找到此错误。
设置:我在Ubuntu上运行Ansible 2.7.4 18.04
目录结构:
~/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
我输入继续剧本的保险库密码。
剧本开始从测试组的服务器组中提取事实。然后读取角色并起作用/角色/共同。该调用/common/tasks/main.yml文件。这是错误发生的地方。
该错误似乎已在'/home/~/ancible_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文档中检查了一下,以查看是否有我缺少的钥匙。我在A/角色/任务(https://gist.github.com/halberom/ef3ea6d6764e92992923b0888740e5211)中找到了一个incepent_vars的示例,显示了适当的语法(i usement)。该代码可作为零件工作,但不在一起。
我已经达到了我能理解的。我觉得这是错误的简单,我缺少一些东西(树林的森林)。
错误完全意味着它所说的,除了"模块名称"在您的情况下没有拼写错误,但完全缺少。
这个...
- name: Super Richard <====== Error
become: yes
vars:
ansible_become_pass: "{{ My_password }}"
...不是有效的任务定义,它不会声明操作。
Ansible中的动作是对模块的呼吁,因此"拼写错误的模块名称"。
错误是在name
之后出现的,因为这是Ansible期望要调用的"模块"的名称,例如shell
在您的第一个示例中。
您可能假设become
是"模块",但不是。
这是一个"剧本关键字",在这种情况下,在任务级别上应用,它的效果使您成为此任务的另一个用户。但是由于任务没有操作,您会得到此错误。
请参阅文档:
剧本关键字
了解特权升级
工作后,我得到了剧本的工作。知道"成为"不是任务是开始。我还发现了如何从保险库中拉出适当的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:
。