Новое в Ansible — добавление пользователей на серверы в зависимости от типа

Новое в Ansible — добавление пользователей на серверы в зависимости от типа

Я относительно новичок в 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

Связанный контент