Ansible vault未正确传递到剧本
我正在尝试使用ansible和ansible vault为用户提供服务。这是我当前的目录结构:Ansible vault未正确传递到剧本,ansible,Ansible,我正在尝试使用ansible和ansible vault为用户提供服务。这是我当前的目录结构: |-- ansible-test.out |-- group_vars |-- inventory |-- roles | |-- bsd_sudoers | | |-- tasks | | |-- templates | | | `-- cde-admins | | `-- vars | `-- bsd_users | |-- files |
|-- ansible-test.out
|-- group_vars
|-- inventory
|-- roles
| |-- bsd_sudoers
| | |-- tasks
| | |-- templates
| | | `-- cde-admins
| | `-- vars
| `-- bsd_users
| |-- files
| |-- tasks
| | `-- main.yml
| |-- templates
| `-- vars
| `-- all.yml
|-- site.retry
|-- site.yml
`-- vars
`-- all.yml
到目前为止,我的剧本就是这样的:
---
- name: Creating Users
user:
name: "{{ item.name }}"
system : "{{ item.sudoer }}"
shell: /bin/bash
password: "{{ item.password }}"
uid: "{{ item.uid }}"
home: "{{ item.home }}"
with_items: users
以下是我在ansible vault中的示例:
---
vars:
users:
- name: 'foo'
home: '/home/foo'
key: 'ssh-rsa ....'
password: '!!'
bash: '/bin/bash'
sudoer: yes
uid: "2049"
guid: '2049'
group: admin
运行playbook时,始终会生成以下错误消息:
fatal: [ansible-test]: FAILED! => {"failed": true, "msg": "The task includes an option with an undefined variable. The error was: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'uid'\n\nThe error appears to have been in '/Users/ansible/playbooks/roles/bsd_users/tasks/main.yml': line 2, column 3, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n---\n- name: Creating Users\n ^ here\n\nexception type: <class 'ansible.errors.AnsibleUndefinedVariable'>\nexception: 'ansible.utils.unsafe_proxy.AnsibleUnsafeText object' has no attribute 'uid'"}
to retry, use: --limit @/Users/ansible/playbooks/site.retry
fatal:[ansible测试]:失败!=>{“failed”:true,“msg”:"该任务包含一个带有未定义变量的选项。错误是:“ansible.utils.unsafe\u proxy.AnsibleUnsafeText对象”没有属性“uid”\n\n错误似乎出现在“/Users/ansible/playbooks/roles/bsd\u Users/tasks/main.yml”:第2行第3列,但根据确切的语法问题,可能\n出现在文件的其他位置。\n\n有问题的Ing行似乎是:\n\n---\n-name:正在创建用户\n^此处\n\n异常类型:\n异常:“ansible.utils.unsafe\u proxy.AnsibleUnsafeText对象”没有属性“uid”}
要重试,请使用:--limit@/Users/ansible/playbooks/site.retry
为什么总是发生这种情况?我的印象是Ansible会自然而然地将加密变量传递给我的剧本,但事实似乎并非如此。首先:
带有_项:用户
应该是带有_项:“{{users}}”
不再支持 第二: 无需在Vault文件中定义顶级
vars
dict,请使用:
---
users:
- name: foo
home: /home/foo
- name: bar
home: /home/bar
正如Konstantin之前提到的,您需要通过命令行将变量文件包括为
-e@vars/all.yml
,或者通过将vars\u文件添加到剧本中。您还可以将all.yml
文件添加到group\u vars
目录中,并且它将被自动拾取
关于您收到的第二条错误消息,从Ansible 2.4开始,建议在命令行中提供密码的方法是使用--vault id
。这可以是id文件的路径,也可以是Ansible提示您输入密码的@prompt
,甚至是返回pa的脚本的路径ssword
在Ansible 2.4之前,您需要使用--询问保险库通行证
或--保险库密码文件
您还可以在ansible.cfg
中添加名为vault\u password\u file
的变量,从中可以定义vault密码文件的位置(例如vault\u password\u file=/path/to/.vault\u password\u file
),因此您无需每次运行ansible playbook
时都指定它。从ansible 1.7开始,此路径还可以指向一个脚本,该脚本将密码作为stdout返回
如果这有助于回答您的问题,如果您能将其标记为已接受的答案,我将不胜感激。我会告诉您,我得到的用户未定义您的Vault vars文件位于何处?抱歉,我不是交互式调试器:-/请注意错误消息。是的,很抱歉,我敲定了这些错误消息,我尝试了我已经查过了,上面什么都找不到,这就是它把我带到这里来的原因