ฉันต้องการสร้าง var ตามเงื่อนไขดังนั้นฉันจึงสร้างด้านล่าง:
โฮสต์: ทดสอบ
vars: vtarget_backup_folder_in_progress: "{{ "{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ type }}" if node_type == "master " อื่น "{{ โฟลเดอร์ }}/{{ เป้าหมาย }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ ประเภท }}" }}"
แต่มันล้มเหลวกับฉันโดยมีข้อผิดพลาดด้านล่าง:
เราอาจผิด แต่สิ่งนี้ดูเหมือนว่าอาจมีปัญหากับเครื่องหมายคำพูดที่ขาดหายไป อ้างอิงวงเล็บนิพจน์เทมเพลตเสมอเมื่อเริ่มต้นค่า ตัวอย่างเช่น:
with_items:
- {{ ฟู }}
ควรเขียนเป็น:
with_items:
- "{{ ฟู }}"
คุณช่วยฉันด้วยได้ไหม
แก้ไข
ฉันได้ลองด้านล่าง:
งาน:
- ชื่อ: ตั้งค่าโฟลเดอร์สำรอง IN_PROGRESS
set_fact:
v_target_backup_folder_in_progress: >-
{% ถ้า node_type == "หลัก" %}
"{{ โฟลเดอร์ }}/{{ เป้าหมาย }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ ประเภท }}"
{% อื่น %}
"{{ โฟลเดอร์ }}/{{ target }}/prod_{{ hostvars['localhost']['tstamp'].stdout }}_{{ ประเภท }}"
{% เอนดิฟ %}
- ชื่อ: ตรวจสอบให้แน่ใจว่าเป้าหมายอยู่ในโฟลเดอร์ความคืบหน้า
ไฟล์:
เส้นทาง: "{{ v_target_backup_folder_in_progress }}"
สถานะ: ไดเร็กทอรี
เจ้าของ: "{{ app_user }}"
กลุ่ม: "{{ app_user_group }}"
โหมด: u=rwx,g=rwx
มันได้รับค่าที่ถูกต้องของตัวแปรเมื่อฉันดีบัก playbook แต่เมื่อฉันตรวจสอบ v_target_backup_folder_in_progress ในแต่ละโหนดของ 3 โหนดที่การเล่นทำงาน ฉันพบสิ่งแปลก ๆ :
บนโหนดหนึ่ง v_target_backup_folder_in_progress ไม่ถูกสร้างขึ้นแม้ว่าดูเหมือนว่าจะถูกสร้างขึ้นในโหมดแก้ไขจุดบกพร่อง แต่เมื่อฉันไปที่เส้นทางเดียวกัน ฉันไม่พบไดเร็กทอรี !
ในอีก 2 โหนด v_target_backup_folder_in_progress จะถูกสร้างขึ้น แต่เป็นไฟล์! ไม่ใช่ไดเร็กทอรีแม้ว่าดูเหมือนว่าจะถูกสร้างขึ้นในโหมดดีบักเป็นไดเร็กทอรี
เหตุใดจึงเกิดขึ้น