2016-03-04 19 views
8

私は、さまざまなサーバーにユーザーを追加するためにAnsibleを使用しています。一部のサーバーでは、異なるUNIXグループが定義されています。私は、指定したグループの存在を確認する方法を見つけたいと思います。グループが存在する場合は、それをユーザーのセカンダリグループリストに追加します(グループが存在しない場合は無視します)。Ansible:グループが存在する場合にのみユーザーにUnixグループを追加してください。

私はこれをAnsibleとどのようにすることができますか?

ここは私の出発点です。

コマンド

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" 

@udondanによって提案されたソリューションに基づいて、私は次の追加で、この作業を取得することができましたタスク。

- 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 

答えて

3

は、あなたがそれらの異なるホストタイプを識別するために何かを持っていますか?

そうでない場合は、まずそのホストに存在するグループを確認する必要があります。これを行うには、groups | tr -s " " "\012"コマンドを実行します。これは1行に1つのグループを出力します。

あなたはそうのような別のタスクとしてこれを使用することができます:

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

あなたはグループが> = 7.0のコマンドユーザーグループ

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

を追加する場合、登録結果は、後で使用することができますRed Hatと友人は、/ etc/groups内のすべてのグループを印刷しません。現在のユーザーが属するグループのみを表示します。 –

+1

Ubuntu 16.04では、 "groups ..."コマンドは現在のユーザーが所属するグループのみを表示します – mykola

+1

"groups"はこのグループに含まれているため、この例では別の変数を登録する必要があります。可能な予約変数: - https://github.com/lorin/ansible-quickref – gilesw