จะทดสอบการจัดเตรียมและการกำหนดค่าในการตั้งค่า Ansible ได้อย่างไร


33

ดูที่การพยายามสร้างความยืดหยุ่นในการตั้งค่า Ansible ของเราซึ่งเกี่ยวข้องกับการจัดสรรและการกำหนดค่า

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

ขณะนี้การทดสอบจำนวนมากของเราทำเสร็จแล้วในช่วง playbook ซึ่งทำให้รู้สึกเป็นอย่างมากสำหรับ "สิ่งที่จะเกิดขึ้น" มีบริการขึ้นมาคือ vip ที่มีให้ใช้งาน async นี้เสร็จแล้ว "แต่สิ่งที่เกี่ยวข้องกับฉันคือความสามารถในการจัดการ การกำหนดค่าที่ทั้งแอปพลิเคชันและชั้นการจัดเตรียม (เช่นการกำหนดค่า VM) ฉันรู้ว่า Ansible ไม่ใช่เครื่องมือที่ดีที่สุดสำหรับการทำงานกับการตั้งค่าดริฟท์ แต่ฉันอยากรู้อยากเห็นความคิดเห็นของคุณเอง

หากคุณมีสิ่งที่จะทำให้กระบวนการอัตโนมัติดียิ่งขึ้น (เรามีสคริปต์ที่น่าเกลียดอยู่สองสามฉบับซึ่งรายงานกลับมาเป็นรายวัน)

หมายเหตุ : ตอนนี้เรามีเงื่อนไขบางประการที่อาจเกิดการ reprovision ขึ้นมาใหม่ (เช่นการสร้างใหม่จากการสำรองข้อมูลปัญหาของระบบที่สำคัญ) แต่โดยทั่วไปแล้วมันจะวนซ้ำผ่านงานการกำหนดค่า ansible บางอย่างและไม่คิดอีกต่อไป



Ansible ทำงานเพียงครั้งเดียวเมื่อมีการจัดสรรหรือไม่? ถ้าไม่มันจะทำงานความถี่อะไร เพียงพยายามเข้าใจปัญหาก่อนเสนอวิธีแก้ไข
Woodland Hunter

สวัสดี @Naphta คำตอบใด ๆ ได้แก้ไขคำถามของคุณแล้วโปรดลองตอบรับด้วยการคลิกเครื่องหมายถูก สิ่งนี้บ่งชี้ถึงชุมชนที่กว้างขึ้นซึ่งคุณได้พบวิธีแก้ปัญหาและสร้างชื่อเสียงให้กับทั้งผู้ตอบคำถามและตัวคุณเอง ไม่มีข้อผูกมัดในการทำเช่นนี้
Richard Slater

I'm aware Ansible isn't the best tool for working with configuration drift กรุณาอธิบาย.
030

คำตอบ:


19

ตัวเลือกบางอย่างออกมี ..

เครื่องมือทดสอบ:จัดเรียงตามดาว GitHub

  • Serverspec - Ruby เครื่องมือที่ได้รับความนิยมมากที่สุดสร้างจาก rspec ของ ruby
  • Goss - YAML ง่ายไบนารีในตัวขนาด <10MB รวดเร็วมากสามารถสร้างการทดสอบจากสถานะระบบ
  • Inspec - Ruby คิดว่ามันเป็นเพคเซิร์ฟเวอร์ที่ปรับปรุงแล้วซินแท็กซ์เกือบจะเหมือนกันที่จัดทำโดยพวกพ่อครัว สร้างขึ้นเพื่อให้ขยายได้ง่ายกว่าเซิร์ฟเวอร์เพค
  • Testinfra - Python มีคุณสมบัติเจ๋ง ๆ ในการใช้สินค้าคงคลัง / vars ของ Ansible

ความแตกต่างที่สำคัญระหว่างพวกเขา:

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

  • ด้วยข้อยกเว้นของ Goss เฟรมเวิร์กทั้งหมดสามารถรันกับเครื่องรีโมต (เช่น over ssh) Goss ทำงานเฉพาะที่หรือใน Docker w / dgoss
  • เฟรมเวิร์กทั้งหมดสามารถเรียกใช้แบบโลคัลบนเซิร์ฟเวอร์ แต่ต้องการให้ติดตั้งหรือฝัง Python หรือ Ruby Inspec จัดให้มีชุด <ทับทิมในตัว <150MB พร้อมทับทิมรุ่นฝัง Goss เป็นไบนารี <10MB เดียวโดยไม่มีการอ้างอิงภายนอก
  • Goss ได้สร้างขึ้นเพื่อรองรับการส่งออก nagios / sensu ซึ่งช่วยให้การรวมง่ายขึ้นด้วยเครื่องมือตรวจสอบ
  • การทดสอบ Goss นั้นง่ายกว่า แต่มีความยืดหยุ่นน้อยลงเนื่องจากใช้ YAML เฟรมเวิร์กอื่น ๆ ช่วยให้คุณสามารถใช้ประโยชน์จากภาษา Python / Ruby ที่เป็นพื้นฐานเพื่อเขียนการทดสอบหรือขยายการทำงานของเครื่องมือ (ความเรียบง่ายเทียบกับความยืดหยุ่น)
  • Goss ช่วยให้คุณสร้างการทดสอบจากสถานะระบบปัจจุบัน
  • Testinfra สำหรับความรู้ของฉันเป็นสิ่งเดียวที่มีการสนับสนุนในตัวสำหรับสินค้าคงคลังและตัวแปร
  • Inspec ได้รับการสนับสนุนโดย Chef

การทดสอบอย่างต่อเนื่อง / แตกต่าง:

  • Chef Compliance - ทำงานกับ inspec เพื่อทดสอบเซิร์ฟเวอร์ของคุณอย่างต่อเนื่อง, ผลิตภัณฑ์ที่ต้องชำระเงิน
  • Goss - สามารถต่อเข้ากับ Nagios หรือ Sensu ได้อย่างง่ายดาย นอกจากนี้ยังรองรับการเปิดเผยการทดสอบเซิร์ฟเวอร์เป็นจุดปลาย http

สายรัดทดสอบสำหรับการพัฒนา:

  • ครัว - เครื่องมือทดสอบการใช้งาน, เปิดตัวอินสแตนซ์, รันรหัสการจัดการการกำหนดค่า, รันชุดการทดสอบ ทำโดยพวกพ่อครัว
  • Molecule - คล้ายกับห้องครัวทดสอบ แต่เขียนโดยเฉพาะสำหรับ ansible

การเปิดเผยแบบเต็ม:ฉันเป็นผู้เขียน goss

ปรับปรุง: InSpec 4.x หรือสูงกว่าใช้สิทธิ์การใช้งานเชิงพาณิชย์ / โอเพ่นซอร์สแบบผสม - ดูความคิดเห็น


4
ฉันเข้าใจว่าคุณมีอคติเล็กน้อย แต่ผู้ตรวจสอบไม่จำเป็นต้องปฏิบัติตามกฎระเบียบเพื่อให้ทำงานเป็นระยะ และไม่มีการพึ่งพาการจัดการ libs และกรอบงานที่จำเป็นทั้งหมด (ทับทิม) จะรวมอยู่ในแพ็คเกจซึ่งสามารถติดตั้งแบบโลคัลในแต่ละโหนดเมื่อทำงานผ่าน ssh / winrm, inspec ทำให้ตัวเองอยู่ในตำแหน่ง คุณชี้ให้เห็นเกี่ยวกับคำสั่งภายนอกเฉพาะซึ่งไม่เป็นความจริงการทดสอบจำนวนมากดำเนินการโดยรหัสทับทิมภายใน (ฉันคิดว่ามันควรค่าแก่การสังเกต)
Tensibai

ฉันได้อัปเดตคำตอบเพื่อแก้ไขคำสั่งภายนอกและทับทิมรวมสำหรับการตรวจสอบ คุณช่วยอธิบายหรือส่งลิงก์ให้ฉันอธิบายถึงวิธีการใช้ Inspec ในการตรวจจับ / รายงานเกี่ยวกับการดริฟท์ได้หรือไม่?
Ahmed Elsabbahy

ส่วนรายงานจะอยู่ในมือของคุณมันเป็นเป้าหมายการปฏิบัติตามกฎระเบียบอย่างแท้จริงในการเป็นตัวแทน แต่คุณสามารถเรียกใช้ inspec ใน crontab และพึ่งจดหมาย crontab เมื่อมีการทดสอบล้มเหลวที่จะเตือนคุณ (เช่น)
Tensibai

สรุปแล้วการแก้ไขนั้นฟังดูเป็นธรรมกับเครื่องมือของคุณและอื่น ๆ ฉันเกรงว่าสิ่งนี้อาจล้าสมัยอย่างรวดเร็ว แต่ +1 ต่อไปสำหรับรายชื่อและตัวชี้
Tensibai

อ่า .. เครื่องมือทั้งหมดสามารถใช้ประโยชน์ได้ในทางนั้น ฉันพยายามจัดหาเครื่องมือ (หรือการผสานรวมกับเครื่องมือ) ที่ให้การรายงานที่ดีขึ้น สำหรับความรู้ของฉันมีการปฏิบัติตามหรือห่อเครื่องมือในวิธีที่ทำให้พวกเขา nagios / sensu / อื่น ๆ เครื่องมือตรวจสอบเป็นมิตร ตัวอย่าง: slideshare.net/m_richardson/… ขออภัยหากมันมีความเอนเอียงในตอนแรกไม่ได้ตั้งใจจะเป็น
Ahmed Elsabbahy

13

ทั้งสองเครื่องมือที่ผมเคยเห็นนี้INSPECและServerSpec Serverspec เป็นเครื่องมือทับทิมตามที่สร้างขึ้นบนRSpec InSpec ได้รับแรงบันดาลใจจาก RSpec และ ServerSpec

ฉันใช้ ServerSpec มันเจ๋ง แต่อาจจะไม่เสถียร 100% ฉันมีปัญหากับการทดสอบซอฟต์แวร์เวอร์ชันเฉพาะบน Ubuntu

ฉันอ่าน InSpec docs แล้ว แต่ยังไม่ได้ขุดลึก มันทำสิ่งเดียวกับ Serverspec

การตัดสินโดย Github นั้นดูเหมือนว่างานใน ServerSpec จะได้รับการปรับปรุงบ้างในขณะที่ InSpec กำลังเพิ่มขึ้นอย่างรวดเร็ว

ปรับปรุง: InSpec 4.x หรือสูงกว่าใช้สิทธิ์การใช้งานเชิงพาณิชย์ / โอเพ่นซอร์สแบบผสม - ดูความคิดเห็น


1
"ฉันมีปัญหากับการทดสอบซอฟต์แวร์เวอร์ชันเฉพาะบน Ubuntu" ฉันแก้ไขสิ่งนี้หลังจากสังเกตคำถามเกี่ยวกับ SO: stackoverflow.com/questions/42417864/…
Matt Schuchard

ในการชี้แจงเล็กน้อย InSpec จำลอง RSpec แต่ไม่ได้สร้าง
coderanger

1
@ MattSchuchard ขอบคุณสำหรับการอ้างอิง!
Dave Swersky

ดี "ไม่เสถียร 100%" สำหรับเครื่องมือทดสอบไม่ส่งผลดีใด ๆ
ᴳᵁᴵᴰᴼ

InSpec เป็นเครื่องมือทดสอบที่ดีมากและทำให้ติดตั้งง่ายบนเซิร์ฟเวอร์ในขณะที่ ServerSpec สามารถทำสิ่งนี้ได้ด้วยการทำงานพิเศษบางอย่างเท่านั้น งานบางอย่างอาจจำเป็นต้องใช้ InSpec ในการใช้สินค้าคงคลัง Ansible ซึ่งอาจจะง่ายกว่าหากสินค้าคงคลังอยู่ในรูปแบบ YAML (Ansible 2.4+)
RichVel

10

เมื่อใช้เครื่องมือการจัดการการกำหนดค่าเช่น Ansible ตัวเครื่องมือเองจะต้องรับผิดชอบในการป้องกันการกำหนดค่าดริฟท์ เมื่อคุณใช้ Ansible เพื่อตั้งค่าการกำหนดค่าที่แน่นอนการใช้งาน Ansible ซ้ำ ๆ จะทำให้มั่นใจได้ว่าการกำหนดค่าของคุณเป็นไปตามที่คุณกำหนดไว้ นอกจากนี้ยังต้องใช้รหัส Ansible ของคุณในการเขียนในลักษณะที่เป็น idempotent

การเตรียมการทดสอบสามารถทำได้โดยการดำเนินการ playbooks Ansible ของคุณในวงจากเซิร์ฟเวอร์บางอย่าง ตัวอย่างเช่นงาน cron หรือเจนกินส์สามารถดำเนินการ playbooks ทุก ๆ 30 นาทีและรายงานกลับมาเกี่ยวกับความล้มเหลวใด ๆ มีไม่มีความล้มเหลวหมายถึงว่าการกำหนดค่าของคุณอยู่ในการตรวจสอบมีความล้มเหลวหมายความว่าจะมีปัญหาในการรับเข้าเซิร์ฟเวอร์ของรัฐที่ต้องการ

ในกรณีที่คุณไม่สามารถเชื่อถือรหัสของคุณที่จะเขียนเป็น idempotent และทำให้คุณไม่สามารถเรียกใช้ Ansible ซ้ำ ๆ ในลูปจากเซิร์ฟเวอร์อัตโนมัติที่มีวิธีแก้ปัญหาอยู่ คุณสามารถทำเช่นเดียวกันกับข้างต้น (เรียกเบิ้ลในวง) แต่ใช้ของแห้งโหมด แต่ละครั้งที่รายงานเบิ้ลว่าการเปลี่ยนแปลงจะต้องที่งานเจนกินส์ (หรืองาน cron) สามารถแจ้งให้คุณทราบว่าการกำหนดค่าการจัดเตรียมของคุณได้รับการเปลี่ยนแปลงและเซิร์ฟเวอร์ไม่ได้อยู่ในพวกเขารัฐที่ต้องการ

เพื่อให้แน่ใจว่ารหัส Ansible ของคุณกำลังทำสิ่งที่คุณคิดว่าควรทำจริง ๆ โซลูชันที่กล่าวถึงโดย Dave Swersky ใช้ ทั้งInSpecและServerspecเป็นเครื่องมือที่ตรวจสอบในวิธีที่แตกต่างกันซึ่ง playbooks ของคุณทำในสิ่งที่คุณหมายถึง วิธีที่ยอดเยี่ยมในการเรียกใช้เครื่องมือประเภทนี้ในสภาพแวดล้อมการทดสอบ (แม้ในตู้เทียบท่า) คือการใช้kitchen.ciซึ่งจัดการกาวทั้งหมดระหว่างเครื่องมือทดสอบหน่วยงานอินฟา

Kitchen.ci เดิมใช้เพื่อทดสอบตำราอาหารของ Chef แต่มีปลั๊กอินสำหรับ Ansibleและเครื่องมือ CM อื่น ๆ เช่นกัน


5

Test Kitchen มีปลั๊กอินสำหรับเตรียมใช้งาน Ansible สำหรับการทดสอบโค้ด Ansible มันไม่ได้ลึกเท่ากับการรวมเชฟ แต่ก็สามารถทำงานให้สำเร็จได้ในกรณีส่วนใหญ่ นอกจากนี้ยังมีโครงการโมเลกุลล่าสุดซึ่งเป็นระบบทดสอบ Ansible โดยเฉพาะ


0

คุณสามารถติดตามความแตกต่างของการกำหนดค่า / โครงสร้างพื้นฐาน / ดริฟท์โดยใช้Outthenticเป็นเรื่องง่ายในการสร้างชุดทดสอบเพื่อ "แก้ไข" สถานะที่ต้องการและเรียกใช้ซ้ำทุกครั้งที่คุณต้องการติดตามการเปลี่ยนแปลงที่ไม่พึงประสงค์


1
ยินดีต้อนรับสู่ DevOps.se Alexey ในขณะที่เครื่องมือของคุณอาจช่วยผู้ใช้ในกรณีนี้เพื่อให้เป็นคำตอบที่นี่ควรมีอีกเล็กน้อยที่จะถ่ายทอดว่าสิ่งนี้เกี่ยวข้องกับคำถามอย่างไร มิฉะนั้นจะดูเหมือนโฆษณาลิงค์เท่านั้น
ลูกไก่

Hi! แน่นอนว่าเพิ่งได้รับรายละเอียดเพิ่มเติม
Alexey Melezhik

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

"วิธีแก้ปัญหาการตรวจสอบเซิร์ฟเวอร์นับพัน" - ฉันสามารถหาอะไรเกี่ยวกับเซิร์ฟเวอร์นับพันในคำถาม
Alexey Melezhik

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