Score:0

Ansible playbook - การกำหนด var ตามเงื่อนไข

ธง cn
Sam

ฉันต้องการสร้าง 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 จะถูกสร้างขึ้น แต่เป็นไฟล์! ไม่ใช่ไดเร็กทอรีแม้ว่าดูเหมือนว่าจะถูกสร้างขึ้นในโหมดดีบักเป็นไดเร็กทอรี

เหตุใดจึงเกิดขึ้น

br flag
ไม่สามารถซ้อน curls "{{ }}" ได้
cn flag
Sam
คุณหมายความว่าฉันต้องลบ {{ }} ออกจาก vars ภายในหลัก/พาเรนต์ {{ }} ? เช่น var นี้: "{{ โฟลเดอร์/เป้าหมาย }}"
U880D avatar
ca flag
ใช่ คุณต้องลบออก แต่เช่น `"{{ folder }}/{{ target }}/test_...`
cn flag
Sam
หากคุณหมายถึงสิ่งนี้: v_target_backup_folder_in_progress: "{{ folder }}/{{ target }}/test_{{ hostvars['localhost']['tstamp'].stdout }}_{{ type }}" if node_type == "master" อื่น "{{ folder }}/{{ target }}" มันใช้งานไม่ได้
Score:0
ธง in

สิ่งนี้ควรทำ:

vtarget_backup_folder_in_progress: "{% if node_type == 'master' %}{{ folder }}/{{ target }}/test{{ hostvars['localhost']['tstamp'].stdout }}{{ ประเภท }}{ % อื่น %}{{ โฟลเดอร์ }}/{{ เป้าหมาย }}/prod{{ hostvars['localhost']['tstamp'].stdout }}_{{ ประเภท }}{% endif %}"

ทั้งหมดในสตริงเดียว ไม่มีวงเล็บซ้อนกัน if/else/endif with {% %}

คุณสามารถลดขนาดลงได้เล็กน้อยโดยย้ายจุดเริ่มต้นและจุดสิ้นสุดทั่วไปออกจากเงื่อนไข:

vtarget_backup_folder_in_progress: "{{ โฟลเดอร์ }}/{{ เป้าหมาย }}/{% if node_type == 'master' %}test{{ hostvars['localhost']['tstamp'].stdout }}{% else %}prod {{ hostvars['localhost']['tstamp'].stdout }}_{{ ประเภท }}{% endif %}{{ ประเภท }}"

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา