Ansible ต่างจากเพียงแค่รัน bash shell ใน Vagrant อย่างไร


38

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

มีความแตกต่างและเหตุผลที่ดีในการเริ่มใช้ Ansible vs. เพื่อดำเนินการเขียนเชลล์สคริปต์ต่อไปหรือไม่

คำตอบ:


29

ฉันไม่เคยใช้ Ansible แต่หลังจากสองสามสัปดาห์ฉันพยายามคิดว่า Ansible ที่ดีนั้นสามารถเปรียบเทียบกับ shell scrips - ซึ่งพิสูจน์ได้อย่างน้อยในกรณีของฉันว่าแคมเปญโฆษณาที่หลอกหลอนพวกเขาทำงานมีประสิทธิภาพ! หลังจากความพยายามไม่สำเร็จหลายครั้ง - ซึ่งพิสูจน์ว่าเอกสารของพวกเขาล้มเหลวในการตอบคำถามที่ชัดเจนที่สุด - ฉันคิดว่าในที่สุดฉันก็เข้าใจ:

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

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

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

แต่นี่อาจเป็นเพียงการพิสูจน์ว่าเนื้อหาการแนะนำนั้นแย่แค่ไหน!

วิดีโอเริ่มต้นอย่างรวดเร็ว:

มีความเป็นวิดีโอเริ่มต้นอย่างรวดเร็ว มันเริ่มต้นด้วยหน้าเว็บที่อ้างว่า…สิ่งเหล่านี้ไม่ได้อ้างสิทธิ์จริง ๆ นี่เป็นรายการหัวข้อย่อยสิ่งประดิษฐ์ที่ใช้กันทั่วไปเพื่อระงับการตัดสินที่สำคัญในการนำเสนอ

1. Ansible นั้นง่าย:

1.1 ระบบอัตโนมัติที่มนุษย์สามารถอ่านได้ - ข้อมูลจำเพาะเป็นเอกสารทางเทคนิค

  name: upgrade all packages
  yum:
    name: '*'
    state: latest

อ่านง่ายกว่าการเรียกใช้yum ที่สอดคล้องกันที่พบใน shell-script หรือไม่ นอกจากนี้ทุกคนที่มีการติดต่อกับ AppleScript ก็จะหัวเราะเมื่อพวกเขาอ่าน“ ระบบอัตโนมัติที่มนุษย์สามารถอ่านได้”

1.2 ไม่จำเป็นต้องมีทักษะการเข้ารหัสพิเศษ - การเข้ารหัสคืออะไรหากไม่ได้เขียนข้อกำหนดอย่างเป็นทางการ? พวกเขามีเงื่อนไขตัวแปรดังนั้นมันไม่ได้เข้ารหัสอย่างไร และทำไมฉันถึงต้องการบางสิ่งบางอย่างที่ฉันไม่สามารถเขียนโปรแกรมได้ คำสั่งไม่ถูกต้องอย่างมีความสุข!

1.3 งานที่ดำเนินการตามลำดับ - บางทีผู้สนใจรัก codegolfบางคนอาจทราบภาษาที่ใช้งานในความผิดปกติ แต่การดำเนินงานตามลำดับนั้นดูไม่ค่อยโดดเด่น

1.4 รับผลได้อย่างรวดเร็ว - โปรแกรมเมอร์ที่มีทักษะเชลล์กำลังทำงานอย่างมีประสิทธิภาพในขณะนี้ ข้อโต้แย้งนี้รุนแรงพอ ๆ กับอาร์กิวเมนต์เริ่มต้น

2. Ansible มีพลัง

เคล็ดลับการขายที่ได้รับความนิยมในการขายสิ่งของคือการหลอกคนให้เชื่อว่าพวกเขาจะได้รับ“ พลัง” ของสิ่งประดิษฐ์เหล่านี้ ประวัติความเป็นมาของการโฆษณารถยนต์หรือเครื่องดื่มไอโซโทนิกควรเป็นตัวอย่างที่น่าเชื่อถือ

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

3. Ansible ไม่มีเอเจนต์

ในการเติมคอลัมน์นั้นพวกเขาเขียนด้วยมารยาทที่แตกต่างกันสามแบบซึ่งสิ่งนี้ต้องการเพียงssh เท่านั้นซึ่งทุกคนรู้ดีว่าเป็นdaemonและไม่มีอะไรเกี่ยวข้องกับตัวแทนเหล่านี้ที่แผ่ขยายการจัดการการกำหนดค่าโลก!

ส่วนที่เหลือของวิดีโอ

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

ขั้นตอนเอกสารแบบสุ่ม 1: การรวมเข้ากับ EC2

EC2 เป็นบริการคำนวณจาก Amazon มีปฏิสัมพันธ์กับมันได้รับการสนับสนุนโดยบางโมดูลเบิ้ล (ผู้ให้บริการคลาวด์ที่ได้รับความนิยมอื่น ๆ ก็มีให้เช่นกัน):

# demo_setup.yml

- hosts: localhost
  connection: local
  gather_facts: False

  tasks:

    - name: Provision a set of instances
      ec2:
         key_name: my_key
         group: test
         instance_type: t2.micro
         image: "{{ ami_id }}"
         wait: true
         exact_count: 5
         count_tag:
            Name: Demo
         instance_tags:
            Name: Demo
      register: ec2

เชลล์สคริปต์ที่สอดคล้องกันนั้นจะเหมือนกับ YAML ที่ถูกแทนที่ด้วย JSON:

provision_a_set_of_instances()
{
  aws --output=text ec2 run-instances --image-id …   
}

หรือเวอร์ชัน JSON

provision_a_set_of_instances()
{
  aws --output=text ec2 run-instances --cli-input-json "$(provision_a_set_of_instances__json)"  
}

provision_a_set_of_instances__json()
{
  cat <<EOF
{
    "ImageId": … 
}
EOF
}

ทั้งสองเวอร์ชันมีความเหมือนกันส่วนใหญ่ของเพย์โหลดคือการแจกแจงของค่าเริ่มต้นในโครงสร้าง YAML หรือ JSON

ขั้นตอนเอกสารแบบสุ่ม 2: การจัดส่งอย่างต่อเนื่องและการอัปเกรดกลิ้ง

ส่วนที่ใหญ่ที่สุดของคู่มือนี้ไม่แสดงคุณลักษณะที่น่าสนใจใด ๆ : แนะนำตัวแปร (IIRC, เชลล์สคริปต์ยังมีตัวแปร)!, และโมดูล Ansible จัดการกับ mysql ดังนั้นถ้าแทนที่จะค้นหาหลังจาก "ฉันจะสร้างผู้ใช้ mysql อย่างไร ด้วยสิทธิพิเศษใน XY” และจบลงด้วยสิ่งที่ชอบ

# Create Application DB User
mysql --host "${mysql_host}" --user "${mysql_user}" --password "${mysql_password}" "${mysql_table}" <<EOF
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
EOF

คุณค้นหาหลังจาก“ฉันจะสร้างผู้ใช้ MySQL ที่มีสิทธิ์ในการ XY ในเบิ้ล ” และจบลงด้วย

- name: Create Application DB User
  mysql_user: name={{ dbuser }} password={{ upassword }}
              priv=*.*:ALL host='%' state=present

ความแตกต่างยังคงมีความหมายไม่มาก ในหน้านั้นเรายังค้นพบว่า Ansible มีภาษาเมตาโปรแกรมมิ่งเทมเพลต

{% for host in groups['monitoring'] %}
-A INPUT -p tcp -s {{ hostvars[host].ansible_default_ipv4.address }} --dport 5666 -j ACCEPT
{% endfor %}

เมื่อฉันเห็นสิ่งนี้ฉันจะอยู่ในเขตความสะดวกสบายของฉัน การเขียนโปรแกรมเมตาแบบง่าย ๆ สำหรับภาษาที่ประกาศนี้เป็นกระบวนทัศน์ทางทฤษฎีเหมือนกับ BSD Makefiles! สิ่งที่ฉันเกิดขึ้นกับการตั้งโปรแกรมอย่างกว้างขวางข้อความที่ตัดตอนมานี้แสดงให้เราเห็นว่าสัญญาของการทำงานกับไฟล์ YAML เสีย (ดังนั้นฉันจึงไม่สามารถรัน playbooks ของฉันผ่านตัวแยกวิเคราะห์ YAML เช่น ) นอกจากนี้ยังแสดงให้เราเห็นว่า Ansible ต้องถกกันถึงความละเอียดอ่อนของลำดับการประเมิน: เราต้องตัดสินใจว่าตัวแปรจะถูกขยายในส่วน "ที่เปิดเผย" ของภาษาหรือที่ meta-part ของภาษา การเขียนโปรแกรมเชลล์ทำได้ง่ายกว่าไม่มีการเขียนโปรแกรมเมตานอกเหนือจากการจัดหาสคริปต์อย่างชัดเจน evalหรือภายนอก ข้อความที่ตัดตอนมาเทียบเท่ากับสมมติฐานจะเป็น

enumerate_group 'monitoring' | {
  while read host; do
    …
  done
}

ซึ่งความซับซ้อนในการเปรียบเทียบกับตัวแปร Ansible น่าจะยอมรับได้: มันใช้โครงสร้างที่เรียบง่ายปกติและน่าเบื่อจากภาษา

ขั้นตอนการสุ่มเอกสาร 3: กลยุทธ์การทดสอบ

สุดท้ายเราพบสิ่งที่กลายเป็นคุณสมบัติที่น่าสนใจจริงๆแรกของ Ansible:“ ทรัพยากร Ansible เป็นแบบจำลองของรัฐที่ต้องการ ดังนั้นจึงไม่จำเป็นต้องทดสอบว่าเริ่มให้บริการหรือไม่แพคเกจติดตั้งหรืออื่น ๆ Ansible เป็นระบบที่จะทำให้แน่ใจว่าสิ่งเหล่านี้เป็นจริงอย่างชัดเจน แต่จงยืนยันสิ่งเหล่านี้ใน playbooks ของคุณ” ตอนนี้มันเริ่มน่าสนใจเล็กน้อย แต่:

  1. นอกเหนือจากสถานการณ์มาตรฐานจำนวนหนึ่งที่ถูกนำไปใช้อย่างง่ายดายโดยโมดูลที่มีอยู่ฉันจะต้องป้อนบิตที่ใช้ในการทดสอบด้วยตัวเองซึ่งอาจจะเกี่ยวข้องกับคำสั่งเชลล์บางส่วน

  2. การตรวจสอบความสอดคล้องของการติดตั้งอาจไม่เกี่ยวข้องกันมากในบริบทที่มีการใช้รูปแบบเซิร์ฟเวอร์ที่ไม่เปลี่ยนรูปแบบ: โดยทั่วไปแล้วระบบทั้งหมดที่ทำงานอยู่จะถูกวางไข่จากอิมเมจต้นแบบ (เช่นอิมเมจอินสแตนซ์หรืออิมเมจ Docker เป็นต้น) ใหม่แทน

ความกังวลไม่กังวล: การบำรุงรักษา

วัสดุเบื้องต้นจาก Ansibleไม่สนใจคำถามของการบำรุงรักษา โดยพื้นฐานแล้วไม่มีระบบพิมพ์เชลล์สคริปต์จะมีความง่ายในการบำรุงรักษา JavaScript, Lisp หรือ Python: การปรับโครงสร้างที่กว้างขวางสามารถทำได้สำเร็จด้วยความช่วยเหลือของชุดทดสอบอัตโนมัติที่กว้างขวาง ที่กล่าวว่าในขณะที่การเขียนสคริปต์เชลล์เป็นภาษากลางจากการกำหนดค่าระบบและการบำรุงรักษาเกือบทุกภาษาการเขียนโปรแกรมมีส่วนต่อประสานกับเชลล์ ดังนั้นจึงเป็นไปได้โดยสิ้นเชิงที่จะใช้ประโยชน์จากความสามารถในการบำรุงรักษาของภาษาขั้นสูงโดยใช้ภาษาเหล่านี้เพื่อประสานบิตส่วนต่าง ๆ ของการกำหนดค่าเชลล์ สำหรับ OCaml ฉันเขียนRashell ที่เป็นหลักให้รูปแบบการโต้ตอบทั่วไปสำหรับกระบวนการย่อยซึ่งทำให้การแปลสคริปต์การกำหนดค่าเป็น OCaml เป็นเรื่องเล็กน้อย

ด้านข้างจาก Ansible โครงสร้างที่อ่อนแอมากของ playbooks และการปรากฏตัวของคุณสมบัติการเขียนโปรแกรมเมตาทำให้สถานการณ์เลวร้ายอย่างที่มันเป็นสำหรับเชลล์สคริปต์ด้วยจุดลบที่ไม่ชัดเจนว่าจะเขียนหน่วยทดสอบสำหรับ Ansible อย่างไร และอาร์กิวเมนต์ของการแนะนำ ad-hoc ภาษาระดับสูงกว่าไม่สามารถเลียนแบบได้

Idempotency ของขั้นตอนการกำหนดค่า

เอกสารของ Ansible ดึงความสนใจไปที่ความจำเป็นในการเขียนขั้นตอนการกำหนดค่า idempotent แม่นยำยิ่งขึ้นควรเขียนขั้นตอนการกำหนดค่าเพื่อให้ลำดับขั้นตอนabaสามารถทำให้เป็นabได้ง่ายขึ้นนั่นคือเราไม่จำเป็นต้องทำขั้นตอนการกำหนดค่าซ้ำ นี่คือเงื่อนไขที่แข็งแกร่งกว่า idempotency เนื่องจาก Ansible อนุญาตให้ playbooks ใช้คำสั่งเชลล์โดยพลการ Ansible เองจึงไม่สามารถรับประกันได้ว่าสภาพที่แข็งแรงกว่านี้จะได้รับการเคารพ สิ่งนี้ต้องอาศัยวินัยของโปรแกรมเมอร์เท่านั้น


ดูเหมือนว่าคู่มือ ... น่าประทับใจ!
Pierre.Vriens

4
ฉันไม่เห็นด้วยเพิ่มเติม เราใช้ Ansible มานานกว่า 1 ปีแล้วและตอนนี้ใช้คอนเทนเนอร์ Docker สร้างขึ้นด้วยสคริปต์ทุบตีเก่าที่ดี การกำหนดสถานะยังอยู่ในความคิดของฉันโดยคุณลักษณะที่น่าสนใจที่สุด แต่ตามที่คุณพูดถึงแล้ว - มีบริการมากมายที่ไม่มีโมดูล Ansible ที่สอดคล้องกันดังนั้นคุณต้องย้อนกลับไปยังคำสั่งทุบตีอยู่ดี และใช่เรายังใช้เฉพาะคอนเทนเนอร์ที่ไม่เปลี่ยนรูปแบบกับเซิร์ฟเวอร์ดังนั้นการกำหนดสถานะจึงไม่ได้เปรียบในกรณีนี้
Andreas

1
หลังจากใช้ ansible อย่างละเอียดฉันสามารถยืนยันทุกจุดที่ฉันทำนิรนัย Idempotency นั้นเป็นไปได้แต่ไม่สามารถบังคับได้โดย ansible (ดูโมดูล vmware_guest สำหรับพลเมืองที่ไม่ดี) การทำงานกับระบบมหภาคของพวกเขานั้นเป็นความเจ็บปวดที่แท้จริง (รูปแบบ playbook ไม่สามารถกินโหมดไฟล์ Unix ได้หากไม่มีการบำบัด) และสิ่งเดียวที่ดีจริง ๆ คือการโหลดฟังก์ชั่นที่มีประโยชน์ที่เขียนขึ้นเพื่อเข้าใจได้ ดังนั้นหากไม่ใช่เพื่อ Red Hat ที่จะผลักดันผลิตภัณฑ์นั้นฉันไม่สามารถเข้าใจการยอมรับอย่างกว้างขวาง
Michael Le Barbier Grünewald

1
@Andreas ฉันยอมรับว่าคุณยังคงมีหลายกรณีที่คุณต้องถอยกลับไปที่เชลล์หรือโมดูลคำสั่งที่ไม่ได้หมายความว่าการเล่นของคุณไม่สามารถเป็น idempotent ได้ โมดูลหลักเองจะรักษา idempotency โดยเพียงแค่ตรวจสอบว่าควรจะทำอย่างไร คุณสามารถทำสิ่งเดียวกันได้ด้วยตนเองโดยใช้เชลล์หรือโมดูลคำสั่งโดยการรันภารกิจที่ตรวจสอบว่ามีบางสิ่งที่ควรทำและลงทะเบียนเอาต์พุตจากนั้นทำเงื่อนไขกับภารกิจที่สองโดยยึดตามเอาต์พุตจากภารกิจแรก
เลวี

1
@ MichaelLeBarbierGrünewaldฉันต้องเห็นด้วยโดยรวมเมื่อฉันทำงานกับ Ansible มันเป็นความเจ็บปวดที่แท้จริงในการทำงานและการทำงานที่ต้องใช้เวลาหลายสัปดาห์กว่าจะได้รับ playbook เข้าด้วยกันเพื่อเชื่อมต่อกับโครงสร้างพื้นฐานที่ บริษัท คลาวด์ในอดีตของฉัน distro ติดตั้ง LAMP / LEMP หรืออะไรก็ตาม เมื่อสร้างเสร็จแล้วจะช่วยให้เราประหยัดเวลา แต่ใช้เวลาหนึ่งเดือนกว่าจะใช้งานได้ พวกเราไม่มีใครเป็นมาสเตอร์แบชสแครปเตอร์ดังนั้นจึงไม่ใช่ทางเลือก
แดเนียล

22

เมื่อคุณใช้วิธีนี้แม้ว่า Ansible จะมีข้อได้เปรียบโดยธรรมชาติประโยชน์ของการใช้เครื่องมือที่คุ้นเคย (ในกรณีนี้คือการเขียนสคริปต์เชลล์) จะต้องมีน้ำหนักเกิน ฉันไม่คิดว่าจะมีคำตอบที่ชัดเจนสำหรับเรื่องนี้

หากทีมสามารถบรรลุสิ่งที่ Ansible เสนอด้วยกระสุน:

  1. การจัดการการกำหนดค่าที่เปิดเผย, idempotent
  2. การเข้าถึงตัวอย่างข้อมูลที่ใช้ซ้ำได้ (เช่น playbooks) สำหรับบริการยอดนิยมในอุตสาหกรรม
  3. การจัดการการดำเนินการทางไกลที่เชื่อถือได้พร้อมการลองใหม่ตรรกะการหมุน ฯลฯ

จากนั้นพวกเขาอาจจะยึดติดกับสิ่งที่พวกเขารู้

ท้ายที่สุดคุณสามารถใช้ "guards" ใน BASH คุณสามารถค้นหางานที่มีอยู่ของ BASH จำนวนมากได้ที่นั่นเพื่อแก้ปัญหาการกำหนดค่าเซิร์ฟเวอร์ที่หลากหลาย คุณสามารถเข้าใกล้สิ่งที่ Ansible / Salt / Chef-Zero เสนอให้คุณได้โดยไม่ต้องเปลี่ยนโซลูชันที่มีอยู่ทั้งหมดของคุณไปยังเครื่องมือเหล่านั้น

มันเป็นการกระทำที่สมดุลระหว่างแนวโน้มของ NIH (ไม่ได้ประดิษฐ์ขึ้นที่นี่) และสร้างสคริปต์ที่ดีและสร้างผลงานได้ดี

ข้อควรพิจารณาประการสุดท้ายที่ควรคำนึงถึง: เทคโนโลยีของคุณจะวัดกองซ้อนได้อย่างไรเมื่อคุณพยายามสรรหาคนเข้าร่วมทีมมากขึ้น การค้นหาคนที่มีประสบการณ์ Ansible นั้นง่ายกว่าการหาคนที่มีประสบการณ์ในเครื่องมือ CM ของสคริปต์ที่ปลูกในบ้านของคุณ นี่ไม่ใช่การพิจารณาทางเทคนิคอย่างเคร่งครัด แต่เป็นวัฒนธรรมมากกว่า คุณต้องการที่จะเป็นองค์กรที่แปลกประหลาดที่ประดิษฐ์ Ansible ของตัวเองหรือคุณต้องการที่จะเป็นองค์กรที่เหมาะสมที่พบเครื่องมือที่เหมาะสมสำหรับงานหรือไม่ การตัดสินใจเหล่านั้นส่งผลต่อความสามารถของคุณในการวาดพรสวรรค์


4
ชอบคำตอบของคุณ; ฉันจะพูดถึงว่าถ้าทีมทุบตีกำลัง idempotency การจัดการการดำเนินการและนำมาใช้ใหม่โดยทั่วไปการเขียนกรอบการจัดการการกำหนดค่าของตัวเองมีค่าใช้จ่ายที่เกี่ยวข้องและเราทุกคนรู้ว่าจะได้รับน่ารังเกียจจริงๆสำหรับโครงการในบ้าน .
ᴳᵁᴵᴰᴼ

ฉันยังสมัครรับข้อมูลคำตอบของคุณโดยเฉพาะอย่างยิ่งการใส่ประสบการณ์ที่มีอยู่ในยอดคงเหลือ ฉันมีนักวิจารณ์ขนาดเล็กสองคน: อันดับแรกคือidempotency แน่นอนว่านี่เป็นสิ่งสำคัญของระบบการกำหนดค่า แต่เนื่องจากมันเป็นไปได้ที่จะใช้คำสั่งเชลล์ใด ๆ ที่เป็นไปได้ในเพลย์บุ๊คที่สามารถอ่านได้ระบบสามารถกระตุ้นให้ใช้ idempotency ได้ดีที่สุด (เราต้องการสิ่งที่มีประสิทธิภาพมากกว่านั้น idempotency aba = ab .) ประการที่สองการจัดการระยะไกลที่เชื่อถือได้ของการดำเนินการทางไกลอาจไม่เกี่ยวข้องโดยสิ้นเชิงในบางกรณีที่สำคัญเช่นเมื่อใช้รูปแบบเซิร์ฟเวอร์ที่ไม่เปลี่ยนรูปโดยใช้อิมเมจอินสแตนซ์
Michael Le Barbier Grünewald

13

คำตอบข้างต้นครอบคลุมส่วนหนึ่งของมัน แต่พลาดองค์ประกอบที่สำคัญอย่างหนึ่ง: การออกแบบบรรจบกัน ฉันเขียนบางคำเมื่อไม่นานมานี้เกี่ยวกับสิ่งนี้ในบริบทของ Chef ที่https://coderanger.net/thinking/แต่เวอร์ชันสั้นคือสคริปต์ทุบตีเป็นชุดของคำแนะนำในขณะที่ Playbook Ansible (หรือสูตรเชฟ, Salt state, etc) เป็นคำอธิบายของสถานะที่ต้องการ ด้วยการจัดทำเอกสารสถานะที่คุณต้องการแทนที่จะทำตามขั้นตอนที่คุณต้องการเพื่อไปที่นั่นคุณสามารถรับมือกับสถานะเริ่มต้นได้มากขึ้น นี่เป็นหัวใจสำคัญของทฤษฎีสัญญาว่ามีการอธิบายไว้ใน CFEngine มานานแล้วและการออกแบบที่เรา (เครื่องมือจัดการการกำหนดค่า) ได้ทำสำเนาทั้งหมดตั้งแต่นั้นมา

tl; dr Ansible code บอกว่าคุณต้องการ bash code บอกว่าจะทำอะไรได้บ้าง


2
คุณสามารถเพิ่มการอ้างอิงถึง "ทฤษฎีสัญญา" เช่นหนังสือหรือบทความและเนื้อหาที่มีค่าอื่น ๆ ได้ไหมถ้ามีคนต้องการเรียนรู้เกี่ยวกับมัน
Evgeny

1
นั่นคือสิ่งที่ฉันพูดถึงเมื่อคุณบอกว่าคุณสามารถเขียนรหัสทุบตี idempotent (นั่นคือสามารถเริ่มที่จุดใดก็ได้เรียกใช้หลายครั้งและเข้าสู่สถานะที่ต้องการ) แต่คำตอบของคุณทำให้ชัดเจนยิ่งขึ้น
Assaf Lavie

ใช่ idempotence เป็นคุณสมบัติที่สำคัญของระบบคอนเวอร์เจนซ์ แต่ทั้งสองไม่ได้เชื่อมโยงโดยตรงเสมอ :) สำหรับวัสดุในสัญญาทฤษฎี Mark Burgess (ผู้สร้างของ CFEngine) มีหนังสือไม่กี่เล่มฉันสามารถค้นหาลิงก์เมื่อฉันกลับมาที่ แล็ปท็อป
coderanger


3

สิ่งหนึ่งที่ควรค่าแก่การสังเกตว่าคุณจะมีปัญหาน้อยลงในการใช้งานเพลย์บุ๊ค ansible บนโฮสต์ระยะไกลก็เช่นกัน เนื่องจากเป็นเหตุผลหลักในการรัน ansible เมื่อคุณใช้เชลล์สคริปต์คุณยังจำเป็นต้องมีสคริปต์สคริปต์ scp'ing ไปยังโฮสต์ระยะไกล


Ansible ไม่ใช่แค่เสื้อคลุมรอบ ssh ในแง่นี้ใช่ไหม
Evgeny

เป็นหลักใช่ มันทำ ssh, คัดลอกสคริปต์ python จากระยะไกล, และรันมัน นั่นหมายความว่า btw ว่าถ้าโมดูลของคุณขึ้นอยู่กับห้องสมุดไพ ธ อนห้องสมุดนี้ควรจะปรากฏบนเครื่องระยะไกลภายใต้สถานการณ์บางอย่าง
Assaf Lavie

1
และถ้าคุณทำผิดพลาดกับ ssh config คุณจะถูกล็อคจากเครื่องของคุณข้อเสียเปรียบของ push vs pull ปกติ
Tensibai

0

มันเป็นปี 2019 และฉันเพิ่งใช้เวลาสองสามวันไปกับช่วงการเรียนรู้ที่เกี่ยวกับการ ansible และนี่คือความจริงที่แท้จริง: Ansible ไม่คุ้มกับปัญหา

ยังไม่เสร็จสมบูรณ์มันไม่ทำงานบน windows และการรวมกันของ YAML config และข้อความแสดงข้อผิดพลาดที่ทำให้เข้าใจผิดจะทำให้ตาของคุณมีเลือดออก ดูเหมือนว่าเกือบจะน่ากลัวอย่างจงใจและฉันก็หมายความว่าอย่างจริงจัง เห็นได้ชัดว่าเป็นผลิตภัณฑ์ของโครงการด้านนักพัฒนาที่น่าผิดหวัง น่าจะเป็นฮิปสเตอร์

หากคุณไม่ต้องการคุณสมบัติใด ๆ เลยเกินกว่าการตั้งสำรองและคุณจะจัดสรรเฉพาะในระบบปฏิบัติการเดียวเท่านั้น เพื่อเห็นแก่ pities เขียน shell.script ที่เหมาะสม

ณ ตอนนี้โครงการทั้งหมดทำให้ฉันนึกถึงฟอรัม linux ก่อนโดยที่ noobs ได้รับคำสั่งให้ RTFM และดูถูกว่าทำไมมีคนไม่สามารถเขียน GUI สำหรับการตั้งค่ากราฟิก คุณแค่ไม่เข้าใจใช่มั้ย คุณควรติดกับหน้าต่าง ... บางทีฉันอาจจะหาคู่ .. มีความสุข VI-ing

ใช้นักเทียบท่า ในสิ่งที่ชอบ นักเทียบท่านั้นเรียบง่ายและทรงพลัง

แต่ถ้าหากคุณต้องเตรียมแร่ดีบุกไว้ล่วงหน้า ทางเลือกที่แท้จริงคืออะไร?

อืม ... ยังไม่มีเลย แต่ฉันจะสัญญากับคุณว่าหากไม่มีสิ่งที่ดีกว่านี้อีกจะมีในไม่ช้า เพราะไม่ว่าแฟนบอยจะผลักมันแรงแค่ไหนและให้อภัยกับความล้มเหลว ... มันเป็น 5 ใน 10 ของความพยายาม

SCP ขึ้นสคริปต์ทุบตีและช่วยตัวเองให้รอด


ก่อนอื่นมันทำงานบน windows ผ่าน Win_RM หรือ SSH ไวยากรณ์ที่สองของ yaml นั้นดีมากและสามารถสร้างขึ้นโดยทางโปรแกรมและในขณะที่ข้อผิดพลาดบางอย่างสามารถทำให้เข้าใจผิดได้ไม่ต่างจาก Java หรือ Python puking ความกล้าในระหว่างการยกเว้น ประการที่สามความคิดที่ว่าเพียงแค่ SCPing สคริปต์ไปยังเซิร์ฟเวอร์นั้นไม่สามารถใช้ได้ในสภาพแวดล้อมคลาวด์ที่มีไดนามิก เซิร์ฟเวอร์ไหน เซิร์ฟเวอร์สามารถเปลี่ยนแปลงได้ทุกวัน Ansible ช่วยให้ปลั๊กอินสินค้าคงคลังที่กำหนดค่าได้อย่างง่ายดายด้วยวิธีง่าย ๆ ในการจัดกลุ่มเซิร์ฟเวอร์และกำหนดตัวแปรให้ ฉันไม่คิดว่า Ansible ไม่คุ้มค่า ฉันคิดว่ามันเกินความจริงสำหรับสภาพแวดล้อมของคุณ
เลวี

@ เลวี่ใช่ ความผิดทั้งหมดของฉันที่ ansible ไม่ได้ทำงานบน windows มีการกำหนดค่าที่ไม่มี schema และมีเส้นโค้งการเรียนรู้ที่ยาวนานขึ้นและค่าใช้จ่ายในการบำรุงรักษาที่สูงขึ้นกว่าวิธีการใด ๆ ของ bespoke ในการบรรลุภารกิจเดียวกัน
Richard

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

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