Ich habe eine Rollenstruktur, die verschiedene Playbooks umfasst, und ich muss einigen davon gemeinsame Variablen zuweisen, um zu vermeiden, dass ich den Code für jede Aufgabe im Playbook neu schreiben muss. Ist das möglich?
Ich verstehe, dass wir die Variablen beim Aufrufen der Rolle zuweisen können, in diesem Fall muss es jedoch auf einige Playbooks in der Rolle anwendbar sein.
Antwort1
Ja, das ist möglich. Verwenden SieAnsible_Spielnameum die Variablen auszuwählen. Erstellen Sie beispielsweise Standardvariablen der Rolle
shell> cat roles/test1/defaults/main.yml
my_vars:
pb1: 'var1'
pb2: 'var2'
default: 'default'
Weisen Sie eine Variable zu, die durch den Namen des Spiels ausgewählt wurde
shell> cat roles/test1/tasks/main.yml
- set_fact:
myvar: "{{ my_vars[ansible_play_name]|default(my_vars.default) }}"
- debug:
var: myvar
Das Spielbuch
- name: pb1
hosts: localhost
roles:
- test1
- name: pb2
hosts: localhost
roles:
- test1
- name: pb9
hosts: localhost
roles:
- test1
geben
PLAY [pb1] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var1"
}
PLAY [pb2] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "var2"
}
PLAY [pb9] **************************************************************************************
TASK [test1 : set_fact] *************************************************************************
ok: [localhost]
TASK [test1 : debug] ****************************************************************************
ok: [localhost] => {
"myvar": "default"
}