Ansible 迭代子项与子项可分解
具有复制每个用户密钥的任务Ansible 迭代子项与子项可分解,ansible,Ansible,具有复制每个用户密钥的任务 - name: SSH Keys authorized_key: user: "{{ item.0.name }}" key: "{{ item.0.ssh_key.0.key }}" state: "{{ item.0.ssh_key.0.state }}" when: - item.1 == 'all' or item.1 in group_names or item.1 == inventory_hostname w
- name: SSH Keys
authorized_key:
user: "{{ item.0.name }}"
key: "{{ item.0.ssh_key.0.key }}"
state: "{{ item.0.ssh_key.0.state }}"
when:
- item.1 == 'all' or item.1 in group_names or item.1 == inventory_hostname
with_subelements:
- "{{ users }}"
- servers
风险值列表:
users:
- name: user1
ssh_key:
- key:
- "key1.user1"
- "key2.user1"
- "key3.user1"
state: present
servers:
- server1
- name: user2
ssh_key:
- key:
- "key1.user2"
- "key2.user2"
state: present
servers:
- all
问题:我们如何允许用户复制多个密钥?不删除带有子元素的服务器。
启动任务时,会复制最后一个键或带有键的数组,具体取决于我们在var列表中写入它的方式。
以这种格式复制了最后一个键
- key: "key1.user1"
- key: "key2.user1"
- key: "key3.user1"
在这个数组中
- key:
- "key1"
- "key2"
让我们将数据的结构与此相适应。比如说,
用户:
-姓名:user1
ssh_密钥:
-“key1.user1”
-“key2.user1”
-“key3.user1”
国家:现在
服务器:
-服务器1
...
可以循环包含任务。例如,创建任务(首先使用debug
对其进行测试)
shell>cat conf\u authorized\u key.yml
-名称:SSH密钥
#授权密钥:
调试:
味精:
-“用户:{{item.0.name}}”
-“状态:{{item.0.state}}”
-“键:{{iitem}}”
循环:“{item.0.ssh_key}}”
回路控制:
循环变量:iitem
然后把它写进剧本里
shell>cat playbook.yml
-主机:本地主机
变量:
用户:
-姓名:user1
ssh_密钥:
-“key1.user1”
-“key2.user1”
-“key3.user1”
国家:现在
服务器:
-服务器1
-姓名:user2
ssh_密钥:
-“key1.user2”
-“key2.user2”
国家:现在
服务器:
-全部
任务:
-名称:循环包含任务
包括任务:conf\u authorized\u key.yml
循环:{{users}子元素('servers')}
回路控制:
标签:“{item.1}}”
当:(第1项==“全部”)或
(组名称中的项目1)或
(第1项==库存_主机名)
给予
shell>ansible playbook playbook.yml
播放[本地主机]****
任务[循环包含任务]****
正在跳过:[localhost]=>(项=服务器1)
包括:/export/scratch/tmp/conf\u authorized\u key.yml,用于本地主机
任务[SSH密钥]****
确定:[localhost]=>(item=key1.user2)=>{
“味精”:[
“用户:user2”,
“国家:出席”,
“key:key1.user2”
]
}
确定:[localhost]=>(item=key2.user2)=>{
“味精”:[
“用户:user2”,
“国家:出席”,
“key:key2.user2”
]
}
重演****
localhost:确定=2更改=0无法访问=0失败=0跳过=0获救=0忽略=0
让我们将数据的结构与此相适应。比如说,
用户:
-姓名:user1
ssh_密钥:
-“key1.user1”
-“key2.user1”
-“key3.user1”
国家:现在
服务器:
-服务器1
...
可以循环包含任务。例如,创建任务(首先使用debug
对其进行测试)
shell>cat conf\u authorized\u key.yml
-名称:SSH密钥
#授权密钥:
调试:
味精:
-“用户:{{item.0.name}}”
-“状态:{{item.0.state}}”
-“键:{{iitem}}”
循环:“{item.0.ssh_key}}”
回路控制:
循环变量:iitem
然后把它写进剧本里
shell>cat playbook.yml
-主机:本地主机
变量:
用户:
-姓名:user1
ssh_密钥:
-“key1.user1”
-“key2.user1”
-“key3.user1”
国家:现在
服务器:
-服务器1
-姓名:user2
ssh_密钥:
-“key1.user2”
-“key2.user2”
国家:现在
服务器:
-全部
任务:
-名称:循环包含任务
包括任务:conf\u authorized\u key.yml
循环:{{users}子元素('servers')}
回路控制:
标签:“{item.1}}”
当:(第1项==“全部”)或
(组名称中的项目1)或
(第1项==库存_主机名)
给予
shell>ansible playbook playbook.yml
播放[本地主机]****
任务[循环包含任务]****
正在跳过:[localhost]=>(项=服务器1)
包括:/export/scratch/tmp/conf\u authorized\u key.yml,用于本地主机
任务[SSH密钥]****
确定:[localhost]=>(item=key1.user2)=>{
“味精”:[
“用户:user2”,
“国家:出席”,
“key:key1.user2”
]
}
确定:[localhost]=>(item=key2.user2)=>{
“味精”:[
“用户:user2”,
“国家:出席”,
“key:key2.user2”
]
}
重演****
localhost:确定=2更改=0无法访问=0失败=0跳过=0获救=0忽略=0
为什么要在此处将与子元素一起使用?您永远不会使用服务器
键中的任何内容。你能更新这个问题以显示你实际上在做什么吗?我在所有服务器上运行playbook。每个用户的servers变量指定应该在哪些服务器上创建该用户。你为什么在这里使用和\u subelements
?您永远不会使用服务器
键中的任何内容。你能更新这个问题来显示你实际上在做什么吗?我在所有服务器上运行playbook。每个用户的servers变量指定应该在哪些服务器上创建这个用户。好。谢谢,很好。非常感谢。