Ansible:剧本中我的 "with_itmes" 出了什么问题

Ansible: What's wrong with my "with_itmes" in playbook

我注册了 3 个主机密钥并尝试循环我的主机让另一个远程主机保存密钥

- setup:

- name: Generate Public Key On 3nodes
  openssh_keypair:
    path: /root/.ssh/id_rsa
    comment: "{{ ansible_hostname }}"
  when: inventory_hostname in groups['new_percona']  

- name: register public key
  shell: cat /root/.ssh/id_rsa.pub
  register: public_key
  when: inventory_hostname in groups['new_percona']

- name: Add Nodes Public Key On master-0
  lineinfile: 
    dest: /root/.ssh/authorized_keys
    line: "{{ hostvars['{{ item }}']['public_key']['stdout'] }}"
  with_items:
    - percona-0
    - percona-1
    - percona-2
  when: '"master-0" in inventory_hostname'

结果

TASK [Install : Add Nodes Public Key On master-0] ******************************
fatal: [master-0]: FAILED! => {"msg": "The task includes an option with an undefined variable. The error was: \"hostvars['{{ item }}']\" is undefined\n\nThe error appears to be in '/tmp/awx_5004_1s769t9j/project/roles/Install/tasks/install-percona.yml': line 62, 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: Add Nodes Public Key On master-0\n  ^ here\n"}

我也试试

- name: Add Nodes Public Key On master-0
  lineinfile: 
    dest: /root/.ssh/authorized_keys
    line: "{{ hostvars['{{ groups[new_percona] }}']['public_key']['stdout'] }}"
  when: '"master-0" in inventory_hostname'

或循环

- name: Add Nodes Public Key On master-0
  lineinfile: 
    dest: /root/.ssh/authorized_keys
    line: "{{ hostvars['{{ item }}']['public_key']['stdout'] }}"
  loop: [ 'percona-0', 'percona-1', 'percona-2' ]
  when: '"master-0" in inventory_hostname'

但以上都是错误的

如何使用变量循环主机?

如果只有一个主机,这是有效的

- name: Add Nodes Public Key On master-0
  lineinfile: 
    dest: /root/.ssh/authorized_keys
    line: "{{ hostvars['percona-0']['public_key']['stdout'] }}"
  when: '"master-0" in inventory_hostname'

不能在大括号内使用大括号。

line: "{{ hostvars[item]['public_key']['stdout'] }}"

这应该可以满足您的要求。