Sunt două lucruri care se întâmplă aici. Primul este că ați creat YAML care este acceptat de parser, dar se comportă într-un mod ușor neașteptat (și va produce un avertisment în versiunea curentă de Ansible.)
- nume: creați un obiect json pe care să îl utilizați ca etichetă
set_fact:
tag_var: '{ "test": "thisisatest" }'
set_fact:
tag_var_json: „{{ tag_var | to_json }}”
Cheile din YAML sunt unice; când analizatorul întâlnește o a doua instanță a aceleiași chei, o aruncă pe prima. De când ai repetat set_fact
, aceasta este echivalentă cu:
- nume: creați un obiect json pe care să îl utilizați ca etichetă
set_fact:
tag_var_json: „{{ tag_var | to_json }}”
Cu toate acestea, corectarea erorii de sintaxă va duce la un eșec.
- nume: creați un obiect json pe care să îl utilizați ca etichetă
set_fact:
tag_var: '{ "test": "thisisatest" }'
tag_var_json: „{{ tag_var | to_json }}”
Argumentele pentru set_fact
trebuie să fie modelate înainte ca sarcina să ruleze, moment în care tag_var este încă nedefinit (deoarece această sarcină o definește.)
O modalitate corectă de a scrie această sarcină este ca două sarcini separate:
- nume: creați un obiect etichetă
set_fact:
tag_var:
test: acesta este cel mai bun
- nume: creați un șir JSON pentru etichetare
set_fact:
tag_var_json: „{{ tag_var | to_json }}”
In orice caz, set_fact
nu este deloc necesar. Puteți seta var-ul direct pe sarcina în care o utilizați, ceea ce este atât mai eficient, cât și o face mai strânsă.
- nume: actualizați etichetele instanței
comandă: oci compute instance update -c {{ compartiment }} --freeform-tags „{{ tag_var | to_json }}”
vars:
tag_var:
test: acesta este cel mai bun