我正在尝试检查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列表)。
答案 0 :(得分:1)
好吧..我尝试了您的代码段,并且对两个用户都适用。唯一可能导致失败的是item.host.user
中的主机名与inventory_hostname
不匹配。您可以在执行此任务之前尝试调试inventory_hostname
,以查看ansible读取的清单主机名以及在item.host.user
列表中是否正确指定了清单主机名。
- debug: var=inventory_hostname