Network Automation with Ansible (Part 3)

Pichan Pratummal
2 min readMay 17, 2020

--

ในตอนนี้เราจะเริ่มทำการ เริ่มทำ configuration ด้วยตัว Ansible กันจริงๆ แล้ว แต่ก่อนที่จะเริ่มเขียน Playbook กัน นั้นเราต้องจูน parameter บางตัวเพื่อให้เหมาะกับการใช้งาน Network Automation

โดย Default ถ้าไม่ตั้งค่าเลยตัว Ansible จะถูกตั้งมาให้ใช้กับพวก Server Linux เป็นหลัก

อย่างแรกเลย แนะนำให้ทำการสร้าง Folder เฉพาะสำหรับเก็บ File Ansible Playbook เพื่อให้ง่ายต่อการแก้ไขพวก Variable ในตอนหลัง โดยใช้ command

mkdir Ansible-Lab
cd Ansible-Lab

เนื่องจาก Ansible นั้นทำงานบน Linux เป็นหลัก ดังนั้น อยากแนะนำว่าเราควรศึกษาพวก Cli Basic บน linux เช่น mkdir, cd, rm เป็นต้น เพื่อช่วยให้เราทำงานได้สะดวกมากขึ้นครับ

ansible.cfg

โดย Default ตัว ansible จะเรียกใช้งาน file ทั้งหลายไม่ว่าจะเป็น Inventory หรือว่า Variable ต่างๆ จาก /etc/ansible/ansible.cfg ซึ่งไม่เหมาะกับการใช้งาน Network Automation ที่เรากำลังจะเริ่มใช้งานกัน ดังนั้น เราต้องสร้าง ansible.cfg ตัวใหม่ขึ้นมาใน directory ของเราเอง ตามตัวอย่างข้างล่างครับ

vim ansible.cfg
ansible.cfg

ตัว Paramater ที่สำคัญสำหรับการใช้งาน Network Automation คือ

  • inventory = ./inventory เป็นการบอกว่าให้ใช้ file inventory ที่ชื่อ “inventory” จาก directory ปัจจุบันที่เราอยู่ (./ ใน linux คือ folder ที่เรากำลังใช้งานอยู่)
  • remote_user คือ user ที่จำการ login ไปยังอุปกรณ์ปลายทาง (โดย default ถ้าไม่ใส่ ansible จะใช้ user ที่เรา login CentOS)
  • host_key_checking คือการระบุให้ ansible ข้ามขั้นตอนการ check certificate ของ Switch หรือ Router เมื่อเราทำการ login ครั้งแรกผ่าน SSH จำเป็นมากในกรณีที่เราไม่ได้ใช้ Cert ที่เป็น Public (เหมือนเวลาเราเปิด web https แล้วขึ้นเตือนว่าไม่ปลอดภัย)

Parameter ส่วนที่เหลือนั้น ไม่จำเป็น ในกรณีที่เราใช้งานสำหรับอุปกรณ์ Network ทั่วไป (ยกเว้น become ซึ่งคืออย่างเดียวกับคำสั่ง enable บน Cisco)

สำหรับใครที่ใช้ Linux ใหม่ๆ และยังไม่ชินกับ vim ซึ่งเป็น Text Editor ที่ติดมากับ Linux สามารถลงโปรแกรมชื่อ nano ซึ่งใช้งานง่ายกว่าได้ครับ (ด้วย command : sudo dnf nano)

Let’s Start!!

ในตัวอย่างที่จะใช้งาน จะเป็นอุปกรณ์ Juniper และ Cisco ที่ run อยู่บน EVE-NG ตามรูปข้างล่างครับ

อย่างแรกเลย ถ้ายังจำกันได้จาก Network Automation Part 1 เราต้องสร้าง File inventory เพื่อระบุ IP หรือ FQDN ของอุปกรณ์ Network

อย่าลืมว่าเราต้องสร้าง File inventory อยู่ใน directory ที่เรากำหนดไว้ใน ansible.cfg

เราสามารถทดสอบได้ว่า File Inventory ที่เราสร้างนั้นถูกต้องหรือไม่ด้วย command

ansible-inventory --graph

IP ใน inventory ตัวอย่างคือ ip บน interface 0/0 ซึ่งเป็น Out Of Band ครับ

จริงๆ แล้วด้วย file inventory นั้นถ้าอุปกรณ์ปลายทางเป็น Server Linux ก็สามารถเริ่มเขียน Playbook ได้เลย แต่เนื่องจากอุปกรณ์ Network แต่ละยี่ห้อมีวิธีการ login ไม่เหมือนกัน เราเลยต้องมีการตั้ง parameter เฉพาะตัวแยกกัน

ในกรณีเรามีอุปกรณ์ยี่ห้อเดียวจะตั้ง variable พวกนี้ใน ansible.cfg เลยก็ได้

Group Variables

ในตัวอย่างของเราเนื่องจากอุปกรณ์มี ทั้ง Juniper (Group name: Junos) และ Cisco (Group name: IOS) วิธีการตั้ง Variable สำหรับแต่ละกลุ่มของอุปกรณ์คือ สร้าง directory “group_vars” และสร้าง file ชื่อเดียวกับ Group names ดังตัวอย่างข้างล่างครับ

Variable สำหรับ Junos
Variable สำหรับ IOS

ในการใช้งานจริงไม่แนะนำให้ใช้ Password แบบ Clear Text แต่แนะนำให้ใช้ function vault ในการ encrypt

Set Up SSH Service บนอุปกรณ์ Network

บนอุปกรณ์ Juniper Junos ให้เราเปิด Service SSH และ NETCONF ตามข้างล่างนี้

set system services ssh
set system services netconf ssh

ส่วนบน Cisco IOS ให้เปิด Service SSH ตามข้างล่างนี้

line vty 0 4
privilege level 15
login local
transport input telnet ssh

อย่าลืมสร้าง username และ password ที่ตรงกับ Group Variables ใน Ansible ด้วย

สำหรับ ในตอนต่อไปเราจะเริ่มสร้าง Playbook เพื่อทำการ Configure อุปกรณ์ และติดตามกันใหม่ใน

→ Network Automation with Ansible (Part 4)

--

--