risposta

137

Leggendo la documentazione trovo la sezione Passing Variables On The Command Line, che danno questo campione:

ansible-playbook release.yml --extra-vars "version=1.23.45 other_variable=foo" 

Altri esempi dimostrano come caricare da JSON stringa (≥ 1.2) o un file (≥ 1.3)

+12

Si noti anche che variabili (s) definita con '--extra-vars' sarà scavalcare le variabili definite all'interno del playbook. – checksum

21
ansible-playbook release.yml -e "version=1.23.45 other_variable=foo" 
+9

Il flag '-e' è la forma abbreviata di' --extra-vars' –

+2

Posso passare il file variabile? –

+2

@AniruddhaJawanjal sì, come '--extra-vars" @ some_file.json "' – AlanSE

15

Per qualche motivo nessuna delle risposte sopra ha funzionato per me. Come ho bisogno di passare diversi vars extra per il mio playbook in Ansbile 2.2.0, è così che ho capito di lavoro (notare l'opzione -e prima di ogni var):

ansible-playbook site.yaml -i hostinv -e firstvar=false -e second_var=value2 
+3

'-e' è la forma abbreviata di' --extra-vars' –

+0

@LXCdev KohaLappi +1 per dimostrare che è possibile specificare ulteriori vars nel proprio flag '-e' – ctlockey

+0

Puoi anche definire più variabili usando un singolo flag:' -e "firstvar = false second_var = value2" ' –

49

altre risposte indicano come passare in variabili della riga di comando, ma non come accedervi, quindi se lo fai:

--extra-vars "version=1.23.45 other_variable=foo" 

Nel file yml si assegna questi per ambito variabili ansible facendo qualcosa di simile:

vars: 
    my_version: "{{ version }}" 
    my_other_variable: {{ other_variable }} 

un'alternativa all'utilizzo dei comandi Li args ne è quello di utilizzare le variabili ambientali che sono già definiti nella sessione, è possibile fare riferimento questi all'interno dei file YML ansible come questo:

vars: 
    my_version: "{{ lookup('env', 'version') }}" 
    my_other_variable: {{ lookup('env', 'other_variable') }} 
+0

questo non risponde alla domanda, dovresti spostarlo nella sua stessa domanda e aggiungi un link qui come è correlato. –

+6

Non sei sicuro di cosa stai parlando ?? La mia risposta * si espande * su risposte precedentemente accettate facendo riferimento al flag della riga di comando --extra-vars * AND * su come fare riferimento ad esse nella configurazione di yaml. Allora offro anche un modo alternativo di farlo. – GreensterRox

+1

La domanda qui è specificatamente pass variable ** tramite la riga di comando **. Questo è esattamente il motivo per cui sarebbe meglio in quanto è una domanda/risposta e un collegamento correlato. Puoi e il link correlato come commento alla domanda. –