实战手册
---
- name: task 11
hosts: prod
vars_files:
- users_pass.yml
tasks:
- name: create group profs
group:
name: profs
state: present
- name: create users who have depart set as profs
user:
name: "{{ item.uname }}"
groups: "{{ item.department }}"
shell: /bin/bash
password: "{{ item.password | password_hash ('sha256') }}"
when: "'{{ item.department }}'=='profs'"
loop: " {{ users }} "
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#the users_pass.yml
---
users:
- uname: linda
password: password
department: profs
- uname: lisa
password: secret
department: profs
- uname: anna
password: geheim
department: students当运行上面提到的剧本并添加这个var文件时,我得到以下错误:
fatal: [ansible5]: FAILED! => {
"msg": "Invalid data passed to 'loop', it requires a list, got this instead: [{'uname': 'linda', 'password': 'password', 'department': 'profs'}, {'uname': 'lisa', 'password': 'secret', 'department': 'profs'}, {'uname': 'anna', 'password': 'geheim', 'department': 'students'}] . Hint: If you passed a list/dict of just one element, try adding wantlist=True to your lookup invocation or use q/query instead of lookup."
}我真的不明白,我确信我的变量声明是正确的。有什么需要帮忙的吗?
发布于 2020-12-13 11:46:32
我认为问题是由于loop变量中引号中的空格造成的,即" {{ users }} "。由于使用Jinja分隔符{{,when条件中可能存在另一个“隐藏”问题。
总体而言,它应该与以下更改一起工作:
- name: create users who have depart set as profs
user:
name: "{{ item.uname }}"
groups: "{{ item.department }}"
shell: /bin/bash
password: "{{ item.password|password_hash('sha256') }}"
when: item.department == "profs"
loop: "{{ users }}"https://stackoverflow.com/questions/65271074
复制相似问题