Score:0

Ansible | ข้อความแสดงเงื่อนไขไม่ควรมีเทมเพลต jinja2 | เมื่อตัวแปร group_name

ธง cn

ฉันมีไฟล์ main_task.yml ที่ใช้งานง่ายซึ่งวนซ้ำจาก main.yml

สินค้าคงคลัง.ini

[พอร์ต_22]
192.168.0.189
192.168.0.199
[พอร์ต_222]
192.168.0.199
[พอร์ต_888]
192.168.0.200 

main_task.yml

---
- ชื่อ: "เรียกใช้สิ่งนี้บนโฮสต์ {{ item }}"
  debug: msg= "สิ่งนี้ทำงานบนโฮสต์ p{{ item }} เท่านั้น"
  เมื่อ: "{{ รายการ }} ใน group_names"
  #เมื่อ: group_names | เลือก ("รายการ | สตริง") | รายการ | นับ > 0

main.yml

- โฮสต์: port_22, port_222
  การเชื่อมต่อ: ท้องถิ่น
  วาร์:
    พอร์ต:
      - 22
      - 222

  งาน:
    - ชื่อ: การยืนยัน
      include_tasks: main_task.yml
      วนซ้ำ: "{{ พอร์ต }}"

มันบ่น

[คำเตือน]: ข้อความแสดงเงื่อนไขไม่ควรมีตัวคั่นเทมเพลต jinja2 เช่น {{ }} หรือ {% %} พบ: {{ รายการ }} ใน group_names

เมื่อลบเทมเพลต jinja2 จะได้สิ่งนี้:

การข้าม: [192.168.0.189]

ฉันจะบรรลุสิ่งนี้ได้อย่างไร ?

อัปเดต:

แก้ไข main.yml

- โฮสต์: host_22, host_222
  #การเชื่อมต่อ: ท้องถิ่น
  วาร์:
    พอร์ต:
      - 22
  งาน:
    - ชื่อ: ปรับใช้ไฟล์ที่มีที่อยู่เครือข่ายในนั้น
      include_tasks: main_task.yml
      วนซ้ำ: "{{ พอร์ต }}"

แก้ไข main_task.yml แล้ว


- ชื่อ: "เรียกใช้สิ่งนี้บนโฮสต์ {{ item }}"
  debug: msg= "สิ่งนี้ทำงานบนโฮสต์ p{{ item }} เท่านั้น"
  เมื่อ: รายการใน group_names
  #เมื่อ: group_names | เลือก ("รายการ | สตริง") | รายการ | นับ > 0

- ชื่อ: ชื่อโฮสต์ของฉัน
  เปลือก: ชื่อโฮสต์; ชื่อโฮสต์ -I
  เมื่อ: รายการใน group_names
  ลงทะเบียน: hostname_result

- แก้ปัญหา:
    var: hostname_result.stdout_lines

เอาท์พุต:

   ansible-playbook main.yaml -i สินค้าคงคลัง.ini -u ราก

เล่น [host_22, host_222] ******************************************** ************************************************** ************************************************** ************************************************** ************************************************** *****

TASK [รวบรวมข้อเท็จจริง] ********************************************* ************************************************** ************************************************** ************************************************** ************************************************** ******
ตกลง: [192.168.0.189]
ตกลง: [192.168.0.199]

งาน [การตรวจสอบ] *********************************************** ************************************************** ************************************************** ************************************************** *****************************
รวม: /home/ubuntu/ansible/test/testing_loo/main_task.yml สำหรับ 192.168.0.199, 192.168.0.189 => (item=22)

TASK [เรียกใช้บน 22 โฮสต์] ****************************************** ************************************************** ************************************************** ************************************************** ************************************************** ****
การข้าม: [192.168.0.199]
การข้าม: [192.168.0.189]

งาน [ชื่อโฮสต์ของฉัน] ************************************************ ************************************************** ************************************************** ************************************************** ************************************************** **********
การข้าม: [192.168.0.199]
การข้าม: [192.168.0.189]

งาน [แก้ไขข้อบกพร่อง] *********************************************** ************************************************** ************************************************** ************************************************** ************************************************** ***************
ตกลง: [192.168.0.199] => {
    "hostname_result.stdout_lines": "ไม่ได้กำหนดตัวแปร!"
}
ตกลง: [192.168.0.189] => {
    "hostname_result.stdout_lines": "ไม่ได้กำหนดตัวแปร!"
}
Score:1
ธง cn
  เมื่อ: รายการใน group_names

เมื่อคำหลักอยู่ในนิพจน์ Jinja โดยปริยายแล้ว ให้ลบ {{ }} ในคำเหล่านั้น

อย่างไรก็ตาม การเล่นของคุณยังคงมีปัญหาอยู่

เกี่ยวกับงานการยืนยันใน task.yml การดีบักจะพิมพ์เฉพาะสิ่งต่างๆ เท่านั้น มันไม่ได้ทำการยืนยันจริงอย่างที่งานยืนยันทำ นอกจากนี้คุณยังเป็น วนซ้ำ:ing และกำลังทำงานบนหลายโฮสต์ซึ่งทำงาน 2 * 2 = 4 ครั้ง และอาจไม่ใช่สิ่งที่คุณต้องการ ส่งผลให้มีการข้ามขั้นตอนเพิ่มเติม

ฉันไม่เห็นว่างานแก้ไขข้อบกพร่องมีค่าอย่างไร และจะลบทิ้งทั้งหมด มีวิธีอื่นๆ ในการตรวจสอบเนื้อหาของกลุ่ม เช่น สินค้าคงคลัง ansible เครื่องมือบรรทัดคำสั่ง

นิพจน์ในชื่อของงานจะไม่ทำงานตามที่คุณคาดหวัง ฉันคิดว่ามันจะสะท้อนถึงโฮสต์แรกหรืออะไรแปลก ๆ แบบนั้นเท่านั้น

- โฮสต์: ทั้งหมด
  การเชื่อมต่อ: ท้องถิ่น

อย่าใช้หลายโฮสต์กับการเชื่อมต่อภายในเครื่อง มันจะทำงานหลาย ๆ ครั้ง แต่ไม่ใช่ ssh ที่ใดก็ได้ซึ่งอาจไม่ใช่สิ่งที่คุณต้องการ ปลั๊กอินการดำเนินการเช่นการดีบักถูกเรียกใช้โดยเนื้อแท้แล้วบน localhost หรือคุณสามารถใส่ localhost เป็นรูปแบบโฮสต์ ดังนั้น:

  1. ลบ การเชื่อมต่อ: ท้องถิ่น ในระดับการเล่น
  2. ใช้รูปแบบโฮสต์เฉพาะเจาะจงกว่าทั้งหมด โฮสต์: port_22,port_222 จะทำงานทั้งสองกลุ่มและมีความชัดเจนมากขึ้นว่าคุณตั้งใจอย่างไร
divyashree kumar avatar
cn flag
ตามที่คุณแนะนำ ฉันได้แก้ไขเงื่อนไข `เมื่อ: รายการใน group_names` ลบ `การเชื่อมต่อ: local` และเพิ่มรูปแบบโฮสต์ `hosts: port_22,port_222` และวางผลลัพธ์ แต่การดำเนินการไม่ได้เกิดขึ้นอย่างถูกต้องบนรีโมตโฮสต์ และเอาต์พุตว่างเปล่าเนื่องจาก "ข้าม" โฮสต์

โพสต์คำตอบ

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