Puncte:0

Ansible Playbook - definirea var în funcție de condiție

drapel cn
Sam

Vreau să creez un var bazat pe condiție, așa că am creat mai jos:

gazde: test

vars: vtarget_backup_folder_in_progress: "{{ "{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}" dacă node_type == "master " else "{{ folder }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" }}"

dar eșuează cu mine cu eroarea de mai jos:

Am putea greși, dar acesta pare să fie o problemă cu ghilimele lipsă. Indicați întotdeauna parantezele expresiei șablonului când încep o valoare. De exemplu:

cu_articole:
  - {{ foo }}
Ar trebui scris ca:

cu_articole:
  - „{{ foo }}”

ma poti ajuta te rog cu asta?

EDITAȚI | ×

Am incercat mai jos:

sarcini:

- nume: setați folderul de rezervă IN_PROGRESS
  set_fact:
     v_target_backup_folder_in_progress: >-
       {% if node_type == „master” %}
       „{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}”
       {% altfel %} 
       „{{ folder }}/{{ target }}/prod_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}”
       {% endif %}


- nume: asigurați-vă că folderul țintă în curs există
  fişier:
    cale: „{{ v_target_backup_folder_in_progress }}”
    stare: director
    proprietar: „{{ app_user }}” 
    grup: „{{ app_user_group }}” 
    mod: u=rwx,g=rwx

primește valorile corecte ale variabilei când depanez playbook-ul DAR când verific v_target_backup_folder_in_progress pe fiecare nod din cele 3 noduri pe care rulează jocul, găsesc ceva ciudat:

pe un nod, v_target_backup_folder_in_progress nu este creat, deși pare a fi creat în modul de depanare, dar când merg pe aceeași cale, nu găsesc directorul!

pe celelalte 2 noduri se creează v_target_backup_folder_in_progress, dar ca fișier! nu este un director, deși pare a fi creat în modul de depanare ca director.

deci de ce se intampla asta?

drapel br
buclele „{{ }}” nu pot fi imbricate.
drapel cn
Sam
Deci vrei să spui că trebuie să elimin {{ }} din varsurile din interiorul {{ }} primar/părinte? Ca această variantă: „{{ folder/target }}”
U880D avatar
drapel ca
Corect, trebuie să le eliminați, dar cum ar fi `"{{ folder }}/{{ target }}/test_...`
drapel cn
Sam
Dacă vrei să spui așa: v_target_backup_folder_in_progress: „{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}” if node_type == „master” altfel „{{ folder }}/{{ target }}” nu a funcționat
Puncte:0
drapel in

Acest lucru ar trebui să o facă:

vtarget_backup_folder_in_progress: „{% if node_type == 'master' %}{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}{ % else %}{{ folder }}/{{ target }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}"

Toate într-un șir, fără acolade imbricate, if/else/endif with {% %}

Puteți chiar să o reduceți puțin prin mutarea începutului și a sfârșitului comun din condițional:

vtarget_backup_folder_in_progress: „{{ folder }}/{{ target }}/{% if node_type == 'master' %}test{{ hostvars['localhost']['tstamp'].stdout }}{% else %}prod {{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}{% endif %}{{ type }}"

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.