我开始部署一个 ansible 服务器,并尝试通过剧本(add5userslist.yaml)在客户端主机中创建 5 个用户,并使用循环使用来自另一个文件(userslist.yaml)的列表中的变量,但没有成功。
和...这当我尝试使用该剧本和该列表时,ansible 会检索到以下内容:
似乎问题出在所使用的列表上,事实上 ansible 甚至没有将其视为列表,但我对 ansible 还不熟悉,不知道该文件应该包含什么。
剧本代码:
- hosts: GrupoPrincipal
tasks:
- include_vars:
file: /etc/ansible/playbooks/userslist.yaml
name: userslist
- name: Add 5 users from a list
ansible.builtin.user:
name: "{{ item.name }}"
password: "{{'abc123.' | password_hash('sha512')}}"
loop: "{{ userslist }}"
userlist.yaml 代码只有这个,是唯一有点作用的东西:
name: 'user1'
name: 'user2'
name: 'user3'
name: 'user4'
name: 'user5'
@Martin 帮我解决了上述问题,但现在我尝试使用多种项目类型,似乎行不通,下面是我获得的新代码
- hosts: GrupoPrincipal
tasks:
- include_vars:
file: /etc/ansible/playbooks/userslist.yaml
name: userslist
- name: Add 5 users from a list and put them in groups
ansible.builtin.user:
name: "{{ item.names }}"
groups: "{{ item.groups }}"
password: "{{'abc123.' | password_hash('sha512')}}"
loop:
- { names: '{{ userslist.names }}', groups: '{{ userslist.groups }}' }
以及新的列表 yaml:
names:
- user1
- user2
- user3
- user4
- user5
groups:
- users
- users
- users
- users
- users
答案1
您正在告诉您的任务循环遍历代表您的文件变量的对象,但循环需要一个列表。
您必须定义您的 var_files 如下:
users:
- user1
- user2
然后在您的主剧本中,删除“item.name”以便仅使用该项目,并在您的 varfile 中精确说明您使用的变量:
- hosts: GrupoPrincipal
tasks:
- include_vars:
file: /etc/ansible/playbooks/userslist.yaml
name: userslist
- name: Add 5 users from a list
ansible.builtin.user:
name: "{{ item }}"
password: "{{'abc123.' | password_hash('sha512')}}"
loop: "{{ userslist.users }}"