Ansible检查清单名称是否在列表中

时间:2018-11-10 08:48:45

标签: ansible

我正在尝试检查inventory_hostname是否在导入变量的列表中。

vars/users.yml file:
---
users:

  - username: user1
    comment: "User 1"
    group: admin
    password: "sha password"
    keys:
      active:
        - "ssh-rsa etc"
    admin: yes

  - username: user2
    comment: "User 2"
    group: users
    groups: deployer
    keys:
      active:
        - "ssh-rsa etc"
    hosts:
      user:
        - host1
        - host2
      deployer:
        - host3

仅当 inventory_hostname 进入任何主机列表(用户,部署者,其他...)时,我才想执行任务。

我尝试过:

- name: Create users
  user:
    name: "{{ item.username }}"
    comment: "{{ item.comment | default('User {{item.username}}') }}"
    password: "{{ item.password | default('!') }}"
    state: "{{ item.state | default('present') }}"
    shell: "{{ item.shell | default('/bin/bash') }}"
    group: "{{ item.group | default('users') }}"
  with_items: '{{ users }}'
  when: item.username is defined and ((item.admin is defined and item.admin == True) or (item.hosts is defined and item.hosts.user is defined and inventory_hostname in item.hosts.user)

它适用于 user1 (已启用管理员),但不适用于 user2 (如果该播放是在 host1 中执行的, user2的hosts.user列表)。

1 个答案:

答案 0 :(得分:1)

好吧..我尝试了您的代码段,并且对两个用户都适用。唯一可能导致失败的是item.host.user中的主机名与inventory_hostname不匹配。您可以在执行此任务之前尝试调试inventory_hostname,以查看ansible读取的清单主机名以及在item.host.user列表中是否正确指定了清单主机名。

- debug: var=inventory_hostname