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变量指定应该在哪些服务器上创建这个用户。好。谢谢,很好。非常感谢。