2016-03-04 47 views
8

我正在使用Ansible將用戶添加到各種服務器。一些服務器定義了不同的UNIX組。我希望找到Ansible檢查我指定的組是否存在的方法,如果該組存在,請將其添加到用戶的輔助組列表中(但如果該組不存在,請將其忽略)。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"執行此操作,該命令將每行輸出一個組。

您可以使用此作爲單獨的任務,像這樣:

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

註冊的結果,那麼可以在以後使用時,您要添加的用戶組

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

的羣體上> = 7.0命令紅帽和朋友不打印/ etc/groups中的所有組。它僅打印當前用戶所在的組。 –

+1

在Ubuntu 16.04上,「groups ...」命令僅打印當前用戶所屬的組 – mykola

+1

您需要在此示例中註冊一個不同的變量,因爲「groups」是一個Ansible保留變量: - https://github.com/lorin/ansible-quickref – gilesw

相關問題