มาเขียน ansible playbook กัน (part 1)

Nattawat Songsom
3 min readOct 18, 2021

--

ansible เป็น software ที่ช่วยในการ automate การ setup server โดยวันนี้เราจะมาลองเขียน ansible playbook กัน

โดยก่อนจะเริ่มกัน เราจะ setup ansible control node ด้วย environment ดังนี้

  • มี non-root account ที่สามารถเข้าผ่าน ssh key ได้ ซึ่งสามารถเตรียมได้ตาม link นี้
  • ติดตั้ง ansible และเตรียม inventory file ของ ansible host เรียบร้อยแล้ว ( ทดสอบ ping ด้วย ansible ผ่าน ) ซึ่งสามารถเตรียมได้ตาม link นี้

โอเค มาเริ่มกัน

ก่อนอื่น เราจะสร้าง folder กันก่อน ตามคำสั่งดังนี้

cd ~
mkdir ansible-practice
cd ansible-practice

โดยเราจะ copy inventory file ที่เราเขียนไว้ตาม link นี้ มาใส่ใน folder นี้ โดยใช้คำสั่ง

cp /etc/ansible/hosts ~/ansible-practice/inventory

จากนั้น สร้าง playbook file โดยใช้คำสั่ง

nano playbook-01.yml

โดยเราจะเขียน file ตามนี้

โดยจาก file playbook สามารถแบ่ง field ต่างๆ ได้ดังนี้

  • hosts: all เพื่อให้ทุกๆ hosts ใน inventory ทำ tasks ที่กำหนด
  • tasks: เป็น array ลำดับคำสั่ง โดยเราสามารถกำหนด name ของแค่ละ task ได้
  • debug: ใช้ในการ debug โดยเราจะใช้ msg เป็น comment เมื่อเสร็จ task นั้นๆ

จากนั้น run playbook โดยใช้คำสั่ง

ansible-playbook -i <inventory-file-path> <playbook-file-path>-u <username-ansible-host>

จะได้ผลลัพธ์ดังนี้

การกำหนด variable ใน playbook

สามารถกำนหนดตัวแปรในรูปแบบ key: value ผ่าน field vars ได้ดังนี้

โดยการเข้าถึงตัวแปรจะใช้ syntax {{ key }} นั่นเอง

การกำหนดเงื่อนไข ใน playbook

สามารถกำหนดเงื่อนไขผ่าน field when ได้ดังนี้

เมื่อรันจะได้ผลลัพธ์ตามนี้

จะเห็นได้ว่า task1 ถูกข้ามไป เนื่องจาก condition fail

นอกจากนี้ เรายังสามารถนำผลลัพธ์จาก task ก่อนหน้า มาเป็นเงื่อนไขของ task ต่อๆไปได้ด้วย โดยใช้ field register ตามนี้

โดยเราจะลองรัน ls ~/test_file เพื่อดูว่ามีไฟล์รึเปล่า ถ้าไม่มีจะสร้าง และถ้ามีจะ show message ว่ามีนั่นเอง

โดย syntax แต่ละอัน ทำงานดังนี้

  • command ทำการรัน command ที่กำหนด
  • register เก็บผลลัพธ์จาก command มาใส่ในตัวแปร
  • ignore_errors แม้ command errors ให้ทำ task ต่อไปอยู่ดี
  • file path และ state เป็นการนำ command ที่เกี่ยวกับ file system มาเขียนในรูปแบบที่อ่านง่ายขึ้น โดยตัว command จะกลายเป็น state นั่นเอง
  • when: <variable> is succeeded หรือ failed ใช้ในการกำหนดเงื่อนไขการทำงานของ task

เมื่อรันครั้งแรกจะได้ผลลัพธ์ดังนี้

และเมื่อรันครั้งที่สองจะได้ผลลัพธ์ดังนี้

เนื่องจาก ls ไม่ได้ error แล้วนั่นเอง

การวน loop ใน playbook

เราสามารถใช้ field loop และ item ในการวนลูปได้ดังนี้

โดย loop จะใช้ในการกำหนดสมาชิกของลูป และ item จะใช้ในการเข้าถึงสมาชิกแต่ละตัวของ loop นั่นเอง

โอเค part 1 ประมาณนี้ก่อนแล้วกันนะ part ต่อไปเราจะมาลองลง package และเขียน template กัน

ref: How To Write Ansible Playbooks | DigitalOcean

--

--

No responses yet