2015-11-25 5 views
6

Sto utilizzando Ansible per configurare alcune macchine virtuali. Ho scritto uno script Python che recupera gli host da un servizio REST.
Le mie macchine virtuali sono organizzate in "Ambienti". Ad esempio, ho gli ambienti "Test", "Red" e "Integration", ognuno con un sottoinsieme di VM.Passa un parametro all'inventario dinamico di Ansible

Questo script Python richiede il parametro personalizzato --environment <ENV> per recuperare gli host dell'ambiente ricercato.

Il problema che sto passando è il passaggio del <ENV> al comando ansible-playbook. Infatti il ​​seguente comando non funziona

ansible-playbook thePlaybook.yml -i ./inventory/FromREST.py --environment Test 

ottengo l'errore:

Usage: ansible-playbook playbook.yml 

ansible-playbook: error: no such option: --environment 

Qual è la sintassi diritto di passare variabili ad uno script inventario dinamico?

Aggiornamento:

Per spiegare meglio, lo script FromREST.py accetta i seguenti parametri:

  • O il parametro --list o il parametro --host <HOST>, come da Dynamic Inventory guidelines
  • Il parametro --environment <ENVIRONMENT>, che ho aggiunti a quelli richiesti da Ansible per gestire i diversi ambienti

risposta

3

Una soluzione alternativa che utilizza $PPID per analizzare -e/--extra-vars dall'istantanea del processo.

ansible-playbook -i inventory.sh deploy.yml -e cluster=cl_01 

inventory.sh file di

#!/bin/bash 
if [[ $1 != "--list" ]]; then exit 1; fi 
extra_var=`ps -f -p $PPID | grep ansible-playbook | grep -oh "\w*=\w*" | grep cluster | cut -f2 -d=` 
./inventory.py --cluster $extra_var 

inventory.py rendimenti JSON di inventario per il cluster cl_01.

Non carino, lo so, ma funziona.

3

ho avuto problema simile, non ho trovato alcuna soluzione, quindi ho solo modificato il mio inventario dinamico da usare variabile OS Ambiente, se l'utente non passa --env

Capture env var nel vostro inventario, come di seguito:

import os print os.environ['ENV']

Passo env var a ansible

export ENV=dev ansible -i my_custom_inv.py all --list-host