首页 > 解决方案 > 在“vars”部分使用 {{ item }} 时,Ansible“项目未定义”

问题描述

我有一些如下代码,我想迭代 groups['A'] 和 groups['B'] 中的每个主机来创建组。

- name: Create a group
  group:
    name: "test_group"
    state: "present"
  delegate_to: "{{ item }}"
  vars:
    ansible_ssh_user: "{{ lookup('env', 'USER') }}@user@{{ item }}"
  with_items:
    - "{{ groups['A'] }}"
    - "{{ groups['B'] }}"

因为我想修改 ansible ssh 连接用户以连接到“delegate_to”主机,所以我在此任务中覆盖了 ansible_ssh_user,但它不起作用并给我类似的错误消息

失败的!=> {"msg": "'item' 未定义"}

但是如果我注释掉

vars:
    ansible_ssh_user: "{{ lookup('env', 'USER') }}@user@{{ item }}"

它没有给出任何错误。

标签: ansible

解决方案


尝试将 var 更改为:

 ansible_ssh_user: "{{ lookup('env', 'USER') }}@user@{{ ansible_hostname }}

这对我来说很好:

- name: 'install public key on every server'
  authorized_key:
    user: '{{ myuser}}'
    key: "{{ myuser.ssh_public_key }}"
  delegate_to: '{{ item }}'
  with_items:
    - '{{ groups["A"] }}'
    - '{{ groups["B"] }}'
    - '{{ groups["C"] }}'

也许您可以尝试,但在我委托 set_fact 并在本地恢复它之前...


推荐阅读