Я относительно новичок в Ansible и пытаюсь написать сценарий, который добавляет пользователей в группу серверов в зависимости от 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
Я пытаюсь понять, как, черт возьми, мой сценарий будет определять, какие пользователи добавляются на какие серверы. Я знаю, что мне нужно будет объявить еще одну переменную, чтобы мой сценарий знал, что user1 добавляется на серверы в grp1, но я не могу понять, как это сделать?
решение1
Один простой метод: используйтегрупповые переменные:
Если у вас только один пользователь на сервере, вы можете определить их в инвентаре (вам нужно адаптировать свою игру так, чтобы она не зацикливалась, и newuser
вместо этого использовать as var):
[grp1:vars]
newuser=user1
Если пользователей больше, вам нужен либо инвентарь YAML (вместо ini), либо используйте групповой var-файл: создайте подкаталог с именем group_vars
ниже каталога, содержащего файл инвентаря, по одному файлу на группу, например:
$ cat grp1
userlist:
- user1
- user2
и затем userlist
будут определяться отдельно для каждой группы.
решение2
Самый простой способ — через переменные хоста или переменные группы хостов. Вы можете прочитать, как это сделать здесь, вруководство по ansible. Другой более продвинутый вариант — через пользовательские факты или скрипты. Вам нужно прочитать о порядке переменных, чтобы избежать неожиданного поведения.
также я хотел бы указать на некоторые небольшие синтаксические ошибки. Нельзя начинать объявление с accolade({). И используйте двоеточия, когда размещаете одно объявление на строке. Вот так:
файл_инвентаризации:
[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