Tuesday, January 21, 2025

[Ansible] Lesson 6 – Run Your First Command and Playbook

-

Bài viết đề cập đến cách cài đặt và sử dụng Ansible để thực hiện các tác vụ cấu hình mạng. Sau đây là các bước cơ bản:

  • Cài đặt Ansible Để cài đặt Ansible, truy cập trang chủ Ansible (https://www.ansible.com/), tìm đến phần Download và chọn phiên bản phù hợp với hệ điều hành của bạn.
  • Thực hiện một lệnh cấu hình mạng bằng tay Chọn một thiết bị mạng (ví dụ: router Cisco) và thực hiện lệnh cấu hình bằng tay, ví dụ:
Router(config)# interface gigabitethernet0/1
Router(config-if)# ip address 10.0.0.1 255.255.255.0
Router(config-if)# no shutdown
  • Thực hiện lệnh cấu hình mạng bằng Ansible Tạo một file inventory (ví dụ: mynetwork.yml) chứa thông tin về các thiết bị mạng:
all:
  hosts:
    router1:
      ansible_host: 192.168.0.1
      ansible_user: myusername
      ansible_password: mypassword
      ansible_network_os: ios

Sau đó, tạo một file playbook (ví dụ: config.yml) với nội dung sau:

- name: Configure interfaces on router
  hosts: router1
  gather_facts: no

  tasks:
    - name: Configure interface gigabitethernet0/1
      ios_config:
        lines:
          - interface gigabitethernet0/1
          - ip address 10.0.0.1 255.255.255.0
          - no shutdown
      become: yes
      become_method: enable

Trong playbook này, ta sử dụng module ios_config để cấu hình interface cho router. Ta sử dụng become để đảm bảo được quyền thực thi lệnh với đặc quyền cao hơn.

  • Thực thi playbook Để thực thi playbook, ta sử dụng lệnh sau:
ansible-playbook -i mynetwork.yml config.yml

Output

PLAY [all] **********************************************************************************************

TASK [Create a user on a network device using the cli_command module] ************************************
changed: [router1]

PLAY RECAP **********************************************************************************************
router1                    : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Ở đây, Ansible đã thực thi một task để tạo một user trên thiết bị router1. Kết quả trả về cho thấy rằng task đã thay đổi được trạng thái của thiết bị (changed=1), nghĩa là user đã được tạo thành công.

Lệnh này sẽ thực thi playbook config.yml trên các thiết bị được định nghĩa trong file inventory mynetwork.yml. Sau khi chạy xong, interface gigabitethernet0/1 của router sẽ được cấu hình với địa chỉ IP là 10.0.0.1 và subnet mask là 255.255.255.0.

Tổng kết, bằng cách sử dụng Ansible và các module hỗ trợ cấu hình mạng, ta có thể tự động hóa việc cấu hình, quản lý và giám sát các thiết bị mạng một cách hiệu quả và tiết kiệm thời gian.

Thu thập thông tin thiết bị bằng Ansible

Trong Ansible, có thể sử dụng từ khóa “gather_facts” để thu thập thông tin về các thiết bị mạng trong các cặp host đã được định nghĩa trong file inventory. Với các module *_facts (như arista.eos.eos_facts), bạn có thể sử dụng tham số “gather_network_resources” để thu thập một phần của cấu hình thiết bị, thay vì tải toàn bộ cấu hình của thiết bị. Thông tin thu thập được có thể sử dụng cho các task tiếp theo trong quá trình quản lý mạng.

- name: Gather facts from Cisco IOS device
  hosts: cisco_ios
  gather_facts: yes

  tasks:
    - name: Collect facts from Cisco IOS device
      cisco.ios.ios_facts:
        gather_network_resources:
          - interfaces
          - vlans
          - ipv4_interfaces
        gather_subset: hardware
      register: cisco_ios_facts

Output

TASK [debug] ****************************************************************************************************
ok: [cisco_ios] => {
    "cisco_ios_facts": {
        "ansible_net_version": "17.03.01",
        "interfaces": {
            "GigabitEthernet1": {
                "bandwidth": 1000000,
                "description": "Test Interface",
                "duplex": "Full",
                "ipv4": {
                    "10.10.10.1": {
                        "address": "10.10.10.1",
                        "prefix_length": 24
                    }
                },
                "line_protocol": "up",
                "macaddress": "00:11:22:33:44:55",
                "mtu": 1500,
                "speed": 1000000,
                "type": "CSR vNIC"
            }
        },
        "ipv4_interfaces": {
            "GigabitEthernet1": {
                "10.10.10.1/24": {
                    "broadcast": "10.10.10.255",
                    "netmask": "255.255.255.0",
                    "network": "10.10.10.0"
                }
            }
        },
        "vendor": "Cisco"
    }
}

Trong ví dụ này, chúng ta sử dụng module cisco.ios.ios_facts để thu thập các thông tin cấu hình từ một thiết bị Cisco IOS. Bằng cách sử dụng đối số gather_network_resources, chúng ta chỉ thu thập các thông tin liên quan đến các giao diện, VLAN và các giao diện IPv4. Đối số gather_subset cho biết rằng chúng ta chỉ muốn thu thập các thông tin liên quan đến phần cứng của thiết bị. Kết quả thu thập được được lưu trữ trong biến cisco_ios_facts, và chúng ta có thể in ra kết quả đó bằng cách sử dụng module debug.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories