2016-07-31 18 views
0

Ich habe eine Inventardatei, die verschiedene Login-Informationen für mehrere Hosts enthält. Aber beim Aufruf des ansible_ssh_user-Wertes im Playbook bekomme ich nur den letzten Eintrag.ansible: ansible_ssh_user Überschreibende Werte für Hosts in einer Gruppe

Warum dauert es den letzten Eintrag ansible_ssh_user?

Inventar Datei:

[local] 
10.41.42.2 ansible_ssh_user=root ansible_ssh_pass=root123 

[DSC_root] 
10.41.42.2 ansible_ssh_user=root ansible_ssh_pass=root123 
10.41.42.70 ansible_ssh_user=root ansible_ssh_pass=root 
10.41.42.71 ansible_ssh_user=root ansible_ssh_pass=root 

[DSC_admin] 
10.41.42.2 ansible_ssh_user=root ansible_ssh_pass=root123 
10.41.42.70 ansible_ssh_user=dscadmin ansible_ssh_pass=dscadmin 
10.41.42.71 ansible_ssh_user=dscadmin ansible_ssh_pass=dscadmin 

Textbuch:

--- 
- hosts: DSC_root 
    remote_user: root 
    tasks: 
- name: get root user home grep and register 
    shell: > 
     grep "^{{ansible_ssh_user}}:" /etc/passwd | awk -F: '{ print $6 }' 
    changed_when: false 
    register: v_getuserhome 
- debug: var=v_getuserhome 

Logs:

[[email protected] ansible]# ansible-playbook -i inventory1 get_home.yml 

    PLAY [DSC_root] **************************************************************** 

    TASK [setup] ******************************************************************* 
    ok: [10.41.42.71] 
    ok: [10.41.42.70] 
    ok: [10.41.42.2] 

    TASK [get root user home grep and register] ************************************ 
    ok: [10.41.42.70] 
    ok: [10.41.42.71] 
    ok: [10.41.42.2] 

    TASK [debug] ******************************************************************* 
    ok: [10.41.42.70] => { 
     "v_getuserhome": { 
      "changed": false, 
      "cmd": "grep \"^dscadmin:\" /etc/passwd | awk -F: '{ print $6 }'", 
      "delta": "0:00:00.005985", 
      "end": "2016-07-31 09:23:42.743393", 
      "rc": 0, 
      "start": "2016-07-31 09:23:42.737408", 
      "stderr": "", 
      "stdout": "/home/dscadmin", 
      "stdout_lines": [ 
       "/home/dscadmin" 
      ], 
      "warnings": [] 
     } 
    } 
    ok: [10.41.42.2] => { 
     "v_getuserhome": { 
      "changed": false, 
      "cmd": "grep \"^root:\" /etc/passwd | awk -F: '{ print $6 }'", 
      "delta": "0:00:00.005801", 
      "end": "2016-07-31 18:53:44.074155", 
      "rc": 0, 
      "start": "2016-07-31 18:53:44.068354", 
      "stderr": "", 
      "stdout": "/root", 
      "stdout_lines": [ 
       "/root" 
      ], 
      "warnings": [] 
     } 
    } 
    ok: [10.41.42.71] => { 
     "v_getuserhome": { 
      "changed": false, 
      "cmd": "grep \"^dscadmin:\" /etc/passwd | awk -F: '{ print $6 }'", 
      "delta": "0:00:00.006740", 
      "end": "2016-07-31 09:23:43.347801", 
      "rc": 0, 
      "start": "2016-07-31 09:23:43.341061", 
      "stderr": "", 
      "stdout": "/home/dscadmin", 
      "stdout_lines": [ 
       "/home/dscadmin" 
      ], 
      "warnings": [] 
     } 
    } 

    PLAY RECAP ********************************************************************* 
    10.41.42.2    : ok=3 changed=0 unreachable=0 failed=0 
    10.41.42.70    : ok=3 changed=0 unreachable=0 failed=0 
    10.41.42.71    : ok=3 changed=0 unreachable=0 failed=0 

Antwort

0

Eigentlich ist dies, wie ansible funktioniert. , wenn Sie Ihr Playbook ausführen; ansible-playbook -i inventory my_playbook.yml, liest ansible Ihre Hosts in der von Ihnen angegebenen Reihenfolge zusammen mit ihren Variablen. Wenn die gleiche Variable des gleichen Hosts später in einer anderen Gruppe gefunden wird, wird die letzte verwendet, auch wenn Sie in Ihrem Spiel auf eine Gruppe von Hosts abzielen, die oben in Ihrem Inventar definiert sind.

+0

Ja, Sie haben Recht. Gibt es eine Möglichkeit, verschiedene Inventardateien direkt im Playbook aufzurufen? – samir