2016-08-17 62 views
3

user01は、groupAgroupB(1次群に加えて)の2つのグループが定義されているとしましょう。Ansibleで特定のグループからユーザーを削除するにはどうすればよいですか?

私が使用して(user01groupCに属していることを確認)groupCにアカウントを追加することができます

- user: name=user01 groups=groupC append=yes 

どのように私はすべてのグループにアカウントを指定せずに(user01groupBに属していないことを確認)groupBからuser01を削除することができますに属すべきですか?

答えて

3

私の知る限り、通常のユーザーモジュールではできません。

しかし、かなりクレイジーな旋律では、演奏会で演奏することができます。 私はこれをお勧めしているかどうかはわかりません。それは単なる面白い運動でした。 (私はこれを試して、それは働いた。)

興味深い部分は、 "新しいグループリストを構築する"というタスクであり、リストエントリを削除する。 Pythonリストの.remove()を呼び出すと新しいリストが返された場合、そのリストはすべて不必要になります。特色

--- 
- hosts: target 
    gather_facts: no 

    vars: 
    group_to_remove: admins 
    new_groups_list: [] 
    user_to_check: user1 

    tasks: 
    - user: name="{{ user_to_check }}" groups=testers,developers,admins 

    - name: get the current groups list 
     command: groups "{{ user_to_check }}" 
     register: current_groups 

    - debug: var=current_groups 

    # parse the output of the groups command into a python list 
    # of the current groups 
    - set_fact: 
     current_group_list: "{{ current_groups.stdout.replace(user_to_check+' : ','').split(' ') }}" 

    - name: show user_group_list 
     debug: var=current_group_list 

    - name: build the new groups list 
     set_fact: 
     new_groups_list: "{{ new_groups_list + [ item ] }}" 
     no_log: False 
     when: "not '{{ group_to_remove }}' == '{{ item }}'" 
     with_items: "{{ current_group_list }}" 

    # turn the list, into a comma-delimited string 
    - set_fact: 
     new_groups: "{{ ','.join(new_groups_list) }}" 

    - name: show new_groups_list 
     debug: var=new_groups 

    - name: set new user groups 
     user: name="{{ user_to_check }}" groups="{{ new_groups }}" 

    - name: get the new groups list 
     command: groups "{{ user_to_check }}" 
     register: new_groups 

    - debug: var=new_groups 
0

が不足していると、これはそのためのオープンなバグです:回避策として

https://github.com/ansible/ansible/issues/11024

、このようなものを使用します。

- name: remove telegraf user from varnish group become: true shell: "/usr/sbin/delgroup telegraf varnish" when: ansible_hostname | lower not in groups['varnish'] | lower

関連する問題