2014-06-27 15 views
13

Ho distillato un playbook che ha tre giochi. L'obiettivo è raccogliere la password del database da un prompt in una riproduzione e quindi utilizzare la stessa password negli altri due giochi.Perché non posso richiedere una variabile che sarà condivisa da più riproduzioni (ansible 1.6.5)

--- 

- name: database password 
    hosts: 
    - webservers 
    - dbservers 
    vars_prompt: 
    - name: "db_password" 
     prompt: "Enter Database Password for databse user root" 
     default: "root" 

- hosts: dbservers 
    tasks: 
    - command: echo {{db_password | mandatory }} 


- hosts: webservers 
    tasks: 
    - command: echo {{db_password | mandatory }} 

Fallisce come mostrato di seguito.

Enter Database Password for databse user root [root]: 

PLAY [database password] ****************************************************** 

GATHERING FACTS *************************************************************** 
ok: [vc-dev-1] 

PLAY [dbservers] ************************************************************** 

GATHERING FACTS *************************************************************** 
ok: [vc-dev-1] 

TASK: [command echo {{db_password | mandatory}}] *************************** 
fatal: [vc-dev-1] => One or more undefined variables: 'db_password' is undefined 

FATAL: all hosts have already failed -- aborting 

PLAY RECAP ******************************************************************** 
      to retry, use: --limit @.../playbook2.retry 

vc-dev-1     : ok=3 changed=0 unreachable=1 failed=0 

risposta

22

ho trovato la soluzione seguente utilizzando set_fact assegnare la variabile inserita da un utente in una variabile con portata playbook. Sembra che le variabili var_prompt non siano come fatti e altre variabili, il suo ambito è limitato nella riproduzione che non richiede l'intero playbook. Non sono sicuro che questa sia una caratteristica o un bug.

--- 

- name: database password 
    hosts: 
    - webservers 
    - dbservers 
    vars_prompt: 
    - name: "db_password" 
     prompt: "Enter Database Password for databse user root" 
     default: "root" 
    tasks: 
    - set_fact: 
     db_root_password: "{{db_password}}" 

- hosts: dbservers 
    tasks: 
    - command: echo {{db_root_password | mandatory }} 


- hosts: webservers 
    tasks: 
    - command: echo {{db_root_password | mandatory }} 
+0

intelligente, avere il mio upvote. – andrean

7

Improvvisare risposta di gae123, nel caso se sono aggiunti in modo dinamico i padroni di casa, non sarà possibile ottenere e impostare il fatto sul gruppo esistente di server, nel qual caso localhost può essere usato per impostare e ottenere.

--- 
- name: database password 
    hosts: localhost 
    vars_prompt: 
    - name: "db_password" 
     prompt: "Enter Database Password for databse user root" 
     default: "root" 
    tasks: 
    - set_fact: 
     db_root_password: "{{db_password}}" 

- hosts: dbservers 
    vars: 
    - db_root_password: "{{ hostvars['localhost']['db_root_password'] }}" 
    tasks: 
    - command: echo {{db_root_password | mandatory }} 


- hosts: webservers 
    vars: 
    - db_root_password: "{{ hostvars['localhost']['db_root_password'] }}" 
    tasks: 
    - command: echo {{db_root_password | mandatory }} 
0

Ho finito per prendere risposta user3037143 per il mio localhost problema delle password sudo:

--- 
- hosts: localhost 
    tags: 
    - always 
    vars_prompt: 
    - name: sudo_password 
     prompt: "Sudo password for localhost ONLY" 
    tasks: 
    - set_fact: ansible_become_password={{ sudo_password }} 
     no_log: true 

Ora è condivisa tra tutti comprendono playbooks ho.

Sono su ansible> 2.

Problemi correlati