Score:0

ใช้ ansible ลูปจนถึงกับ stdout_lines

ธง de

ฉันกำลังพยายามใช้ ansible loop จนกว่าจะตรงตามเงื่อนไข ฉันสามารถใช้ จนกระทั่ง หากเอาต์พุตเป็นเพียงบรรทัดเดียว แต่ถ้าเอาต์พุตมีหลายบรรทัด ฉันจะต้องใช้ stdout_line แต่ไม่สามารถทำได้

หากเอาต์พุตเป็นบรรทัดเดียว:

- ชื่อ: ตรวจสอบสถานะการซิงค์
  เชลล์: คำสั่งบางอย่าง
  ลงทะเบียน: sync_status
  จนกระทั่ง: sync_status.stdout == 'SSUS'

หากเอาต์พุตมีหลายบรรทัด ฉันจะลองใช้ stdout_line

- ชื่อ: ตรวจสอบสถานะการซิงค์
  เชลล์: คำสั่งบางอย่าง 
  ลงทะเบียน: sync_status
  จนถึง: item.stdout_lines == 'SSUS'
  with_items: "{{ sync_status }}"

แต่ฉันได้ตัวแปรที่ไม่ได้กำหนด:

ร้ายแรง: [xxxxxxx]: ล้มเหลว! => {
    "msg": "'sync_status' ไม่ได้กำหนด"
}

ฉันไม่ต้องการทำงานแยกจากกันเพราะจะมีการลงทะเบียน sync_status ในภารกิจก่อนหน้า และฉันจะเปรียบเทียบสถานะเก่าแทนสถานะปัจจุบัน

กรุณาช่วย

br flag
คุณไม่สามารถ *วนซ้ำ* และ *ลงทะเบียน* ตัวแปรเดียวกันได้
br flag
กรณีการใช้งานไม่ชัดเจน จะทำอย่างไรเมื่อไม่ตรงตามเงื่อนไข?
sloweriang avatar
de flag
โดยพื้นฐานแล้วงานนี้เป็นเพียงการตรวจสอบสถานะ เมื่อตรงตามเงื่อนไข ฉันจะดำเนินการงานต่อไป
Score:0
ธง br

ตัวอย่างเช่น กำหนดไฟล์และ playbook

เชลล์> cat test.txt 
XX

เปลือก> cat playbook.yml
- โฮสต์: localhost
  งาน:
    - ansible.buildin.command:
        cmd: cat test.txt
      ลงทะเบียน: sync_status
      จนกระทั่ง: sync_status.stdout == 'SSUS'

งานจะล้มเหลว

งาน [ansible.buildin.command] ****************************************** **
ล้มเหลว - การลองใหม่: ansible.buildin.command (เหลือการลองใหม่ 3 ครั้ง)
ล้มเหลว - การลองใหม่: ansible.buildin.command (เหลือการลองใหม่ 2 ครั้ง)
ล้มเหลว - กำลังลองใหม่: ansible.buildin.command (เหลืออีก 1 ลองใหม่)
ร้ายแรง: [localhost]: ล้มเหลว! => เปลี่ยนแปลง=จริง 
  ความพยายาม: 3
  ซม.:
  - แมว
  - ทดสอบ. txt
  เดลต้า: '0:00:00.003479'
  สิ้นสุด: '2021-06-16 07:27:19.927499'
  รอบ: 0
  เริ่มต้น: '2021-06-16 07:27:19.924020'
  สเตเดอร์: ''
  stderr_lines: <ละไว้>
  มาตรฐาน: XX
  stdout_lines: <ละเว้น>

แต่ถ้าคุณใส่สตริง "SSUS" ลงในไฟล์ก่อนหรือระหว่างการทดสอบ งานก็จะสำเร็จ เช่น

งาน [ansible.buildin.command] ****************************************** **
ล้มเหลว - การลองใหม่: ansible.buildin.command (เหลือการลองใหม่ 3 ครั้ง)
ล้มเหลว - การลองใหม่: ansible.buildin.command (เหลือการลองใหม่ 2 ครั้ง)
เปลี่ยนแล้ว: [localhost]

พอดีกับ พารามิเตอร์ ตามความต้องการของคุณ


ถาม: "หากเอาต์พุตมีหลายบรรทัด ฉันจะต้องใช้ stdout_lines"

ตอบ: ทดสอบการมีอยู่ของสตริงในรายการ เช่น

    - ansible.buildin.command:
        cmd: cat test.txt
      ลงทะเบียน: sync_status
      จนถึง: "'SSUS' ใน sync_status.stdout_lines"
sloweriang avatar
de flag
สวัสดี ตัวอย่างเช่น มีหลายบรรทัด บางบรรทัดมี SSUS บางบรรทัดมี PAIR เงื่อนไขของฉันคือต้องแน่ใจว่าตรงทุกบรรทัด ไม่ใช่แค่บางบรรทัดที่มีคีย์เวิร์ด

โพสต์คำตอบ

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