Score:0

ทำให้งานที่ข้ามแสดงเป็น "ตกลง"

ธง ru
jdm

ฉันมีงานที่ต้องจัดการซึ่งทำงานในสองส่วน ส่วนแรกกำหนดเงื่อนไข ส่วนที่สองใช้ เมื่อไร เพื่อดำเนินการตามเงื่อนไข ตัวอย่างหลอก:

- ชื่อ: ตรวจสอบว่ามีการติดตั้งหรือไม่
  สั่งการ: (...)
  ลงทะเบียน: is_installed

- ชื่อ: เรียกใช้สคริปต์การติดตั้ง
  เมื่อ: is_installed.stdout == "ใช่"
  สั่งการ: (...)

งานที่สองแสดงเป็น "ข้าม" นี่ไม่ถูกต้องจริงๆ ฉันไม่ได้ละทิ้งการติดตั้ง แต่ยืนยันว่าได้เสร็จสิ้นแล้ว ดังนั้นควรแสดงเป็น "ตกลง" ควรแสดง "ข้าม" เฉพาะเมื่อโฮสต์ที่กำหนดไม่ต้องการขั้นตอนนี้ ฉันรู้ว่านี่เป็นเพียงเครื่องสำอาง แต่ฉันก็ยังอยากรู้ว่ามีวิธีใดที่จะทำให้มันพูดว่า "ตกลง"

ฉันลองตั้งค่า เปลี่ยน_เมื่อ ถึง เท็จ. แม้ว่าสิ่งนี้จะตั้งค่าผลลัพธ์เป็นตกลง แต่ก็ยังคงเรียกใช้คำสั่ง มีคนถามหา. ตกลง_เมื่อ การตั้งค่าแต่ถูกปฏิเสธและฉันไม่แน่ใจว่านักพัฒนาเข้าใจคำขอ

U880D avatar
ca flag
จากคำอธิบายของคุณ ฉันเข้าใจว่าคุณต้องการติดตั้งหรือกำหนดค่า "บางอย่าง" บนโหนดระยะไกล คุณต้องการยืนยันในการเรียกใช้งานครั้งต่อไปว่ายังคงเป็นกรณีนี้ สำหรับฉัน ดูเหมือนว่าการติดตั้งแพ็คเกจจะไร้ประสิทธิภาพ และเพื่อให้บรรลุเป้าหมายนี้ ไม่จำเป็นต้อง "ข้าม" การตรวจสอบ "ok_when"
ru flag
jdm
ใช่ แต่การติดตั้งไม่ผ่าน apt, pip และอื่นๆ ดังนั้นฉันจึงใช้งานเฉพาะทางไม่ได้ ในกรณีทั่วไป ฉันมีคำสั่งเชลล์สองคำสั่ง คำสั่งหนึ่งบอกฉันว่าจำเป็นต้องมีการดำเนินการหรือไม่ และอีกคำสั่งหนึ่งดำเนินการดูเหมือนว่านี่จะเป็นหนึ่งในสิ่งพื้นฐานที่สุดที่คุณสามารถทำได้ใน ansible
U880D avatar
ca flag
เนื่องจากไม่มีการให้ข้อมูลว่า "บางอย่าง" อาจเป็นอย่างไร ฉันเดาได้เฉพาะบางกรณีเท่านั้น เนื่องจาก Ansible เป็นเครื่องมือจัดการคอนฟิกูเรชันที่ใช้ประกาศสถานะ งานจึงมักถูกจัดระเบียบเพื่อให้แน่ใจว่ามีบางอย่างอยู่ในสถานะที่แน่นอน ด้วยเหตุนี้ตัวติดตั้ง (สคริปต์) จึงสามารถทำงานได้สองครั้งและหมดสมรรถภาพ ในเกือบทุกกรณีไม่จำเป็นต้องมีการตรวจสอบก่อน
U880D avatar
ca flag
อาจเป็นไปได้ที่จะตรวจสอบในคำสั่งเชลล์ของคุณเช่นสำหรับ `needs-restarting -r || /usr/sbin/shutdown -r +1` ปล่อยให้คำสั่งทำงานหากจำเป็น และให้ข้อเสนอแนะสำหรับสภาพแวดล้อม Ansible ย้อนกลับผ่านโค้ดส่งคืน stderr, stdout
Score:2
ธง ng

ฉันไม่สามารถคิดวิธีแก้ปัญหาทั่วไปได้ที่นี่ แต่ถ้างานติดตั้งบางอย่างจริง ๆ คุณสามารถลบส่วนแรกและเพิ่มได้ สร้าง ไปยังส่วนที่สองเพื่อดำเนินการตรวจสอบ

- ชื่อ: เรียกใช้สคริปต์การติดตั้ง
  สร้าง: /path/to/installation
  สั่งการ: (...)
ru flag
jdm
ใช่ นั่นดูเหมือนจะเป็นวิธีแก้ปัญหาตามอุดมคติ ทางเลือกอื่นคือการเขียนโมดูลแบบกำหนดเองซึ่งรู้วิธีตรวจสอบ "ตกลง" เป็นเรื่องแปลกที่ไม่มีวิธีง่ายๆ ในการกำหนดใน YAML
U880D avatar
ca flag
ใช่ นั่นคือสิ่งที่ [`command` module parameter `creates`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/command_module.html#parameter-creates) หรือ [`shell` module พารามิเตอร์ `creates`](https://docs.ansible.com/ansible/latest/collections/ansible/builtin/shell_module.html#parameter-creates) มีไว้สำหรับดูในตัวอย่าง [ansible/modules/command.py](https://github.com/ansible/ansible/blob/devel/lib/ansible/modules/command.py) ว่า "_ในขณะที่คำสั่งนั้นเป็นไปตามอำเภอใจและไม่สามารถ ขึ้นอยู่กับความหมายของโหมดตรวจสอบ ซึ่งเพิ่มตัวเลือก C(creats)/C(removes) เป็นวิธีแก้ปัญหา_"
Score:1
ธง cn

เมื่อไร: ประเมินผลเป็นเท็จในสถานะข้ามงานนั้น การพิมพ์บางอย่างที่ข้ามมาจากปลั๊กอินการโทรกลับมาตรฐาน สำหรับการโทรกลับตามค่าเริ่มต้น สามารถปิดใช้งานได้ทั่วโลกด้วย display_skipped_hosts รายการการกำหนดค่า ดูเอกสาร: ansible-doc -t ค่าเริ่มต้นการโทรกลับ

วิธีแก้ปัญหาที่สวยงามคือการรวมสิ่งนี้ไว้ในตัวจัดการแพ็คเกจจริงและติดตั้ง มีโมดูลตัวจัดการแพ็คเกจ idempotent หลายตัวสำหรับ Ansible

หรือ สคริปต์การติดตั้งอาจทำให้เรียกใช้ซ้ำได้อย่างปลอดภัย และส่งคืนด้วยรหัสศูนย์เมื่อสำเร็จ


แม้ว่าฉันจะไม่ได้พูดแทนนักพัฒนา แต่พวกเขาก็ระมัดระวังเกี่ยวกับการเพิ่มคุณสมบัติให้กับคอร์ และบางทีพวกเขาอาจไม่เห็นปัญหาเกี่ยวกับงานที่รายงานว่าข้ามไป ไม่ใช่ทุกงานของการเล่นทุกครั้ง

เมื่อไร: ควบคุมว่างานรันหรือไม่ เปลี่ยนแปลง_เมื่อ: และ ล้มเหลว_เมื่อ: แก้ไขสถานะของงานหลังจากรัน เช่น ตามรหัสส่งคืนหรือมาตรฐานออก สิ่งเหล่านี้ร่วมกันทำให้ควบคุมว่างานมีสถานะเปลี่ยนแปลงหรือล้มเหลวหรือไม่ แม้แต่งานคำสั่งทั่วไป

สำหรับการควบคุม idempotency ให้ใช้โมดูลทั่วไปน้อยกว่า และหากคุณยังรู้สึกขุ่นเคืองกับสิ่งที่พิมพ์อยู่ ให้ลองใช้ปลั๊กอินโทรกลับแบบกำหนดเอง

โพสต์คำตอบ

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