我试图创建一个具有共同角色的简单薪水簿。不幸的是我被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的示例,该示例以简单的角色显示了正确的语法(我认为是)。该代码是一部分,但不能一起使用。
我已经达到了我能理解的程度。我觉得错误很简单,我错过了一些东西(森林就是树木)。
答案 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关键字”,在这种情况下适用于任务级别,其作用是您成为该任务的另一个用户 。
但是由于该任务没有执行任何操作,因此会出现此错误。
答案 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:
触发主机未定义的错误。