首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible:我的playbook中的"with_itmes“有什么问题?

Ansible:我的playbook中的"with_itmes“有什么问题?
EN

Stack Overflow用户
提问于 2021-05-27 16:09:17
回答 1查看 22关注 0票数 0

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

代码语言:javascript
复制
- 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'

结果呢?

代码语言:javascript
复制
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"}

我也试过了

代码语言:javascript
复制
- 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'

或循环

代码语言:javascript
复制
- 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'

但以上都是错误的

如何使用变量来循环主机?

如果只有一台主机,这是可行的

代码语言:javascript
复制
- 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'
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-27 16:39:17

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

代码语言:javascript
复制
line: "{{ hostvars[item]['public_key']['stdout'] }}"

这应该可以做你想要的事情。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67718177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档