我在 vars 上循环时遇到问题,
- hosts: all
become: yes
vars:
user:
- name: "neito"
pubkey: "{{ lookup('file', '~/.ssh/vsphere_vm.pub') }}"
privkey: "{{ lookup('file', '~/.ssh/vsphere_vm') }}"
tasks:
- name: "Add SSH public key"
authorized_key:
user: "{{ item.name }}"
key: "{{ item.pubkey }}"
loop:
- "{{ user }}"
Run Code Online (Sandbox Code Playgroud)
运行此剧本时出现以下错误:
The error was: 'list object' has no attribute 'name'
Ansible似乎{{ item.name }}没有定义,我想我在这里遗漏了一些明显的东西,但我找不到什么。(我正在关注这个入门帖子
编辑1:
通过像下面这样声明变量,它可以工作:
vars:
user:
{
name: "neito",
pubkey: "{{ lookup('file', '~/.ssh/vsphere_vm.pub') }}",
privkey: "{{ lookup('file', '~/.ssh/vsphere_vm') }}",
}
Run Code Online (Sandbox Code Playgroud)
有人还能指出为什么第一个语法不起作用吗?
问题是-前面的破折号"{{ user }}":
loop:
- "{{ user }}"
Run Code Online (Sandbox Code Playgroud)
需要是 :
loop: "{{ user }}"
Run Code Online (Sandbox Code Playgroud)
请检查循环文档:
\n\n\n您可以在变量文件中或在 play 的 \xe2\x80\x98vars\xe2\x80\x99 部分中定义列表,然后在任务中引用列表的名称:
\nRun Code Online (Sandbox Code Playgroud)\nloop: "{{ somelist }}"\n
如果您将原始任务修改为:
\ntasks:\n - name: "Add SSH public key"\n authorized_key:\n user: "{{ item.name }}"\n key: "{{ item.pubkey }}"\n loop: "{{ user }}"\nRun Code Online (Sandbox Code Playgroud)\n你应该可以走了。
\n| 归档时间: |
|
| 查看次数: |
6960 次 |
| 最近记录: |