Обычно это достигается с помощью переменных и циклов.Извлеките все переменные из списка переменных, содержащих словари параметров, затем используйте цикл для чтения и применения.Итак, основываясь на подходе вашей роли:
Создайте файл задач, содержащий две задачи для запуска - /playbooks/roles/users/tasks/create_user.yml:
---
- name: User "{{ item.name }}"
user:
comment "{{ item.name }} company account"
name: "{{ item.name }}"
home: "/data/company/{{ item.name }}"
state: present
uid: 666
group: company
groups: company
shell: /bin/bash
state: present
generate_ssh_key: no
password: "{{ item.password }}"
- name: "Create home directory for {{ item.name }}"
file:
path: "/data/company/{{ item.name }}"
state: directory
owner: "{{ item.name }}"
group: company
mode: 0700
Создайте файл varsсодержащий ваших пользователей - /playbooks/roles/users/vars/main.yml:
---
location: UK # This will be your default. It can be overridden in a variety of places
users:
- name: user1
password: <some password>
location: US
- name: user2
password: <some password>
location: UK
- name: user3
password: <some password>
location: UK
, затем в /playbooks/roles/users/tasks/main.yml:
---
- name: Create users based on location
include: create_user.yml
loop: "{{ users | selectattr('location', 'equalto', location) | list }}"
Надеюсь, большинство из них говорит само за себя.Поскольку вы используете роль, поместив переменную users в /playbooks/roles/users/vars/main.yml
, переменная автоматически становится доступной.Выражение users | selectattr('location', 'equalto', location)
принимает переменную user
и фильтрует список, чтобы включить в него только те объекты, у которых элемент 'location' равен значению, указанному в переменной 'location'.
Переменные
Петли
Роли