Ansible Tutorial – Directory layout and Example

Posted In Configuration management - By Tum. On Tuesday, July 26th, 2016 With 0 Comments

ansible-logo
Ansible เป็น configuration management ที่เป็น agentless ซึ่งไม่ต้อง require agent เหมือนพวก puppet, Chef, Salt การทำงานของ ansible จะทำงานผ่าน SSH ดังนั้นแค่เครื่องสามารถ remote ด้วย SSH ได้ก็ทำงานได้

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

Directory Layout

ตัวอย่างข้างล่างคือ Top level ของ directory และไฟล์ต่างๆ

จากโครงสร้าง folder ข้างบนจะสามารถแยกอธิบายเป็นส่วนๆได้ตามนี้

Inventory file

ใช้ define hostname และ group ของ hostname เพื่อให้ ansible ทราบว่าจะไปรันที่ server ไหนบ้าง จากตัวอย่างโครงสร้าง file และ folder ด้านบนมีการกำหนด inventory file ไว้ 3 ไฟล์ด้วยกันคือ production, staging และ dev เพื่อเวลาเรียกใช้งานสามารถระบุ environment ที่ต้องการรันได้เลย

ตัวอย่างการรันด้วยการระบุ inventory file

ตัวอย่าง inventory file

Group Variables

เป็นการกำหนด variable สำหรับ group ต่างๆที่ได้ define ไว้ที่ inventory file โดยมีข้อกำหนดว่า

  1. ชื่อไฟล์ต้องเป็นชื่อ group บน inventory file
  2. อยู่ใน folder group_vars

ตัวอย่างเช่น กลุ่ม server ที่ thailand ให้ใช้ ntp server ที่ไทย

Host Variables

เป็นการกำหนด variable สำหรับราย host ที่ได้ถูก define ไว้ที่ inventory file

ตัวอย่างเช่น กำหนดให้ db-th-1.ezylinux.com รัน mysql ด้วย port 3307

Roles

ใน ansible เราสามารถแยกงานต่างๆ ออกเป็น role เพื่อให้ง่ายต่อการใช้งาน แก้ไข และนำกลับมาใช้กับงานใหม่ ตัวอย่างเช่น ตั้งชื่อ folder ว่า common ใน roles หมายถึงว่า role ชื่อ common และภายใน folder common ก็มี folder ต่างๆ ตามตัวอย่าง

** role สามารถมี dependency ซึ่งจะช่วยให้สามารถกำหนดลำดับการทำงานของ role ได้

Tags:

Leave a comment

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

*