Sou relativamente novo no ansible e estou tentando escrever um manual que adiciona usuários a um grupo de servidores dependendo do user_type (que estou tentando definir)...
Então... meu manual é mais ou menos assim...
- name: add user
user:
name={{ item }}
state=present
shell=/bin/bash
with_items: "{{ userlist }}"
tags: add_new_user
become: true
userlist
é definido em um arquivo yml separado:
---
userlist:
user1
user2
user3
Definido no meu arquivo hosts, tenho 3 grupos:
[grp1]
192.168.0.0
192.168.0.1
[grp2]
192.168.0.0
192.168.0.3
[grp3]
192.168.0.4
O que estou pensando em fazer é adicionar esses tipos de grp à minha lista de usuários, para que fique mais ou menos assim:
---
userlist:
user1 grp1
user2 grp2
user3 grp3
Estou tentando descobrir como meu manual vai funcionar para descobrir quais usuários serão adicionados a quais servidores - sei que precisarei declarar outra variável para que meu manual saiba que o usuário1 está sendo adicionado aos servidores no grp1, mas Não consigo descobrir como?
Responder1
Um método simples: usevars de grupo:
Se você tiver apenas um usuário por servidor, você pode defini-los no inventário (você precisa adaptar seu jogo para não ficar em loop e usar newuser
como var):
[grp1:vars]
newuser=user1
Se houver mais usuários, você precisará de um inventário YAML (em vez de ini) ou usar um arquivo var de grupo: Crie um subdiretório chamado group_vars
abaixo do diretório que contém o arquivo de inventário com um arquivo por grupo, por exemplo
$ cat grp1
userlist:
- user1
- user2
e então userlist
seria definido separadamente para cada grupo.
Responder2
A maneira mais fácil é através de variáveis de host ou variáveis de grupo de hosts. Você pode ler como fazer isso aqui emo manual ansible. Outra opção mais avançada é por meio de fatos ou scripts personalizados. Você precisa ler sobre ordenação de variáveis para evitar comportamento inesperado.
também gostaria de apontar alguns pequenos erros de sintaxe. Você não pode iniciar uma declaração com um elogio ({). E use dois pontos ao colocar uma única declaração por linha. Igual a:
arquivo_de_inventário:
[grp1]
host1
host2
host3
[grp2]
host4
host5
host6
[grp3]
host1
host4
manual de instruções.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