Назад | Перейти на главную страницу

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

Я относительно новичок в 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 будет определяться отдельно для каждой группы.