我应该如何编写用于 ansible 变量的 yaml 文件?

我应该如何编写用于 ansible 变量的 yaml 文件?

我开始部署一个 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 }}"

相关内容