Score:0

ansible และการดำเนินการกับ WHEN ล้มเหลวเมื่อใช้ ansible_facts

ธง gr

ทีม: ฉันพยายามทำให้งานล้มเหลวเมื่อไม่ตรงตามเงื่อนไขสองข้อบนโหนด ansible_facts['distribution_version'] และ ansible_facts['การกระจาย'].

ฉันกำลังผ่านสองโหนด โหนดหนึ่งคือ 20.x อูบุนตูและอื่น ๆ คือ 18.x.

vars/main.yml

os_distribution: "อูบุนตู"
os_version: "20.04"

งานอยู่ด้านล่าง

- ชื่อ: "ตรวจสอบเวอร์ชันระบบปฏิบัติการหลักที่แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ {{ os_version }}"
  ล้มเหลว:
    msg: "งานล้มเหลวเนื่องจากพบเวอร์ชัน OS ที่ไม่คาดคิด: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} ใน {{ inventory_hostname }}"
  เมื่อไร:
    - ansible_facts['distribution_version'] คือเวอร์ชัน (os_version, '<')
    - os_distribution != ansible_facts['การกระจาย']

ผลลัพธ์

TASK [node-validation : ตรวจสอบ Base OS Version ที่แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ 20.04] ***
วันอังคารที่ 23 พฤศจิกายน 2564 20:11:32 +0000 (0:00:17.570) 0:00:17.690 ****** 
การข้าม: [node1]
การข้าม: [node2]
    

ผลลัพธ์ที่คาดหวัง: สังเกต 18.x ด้านล่างโดยไม่แน่ใจว่าฉันพลาดอะไรไป

ร้ายแรง: [node2]: ล้มเหลว! => {"change": false, "msg": "งานล้มเหลวเนื่องจากพบเวอร์ชันระบบปฏิบัติการที่ไม่คาดคิด: Ubuntu 18.04 บน node2"}

เมื่อฉันถอด - os_distribution != ansible_facts['การกระจาย'] จากนั้นฉันจะได้รับผลลัพธ์ที่คาดหวังด้านล่าง แต่ฉันต้องการตอบสนองสองเงื่อนไขไม่ใช่แค่เงื่อนไขเดียว

[ร้ายแรง: [node2]: ล้มเหลว! => {"change": false, "msg": "งานล้มเหลวเนื่องจากพบเวอร์ชันระบบปฏิบัติการที่ไม่คาดคิด: Ubuntu 18.04 บน node2 }}"}

อ้างอิงถึง ansible_facts

ข้อเท็จจริงสำหรับ 20.x

10:17:59 [0;32m "การกระจาย": "Ubuntu",[0m
10:17:59 [0;32m "distribution_file_parsed": จริง,[0m
10:17:59 [0;32m "distribution_file_path": "/etc/os-release",[0m
10:17:59 [0;32m "distribution_file_variety": "เดเบียน",[0m
10:17:59 [0;32m "distribution_major_version": "18",[0m
10:17:59 [0;32m "distribution_release": "ไบโอนิค",[0m
10:17:59 [0;32m "distribution_version": "18.04",[0m

ข้อเท็จจริงสำหรับ 20.x

10:23:43 [0;32m "การกระจาย": "Ubuntu",[0m
10:23:43 [0;32m "distribution_file_parsed": จริง,[0m
10:23:43 [0;32m "distribution_file_path": "/etc/os-release",[0m
10:23:43 [0;32m "distribution_file_variety": "เดเบียน",[0m
10:23:43 [0;32m "distribution_major_version": "20",[0m
10:23:43 [0;32m "distribution_release": "โฟกัส",[0m
10:23:43 [0;32m "distribution_version": "20.04",[0m
Score:0
ธง in

เมื่อคุณระบุเมื่อรายการจะดำเนินการ และ ของทั้งสองนิพจน์ และนี่คือตารางมาตรฐานและความจริง

Cond1 Cont2 | ผลลัพธ์
เท็จ เท็จ | เท็จ
เท็จ จริง | เท็จ
จริงเท็จ | เท็จ
ที่แท้ทรู | จริง

พิจารณาของคุณมี

os_distribution: "Ubuntu" # ตัวแปร
ansible_facts.distribution: "Ubuntu" # ข้อเท็จจริง

การแสดงออก "อูบุนตู" != "อูบุนตู" เป็น เท็จและเนื่องจากตามตารางความจริงหากเงื่อนไขใดเงื่อนไขหนึ่งเป็นเท็จ ผลลัพธ์สุดท้ายจะเป็นเท็จ Ansible จะดำเนินการเมื่อผลลัพธ์เป็นจริงเท่านั้น

อย่างไรก็ตามฉันฟ้องเพื่อให้ได้ผลลัพธ์ที่คุณต้องการควรเปลี่ยนของคุณ เมื่อไร ถึง หรือ แทนที่จะมีรายการที่เข้าร่วมด้วย AND

เมื่อไร:
  ansible_facts['distribution_version'] เป็นเวอร์ชัน (os_version, '<') หรือ
  os_distribution != ansible_facts['การกระจาย']

Playbook สาธิต + ผลผลิต

---
- โฮสต์: localhost
  วาร์:
    os_distribution: "อูบุนตู"
    os_version: "20.04"
    ansible_facts:
      การกระจาย: "อูบุนตู"
      distribution_file_parsed: จริง
      distribution_file_path: "/etc/os-release"
      distribution_file_variety: "เดเบียน"
      distribution_major_version: "18"
      distribution_release: "ไบโอนิค"
      distribution_version: "18.04"

  งาน:
  - แก้ปัญหา:
      ข้อความ: >-
        {{ os_distribution }} {{ansible_facts['การกระจาย'] }}
        {{ os_distribution != ansible_facts['การแจกจ่าย'] }}
  - แก้ปัญหา:
      ข้อความ: >-
        {{ ansible_facts['distribution_version'] }} {{ os_version }}
        {{ ansible_facts['distribution_version'] เป็นเวอร์ชัน (os_version, '<') }}

  - ชื่อ: "ตรวจสอบเวอร์ชันระบบปฏิบัติการหลักที่แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ {{ os_version }}"
    แก้ปัญหา:
      msg: "งานล้มเหลวเนื่องจากพบเวอร์ชัน OS ที่ไม่คาดคิด: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} ใน {{ inventory_hostname }}"
    เมื่อไร:
      ansible_facts['distribution_version'] เป็นเวอร์ชัน (os_version, '<') หรือ
      os_distribution != ansible_facts['การกระจาย']

- โฮสต์: localhost
  วาร์:
    os_distribution: "อูบุนตู"
    os_version: "20.04"
    ansible_facts:
      การกระจาย: "อูบุนตู"
      distribution_file_parsed: จริง
      distribution_file_path: "/etc/os-release"
      distribution_file_variety: "เดเบียน"
      distribution_major_version: "20"
      distribution_release: "โฟกัส"
      distribution_version: "20.04"

  งาน:
  - แก้ปัญหา:
      ข้อความ: >-
        {{ os_distribution }} {{ansible_facts['การกระจาย'] }}
        {{ os_distribution != ansible_facts['การแจกจ่าย'] }}
  - แก้ปัญหา:
      ข้อความ: >-
        {{ ansible_facts['distribution_version'] }} {{ os_version }}
        {{ ansible_facts['distribution_version'] เป็นเวอร์ชัน (os_version, '<') }}

  - ชื่อ: "ตรวจสอบเวอร์ชันระบบปฏิบัติการหลักที่แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ {{ os_version }}"
    แก้ปัญหา:
      msg: "งานล้มเหลวเนื่องจากพบเวอร์ชัน OS ที่ไม่คาดคิด: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }} ใน {{ inventory_hostname }}"
    เมื่อไร:
      ansible_facts['distribution_version'] เป็นเวอร์ชัน (os_version, '<') หรือ
      os_distribution != ansible_facts['การกระจาย']

#เอาท์พุต

# งาน [แก้ปัญหา] ********************************************* ************************************************** ****************************
# ตกลง: [localhost] => {
# "msg": "Ubuntu Ubuntu เท็จ"
# }
#
# งาน [แก้ปัญหา] ********************************************* ************************************************** ****************************
# ตกลง: [localhost] => {
# "msg": "18.04 20.04 จริง"
# }
#
# TASK [Check Base OS Version แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ 20.04] ************************************ ***************************
# ตกลง: [localhost] => {
# "msg": "งานล้มเหลวเนื่องจากพบเวอร์ชัน OS ที่ไม่คาดคิด: Ubuntu 18.04 บน localhost"
# }
#
# เล่น [localhost] ************************************************ ************************************************** ************************
#
# งาน [แก้ปัญหา] ********************************************* ************************************************** ****************************
# ตกลง: [localhost] => {
# "msg": "Ubuntu Ubuntu เท็จ"
# }
#
# งาน [แก้ปัญหา] ********************************************* ************************************************** ****************************
# ตกลง: [localhost] => {
# "msg": "20.04 20.04 เท็จ"
# }
#
# TASK [Check Base OS Version แมปกับเวอร์ชันการแจกจ่ายที่คาดไว้ 20.04] ************************************ ***************************
# การข้าม: [localhost]
#

PS หากคุณต้องการคณิตศาสตร์ว่าทำไมคุณถึงเปลี่ยนจาก AND เป็น OR ในการปฏิเสธ ดู De_Morgan's_laws

AhmFM avatar
gr flag
ตกลงและฉันเชื่อว่าเป็นสิ่งที่ฉันคิดว่ากำลังทำอยู่? ฉันมี node1 หนึ่งตัวที่เป็น TT และอีกอันคือ TF ดังนั้นฉันควรจะล้มเหลวสำหรับ node2 ที่พิมพ์ข้อความและข้ามไปที่ node1 ที่มี TT โดยไม่มีข้อความ แต่ฉันได้รับการข้ามและไม่มีข้อความในทั้งสองสถานการณ์
in flag
หากคุณต้องการเพิ่มเติม ให้เพิ่ม playbook ตัวอย่างและผลลัพธ์ที่อาจช่วยได้ และคุณสามารถใช้เพื่อทดสอบเพิ่มเติมได้

โพสต์คำตอบ

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