Я относительно новичок в ansible, и я пытаюсь написать playbook, который добавляет пользователей к группе серверов в зависимости от user_type (который я пытаюсь определить) ...
Итак ... мой сценарий выглядит примерно так ...
- name: add user
user:
name={{ item }}
state=present
shell=/bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
become: true
userlist
определяется в отдельном файле yml:
---
userlist:
user1
user2
user3
Определено в моем файле hosts, у меня есть 3 группы:
[grp1]
192.168.0.0
192.168.0.1
[grp2]
192.168.0.0
192.168.0.3
[grp3]
192.168.0.4
Я думаю о добавлении этих типов grp в свой список пользователей, чтобы это выглядело примерно так:
---
userlist:
user1 grp1
user2 grp2
user3 grp3
Я пытаюсь понять, как моя playbook будет определять, какие пользователи будут добавлены к каким серверам - я знаю, что мне нужно будет объявить другую переменную, чтобы моя playbook знала, что user1 добавляется на серверы в grp1, но Я не могу понять, как?
Самый простой способ - через переменные хоста или переменные группы хостов. Вы можете прочитать, как это сделать, здесь, в Руководство по ансиблю. Еще один более продвинутый вариант - это настраиваемые факты или сценарии. Вам нужно прочитать о порядке переменных, чтобы избежать неожиданного поведения.
Также хотелось бы отметить небольшие синтаксические ошибки. Вы не можете начинать объявление с похвалы ({). И используйте двоеточия при размещении одного объявления в строке. Вот так:
invetory_file:
[grp1]
host1
host2
host3
[grp2]
host4
host5
host6
[grp3]
host1
host4
playbook.yml:
- hosts: all
become: true
tasks:
- name: adding users to x
user:
name: "{{ item }} "
state: present
shell: /bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
group_vars / grp1.yml:
---
userlist:
- user1
- user2
- user3
host_vars / host5.yml
---
userlist:
- user1
- user4
- user10
Один простой метод: используйте групповые вары:
Если у вас есть только один пользователь на сервер, вы можете определить их в инвентаре (вам нужно адаптировать свою игру, чтобы не зацикливаться и использовать newuser
вместо этого как var):
[grp1:vars]
newuser=user1
Если пользователей больше, вам понадобится инвентарь YAML (вместо ini) или используйте файл группы var: Создайте подкаталог с именем group_vars
под директорией, содержащей файл инвентаря, по одному файлу на группу, например
$ cat grp1
userlist:
- user1
- user2
а потом userlist
будет определяться отдельно для каждой группы.