จะตรวจสอบผลลัพธ์ Jinja ใน Saltstack ได้อย่างไร


16

ฉันมี templated SLSใน Salt ฉันพยายามสร้าง แต่มันปล่อยซินแทกซ์ที่ไม่ถูกต้องซึ่งส่งผลให้เกิดข้อผิดพลาดเช่น:

my-minion-id:
    - State 'system' in SLS 'network' is not formed as a list

ในหลักการก็ควรจะเป็นไปไปอย่างใดตรวจสอบการส่งออกของแม่แบบ Jinja ก่อนที่จะพยายามที่จะแยกการส่งออกเป็นSLSไฟล์ มีโมดูล Python สำหรับตัวแสดงผล Jinja อยู่salt.renderers.jinjaแต่ถ้าฉันพยายามเรียกใช้งานบน CLI ฉันได้รับข้อผิดพลาด:

# salt my-minion-id salt.renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'salt.renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code
# salt my-minion-id renderers.jinja.render /srv/salt/network/init.sls
my-minion-id:
    'renderers.jinja.render' is not available.
ERROR: Minions returned with non-zero exit code

ฉันจะดูผลลัพธ์ของเทมเพลตของฉันได้อย่างไร ดูเหมือนว่าไร้สาระมันน่าจะเป็นการดีที่จะทำการดีบั๊ก

คำตอบ:


11

ตรวจสอบโมดูลslsutil.renderer

สิ่งนี้ควรทำในสิ่งที่คุณต้องการ

salt my-minion-id slsutil.renderer /srv/salt/network/init.sls 'jinja'

โมดูลนี้เพียงเรียกใช้ฟังก์ชัน compile_template โดยตรงสำหรับคุณ

แก้ไข: /srv/salt/network/init.sls เป็นเส้นทางใน minion หากคุณไม่ได้กำหนดเป้าหมายต้นแบบเป็น minion ของคุณคุณอาจต้องทำสิ่งต่อไปนี้

salt minion-id cp.cache_file salt://network/init.sls
salt minion-id slsutil.renderer /var/cache/salt/minion/files/base/network/init.sls

หรือชี้ไปที่ไฟล์ใดก็ตามที่ cache_file แยกออกมา

หากคุณอยู่ในปี 2018.3 หรือใหม่กว่าคุณสามารถระบุได้ salt://network/init.sls


แต่เส้นทางคืออะไร / srv / salt / network มันเป็นเส้นทางของอาจารย์หรือไม่? สมุน
Mrten

มันเป็นเส้นทางของสมุน คุณสามารถทำsalt minion-id cp.cache_file salt://network/init.slsแล้วเรียกใช้ slsutil.renderer กับไฟล์ที่ถ่มน้ำลายกลับมาหลังจากถูกแคชใน minion หรือเริ่มในปี 2018.3 คุณสามารถระบุได้salt://network/init.sls
gtmanfred

8

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

วิธีแก้ปัญหาดูเหมือนว่าจะใช้salt.modules.cp.get_templateเพื่อให้ Salt minion ดึงไฟล์แสดงผลผ่านเครื่องมือสร้างเทมเพลตและวางไว้ในตำแหน่งที่อ่านได้:

# salt my-minion-id cp.get_template salt://network/init.sls /root/network.sls template=jinja
my-minion-id:
    /root/network.sls

จากนั้นคุณเชื่อมต่อกับโฮสต์และตรวจสอบไฟล์ที่คุณวางไว้ที่my-minion-id/root/network.sls

เรื่องนี้ทำให้รู้สึก; salt.renderers.jinjaอยู่ในsalt.renderersเนมสเปซในขณะที่โมดูลที่คุณมีสิทธิ์เข้าถึงจาก CLI อยู่ในsalt.modulesเนมสเปซ

นอกจากนี้ยังมีเหตุผลจากจุดมองเห็นข้อมูล การสร้างเท็มเพลตเกิดขึ้นในminionซึ่งมีธัญพืชและสิ่งนี้พร้อมใช้งานและฉันยังไม่เห็นโมดูลที่เรียกใช้งานโค้ด minion ส่งคืนเอาต์พุตแบบสุ่มไปยังต้นแบบ (สำหรับมุมมองบน CLI เป็นต้น) ข้อมูลที่ส่งคืนมีโครงสร้างที่ดีและรัดกุมอย่างสม่ำเสมอ (อาจมีโมดูลดังกล่าว แต่ฉันไม่รู้ว่ามันคืออะไรมันจะเป็นทางออกที่ดีกว่าในการวางไฟล์ทดสอบลงใน minion)

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.