Lab: Cấu Hình Thiết Bị Cisco IOS với Ansible ios_config Module
🎯 Mục tiêu bài lab
Trong bài lab này, chúng ta sẽ:
🛠️ Mô hình thử nghiệm
📁 Chuẩn bị File Inventory
File inventory:
[ios] csr1kv1 node_id=1 csr1kv2 node_id=2 csr1kv3 node_id=3 [all:vars] ansible_user=cisco ansible_ssh_pass=cisco ansible_network_os=ios
📁 Tạo các biến host_vars và group_vars
host_vars/csr1kv1.yml
node_id: 1
host_vars/csr1kv2.yml
node_id: 2
host_vars/csr1kv3.yml
node_id: 3
group_vars/all.yml
ansible_user: cisco ansible_ssh_pass: cisco ansible_network_os: ios snmp_community: cisco_corse snmp_location: CA_HQ snmp_contact: JOHN_SMITH
📄 Playbook: core_config.yml
---
- name: MAKE CONFIG CHANGES USING HOST_VARS AND GROUP_VARS
hosts: all connection: network_cli gather_facts: no tasks: - name: CONFIGURE HOSTNAME USING HOST_VARS ios_config: commands: "hostname nycr-{{ node_id }}" - name: CONFIGURE SNMP COMMUNITY USING GROUP_VARS ios_config: commands: - snmp-server community {{ snmp_community }} RO - snmp-server location {{ snmp_location }} - snmp-server contact {{ snmp_contact }} - name: CONFIGURE STATIC ROUTE (OPTIONAL) ios_config: lines: - ip route 172.16.1.0 255.255.255.0 172.16.2.1
🔄 Thay thế bằng file cấu hình src (nếu có)
Ví dụ:
- name: DEPLOY CONFIG FROM FILE ios_config: src: cisco_ios.cfg
▶️ Chạy Playbook
ansible-playbook -i inventory core_config.yml -v
✅ Kết quả mong đợi
TASK [CONFIGURE HOSTNAME USING HOST_VARS] changed: [csr1kv1] => {"commands": ["hostname nycr-1"]} changed: [csr1kv2] => {"commands": ["hostname nycr-2"]} changed: [csr1kv3] => {"commands": ["hostname nycr-3"]} TASK [CONFIGURE SNMP COMMUNITY USING GROUP_VARS] changed: [csr1kv1] => {"commands": ["snmp-server community cisco_corse RO", ...]} ... PLAY RECAP: csr1kv1: ok=2 changed=2 ... csr1kv2: ok=2 changed=2 ... csr1kv3: ok=2 changed=2 ...
❓ Câu hỏi kiểm tra sau Lab
📌 Gợi ý thực chiến
📣 Lời kết
Bài lab này là bước đầu tiên trong hành trình tự động hóa cấu hình mạng với Ansible. Bạn có thể mở rộng để quản lý VLAN, OSPF, ACL, QoS và nhiều hơn nữa — tất cả đều bằng Playbook và YAML.
👉 Nếu bạn thấy bài lab này hữu ích, hãy chia sẻ về cộng đồng Automation / DevNet để nhiều anh em cùng áp dụng nhé!
🎯 Mục tiêu bài lab
Trong bài lab này, chúng ta sẽ:
- Sử dụng module ios_config để cấu hình hostname và SNMP cho các thiết bị Cisco IOS.
- Sử dụng biến từ host_vars và group_vars để cá nhân hóa cấu hình theo từng thiết bị.
- Triển khai một static route hoặc cấu hình toàn bộ bằng file cấu hình sẵn (src).
- Kiểm tra sự thay đổi cấu hình thực tế trên thiết bị bằng chế độ -v.
🛠️ Mô hình thử nghiệm
- 3 thiết bị Cisco CSR (csr1kv1, csr1kv2, csr1kv3) được quản lý bởi Ansible thông qua SSH.
- Ansible Control Node sử dụng network_cli để kết nối.
- Các cấu hình được áp dụng bao gồm hostname, SNMP và định tuyến tĩnh.
📁 Chuẩn bị File Inventory
File inventory:
[ios] csr1kv1 node_id=1 csr1kv2 node_id=2 csr1kv3 node_id=3 [all:vars] ansible_user=cisco ansible_ssh_pass=cisco ansible_network_os=ios
📁 Tạo các biến host_vars và group_vars
host_vars/csr1kv1.yml
node_id: 1
host_vars/csr1kv2.yml
node_id: 2
host_vars/csr1kv3.yml
node_id: 3
group_vars/all.yml
ansible_user: cisco ansible_ssh_pass: cisco ansible_network_os: ios snmp_community: cisco_corse snmp_location: CA_HQ snmp_contact: JOHN_SMITH
📄 Playbook: core_config.yml
---
- name: MAKE CONFIG CHANGES USING HOST_VARS AND GROUP_VARS
hosts: all connection: network_cli gather_facts: no tasks: - name: CONFIGURE HOSTNAME USING HOST_VARS ios_config: commands: "hostname nycr-{{ node_id }}" - name: CONFIGURE SNMP COMMUNITY USING GROUP_VARS ios_config: commands: - snmp-server community {{ snmp_community }} RO - snmp-server location {{ snmp_location }} - snmp-server contact {{ snmp_contact }} - name: CONFIGURE STATIC ROUTE (OPTIONAL) ios_config: lines: - ip route 172.16.1.0 255.255.255.0 172.16.2.1
🔄 Thay thế bằng file cấu hình src (nếu có)
Ví dụ:
- name: DEPLOY CONFIG FROM FILE ios_config: src: cisco_ios.cfg
Chú ý: lines/commands và src không được dùng chung trong một task (mutually exclusive).
▶️ Chạy Playbook
ansible-playbook -i inventory core_config.yml -v
✅ Kết quả mong đợi
TASK [CONFIGURE HOSTNAME USING HOST_VARS] changed: [csr1kv1] => {"commands": ["hostname nycr-1"]} changed: [csr1kv2] => {"commands": ["hostname nycr-2"]} changed: [csr1kv3] => {"commands": ["hostname nycr-3"]} TASK [CONFIGURE SNMP COMMUNITY USING GROUP_VARS] changed: [csr1kv1] => {"commands": ["snmp-server community cisco_corse RO", ...]} ... PLAY RECAP: csr1kv1: ok=2 changed=2 ... csr1kv2: ok=2 changed=2 ... csr1kv3: ok=2 changed=2 ...
❓ Câu hỏi kiểm tra sau Lab
Câu hỏi: Hai tham số nào có thể được sử dụng để triển khai cấu hình với ios_config?
✅ A. src
✅ B. commands (alias của lines)
❌ config
❌ command
❌ source
✅ A. src
✅ B. commands (alias của lines)
❌ config
❌ command
❌ source
📌 Gợi ý thực chiến
- Khi quản lý hàng trăm router/switch, chia nhỏ cấu hình thành nhiều task và gom biến về group_vars/host_vars giúp tái sử dụng và bảo trì dễ dàng hơn.
- Sử dụng src: khi bạn cần deploy toàn bộ cấu hình mẫu chuẩn (Golden Config).
- Dùng commands: để thay đổi linh hoạt theo từng nhóm/thiết bị.
📣 Lời kết
Bài lab này là bước đầu tiên trong hành trình tự động hóa cấu hình mạng với Ansible. Bạn có thể mở rộng để quản lý VLAN, OSPF, ACL, QoS và nhiều hơn nữa — tất cả đều bằng Playbook và YAML.
👉 Nếu bạn thấy bài lab này hữu ích, hãy chia sẻ về cộng đồng Automation / DevNet để nhiều anh em cùng áp dụng nhé!