2016-03-04 15 views
8

Sto utilizzando Ansible per aggiungere un utente a vari server. Alcuni dei server hanno diversi gruppi UNIX definiti. Mi piacerebbe trovare un modo per Ansible di verificare l'esistenza di un gruppo che specifichi, e se tale gruppo esiste, aggiungilo all'elenco dei gruppi secondari di un utente (ma ignora l'istruzione se il gruppo non esiste).Ansible: Aggiungi gruppo Unix all'utente solo se il gruppo esiste

Qualche idea su come potrei farlo con Ansible?

Ecco il mio punto di partenza.

Comando

ansible-playbook -i 'localhost,' -c local ansible_user.yml 

ansible_user.yml

--- 

- hosts: all 
    user: root 
    become: yes 
    vars: 
    password: "!" 
    user: testa 
    tasks: 
    - name: add user 
     user: name="{{user}}" 
      state=present 
      password="{{password}}" 
      shell=/bin/bash 
      append=yes 
      comment="test User" 

Aggiornato: basato sulla soluzione suggerita da @udondan, sono stato in grado di ottenere questo lavoro con le seguenti ulteriori compiti.

- name: Check if user exists 
     shell: /usr/bin/getent group | awk -F":" '{print $1}' 
     register: etc_groups 

    - name: Add secondary Groups to user 
     user: name="{{user}}" groups="{{item}}" append=yes 
     when: '"{{item}}" in etc_groups.stdout_lines' 
     with_items: 
      - sudo 
      - wheel 

risposta

3

Avete qualcosa per identificare questi diversi tipi di host?

In caso contrario, è necessario innanzitutto verificare quali gruppi sono presenti su tale host. È possibile farlo con il comando groups | tr -s " " "\012" che genererà un gruppo per riga.

È possibile utilizzare questo compito come separato in questo modo:

- shell: groups | tr -s " " "\012" 
    register: groups 

Il risultato registrato quindi può essere utilizzato più tardi, quando si desidera aggiungere il gruppo di utenti

- user: ... 
    when: "some_group" in groups.stdout_lines 
+3

I gruppi di comando su> = 7.0 Red Hat e gli amici non stampa tutti i gruppi in/etc/groups. Stampa solo i gruppi in cui si trova l'utente corrente. –

+1

Su Ubuntu 16.04, il comando "groups ..." stampa solo i gruppi a cui appartiene l'utente corrente. – mykola

+1

È necessario registrare una variabile diversa in questo esempio perché "groups" è un Variabile riservata di Ansible: - https://github.com/lorin/ansible-quickref – gilesw

Problemi correlati