Huawei Cloud Engine Ansible


Введение

Я работал с серией коммутаторов Huawei Cloud Engine для центра обработки данных, и одна из замечательных вещей, с которой я познакомился, это эффективное использование Ansible+Netconf для конфигурирования сетевых устройств Legacy вместо метода проб и ошибок Python+SSH, при котором вам приходилось предугадывать задержку сеанса SSH и обрабатывать вывод консоли с помощью Regex, который хоть и очень настраиваемый, но когда дело доходит до производственных сред, ваши руководители предпочтут проверенные и испытанные технологии, поддерживаемые самим производителем.

что мы будем обсуждать

Здесь я поделюсь шагами, с которых мне удалось начать свой путь в настройке коммутаторов Cloud Engine с помощью Ansible.

Шаги

Сначала я бы посоветовал вам настроить среду сообщества EVE-NG или среду GNS3, чтобы вы могли протестировать свои плейбуки (Ansible) перед их развертыванием в производственной среде.

1- Установка EVE-NG:

Для моего развертывания я буду использовать EVE NG, вы можете найти страницу загрузки (https://www.eve-ng.net/index.php/download/), скачайте Community версию, так как она не требует розничной лицензии.

Вы можете скачать ее в виде ISO для установки или OVF для прямого запуска, я запускаю ее на машине ESXI.

После загрузки и установки EVE-NG, вы должны иметь возможность получить доступ к машине eve, используя SSH 1st, чтобы настроить ее, SSH пользователь по умолчанию «root» и пароль по умолчанию «eve».

Когда вы войдете в SSH, вы пройдете ряд запросов на настройку DNS, NTP и так далее, после чего вы сможете войти на веб-портал EVE-NG, чтобы начать использовать программу эмуляции.

На веб-портале по умолчанию используется имя пользователя «admin» и пароль «eve».

2- Образ EVE Huawei Cloud Engine :

Для работы с EVE необходимо использовать предварительно настроенный образ, для нашего устройства, пожалуйста, перейдите по следующей ссылке, чтобы загрузить Huawei CE12800 VM, который мы будем использовать:
https://forum.huawei.com/enterprise/en/run-ce12800-ne40e-in-eve-ng/thread/653457-861

3- Наша лабораторная установка:

После того, как вы выполнили приведенное выше руководство по добавлению образа Huawei Cloud Engine в EVE, мы сможем создать мою лабораторную установку:

A) Машина Ansible

Я создал машину ESXi CentOS для запуска сборника пьес Ansible, вы можете установить локально на свой ноутбук или машину, если хотите, мы сможем получить доступ к нашему коммутатору Huawei из нашей локальной домашней сети.

B) На EVE Portal

  • Добавьте новую лабораторию
  • Перейдите в левую часть узла, «Добавить объект -> Узел -> поиск Huawei, вы найдете Cloud Engine 12800», нажмите на него, вам понадобится 2 ГБ оперативной памяти/памяти, зарезервированной для каждого коммутатора, чтобы запустить его:

  • Далее, чтобы подключить коммутатор к нашей локальной сети, чтобы мы могли получить доступ к нему с нашего локального ноутбука или в моем случае с моей CentOS VM, вам нужно перейти к «Добавить объект -> Сеть -> Управление (Cloud0) «, и подключить один из интерфейсов коммутатора к облаку (например: GE1/0/0), и щелкните правой кнопкой мыши на коммутаторе, затем выберите запустить:

C) Настройка Huawei Cloud Engine для Netconf:

  • Наведите курсор на устройство в EVE, чтобы увидеть IP и номер порта, вы можете подключиться к устройству с помощью консоли:

‘$ telnet 192.168.1.109 32769’.

  • На устройстве вставьте следующую конфигурацию, чтобы добавить пользователя и запустить службу Netconf:
# Switch Configuration
system
!
interface GE 1/0/0
undo portswitch
undo shutdown 
ip address 192.168.1.130 24
quit
!
ip route-static 0.0.0.0 0 192.168.1.1 
!
netconf
protocol inbound ssh port 830
!
ssh user client001
!
aaa
local-user client001 password irreversible-cipher SetUesrPasswd@123
local-user client001 service-type ssh
quit
commit
!
ssh server cipher aes128_ctr aes256_ctr aes192_ctr aes128_gcm aes256_gcm
ssh user client001 authentication-type password
ssh user client001 service-type snetconf
!
snetconf server enable
!
commit
!
save
Вход в полноэкранный режим Выход из полноэкранного режима
  • Чтобы подтвердить, что вы можете достичь сетевого подключения, выполните ping вашего шлюза и вашего хостингового устройства Ansible:
<CloudEngine>ping -c 5 192.168.1.1 
  PING 192.168.1.1: 56  data bytes, press CTRL_C to break
    Reply from 192.168.1.1: bytes=56 Sequence=1 ttl=64 time=5 ms
    Reply from 192.168.1.1: bytes=56 Sequence=2 ttl=64 time=3 ms
    Reply from 192.168.1.1: bytes=56 Sequence=3 ttl=64 time=4 ms
    Reply from 192.168.1.1: bytes=56 Sequence=4 ttl=64 time=2 ms
    Reply from 192.168.1.1: bytes=56 Sequence=5 ttl=64 time=3 ms

  --- 192.168.1.1 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 2/3/5 ms

<CloudEngine>ping -c 5 192.168.1.102 
  PING 192.168.1.102: 56  data bytes, press CTRL_C to break
    Reply from 192.168.1.102: bytes=56 Sequence=1 ttl=64 time=2 ms
    Reply from 192.168.1.102: bytes=56 Sequence=2 ttl=64 time=3 ms
    Reply from 192.168.1.102: bytes=56 Sequence=3 ttl=64 time=3 ms
    Reply from 192.168.1.102: bytes=56 Sequence=4 ttl=64 time=4 ms
    Reply from 192.168.1.102: bytes=56 Sequence=5 ttl=64 time=1 ms

  --- 192.168.1.102 ping statistics ---
    5 packet(s) transmitted
    5 packet(s) received
    0.00% packet loss
    round-trip min/avg/max = 1/2/4 ms
Войти в полноэкранный режим Выход из полноэкранного режима
  • Чтобы проверить Netconf перед переходом к Ansible, с вашего ноутбука или виртуальной машины хостинга Ansible, выполните следующую команду, вы должны получить длинный XML вывод, это означает, что мы готовы для Ansible :$ ssh client001@192.168.1.130 -p 830 netconf.

4- Настройка машины Ansible:

Ниже приведены шаги для машины CentOS

A)Создайте виртуальную среду Python:

На момент написания статьи рекомендуется использовать Python 3.8 и выше.

Создайте виртуальную среду, в моем случае я использовал Python 3.10:

Активируйте созданную виртуальную среду, вы увидите, что по умолчанию используется та версия Python, с которой вы ее создали.

Модуль Ansible, который мы будем использовать, является частью коллекции net_commons:

(huawei_venv)$ python --version
Python 3.10.5

# Install Ansible and needed libraries for the lab
(huawei_venv)$ sudo /usr/local/bin/python3.10  -m pip install ansible ansible-core ncclient jxmlease xmltodict ansible-pylibssh

# Check Ansible version 
(huawei_venv)$ ansible --version
ansible [core 2.13.3]
  config file = None
  configured module search path = ['/home/amroashram/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.10/site-packages/ansible
  ansible collection location = /home/amroashram/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.10.5 (main, Aug  8 2022, 17:01:37) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
  jinja version = 3.1.2
  libyaml = True

# Double confirm that the Netcommons collection is installed 
(huawei_venv)$ ansible-galaxy collection install ansible.netcommon
Войдите в полноэкранный режим Выход из полноэкранного режима

B) Создадим простую инвентаризацию и Playbook для запуска на нашем текущем коммутаторе:

Inverntory.yaml

# inventory.yaml
all:
  # ----- Variables for the whole inventory 
  vars:
    ansible_network_os: community.network.ce
    ansible_user: client001
    ansible_password: "SetUesrPasswd@123"
    ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
    # log_path: ansible.log 

  # ----- Group names and relations to hosts 
  children:
    network:
      children:
        huawei:
          hosts:
            leaf_1:
              ansible_host: 192.168.1.130

Войти в полноэкранный режим Выйти из полноэкранного режима

Playbook.yaml : будет добавлять vlan (20) к коммутатору

# Playbook.yaml
- name: test
  hosts: leaf_1
  connection: ansible.netcommon.netconf
  gather_facts: no

  tasks:
  - name: add_VLAN
    community.network.ce_vlan:
      vlan_id: 120
      name: WEB_Vlan
      description: "hello"
Войти в полноэкранный режим Выйти из полноэкранного режима

Запустить плейбук на инвентаризации:

Вывод, подтверждающий, что изменения были сделаны следующим образом:

PLAY [test] ***********************************************************************************************************************************************
skipping: no hosts matched

PLAY RECAP ************************************************************************************************************************************************

(huawei_venv) [amroashram@centos_proxy huawei_cloud_engine]$ ansible-playbook -i huawei_cloud_engine_inventory.yaml huawei_cloud_engine_playbook.yaml 

PLAY [test] ***********************************************************************************************************************************************

TASK [add_VLAN] *******************************************************************************************************************************************
changed: [leaf_1]

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

# On switch : 
<CloudEngine>display vlan 
VID          Ports                                                          
--------------------------------------------------------------------------------
   1         UT:GE1/0/1(D)      GE1/0/2(D)      GE1/0/3(D)      GE1/0/4(D)      
                GE1/0/5(D)      GE1/0/6(D)      GE1/0/7(D)      GE1/0/8(D)      
                GE1/0/9(D)                                                      
 120     

VID  Type     Status  Property  MAC-LRN STAT    BC  MC  UC  Description
--------------------------------------------------------------------------------
   1 common   enable  default   enable  disable FWD FWD FWD VLAN 0001           
 120 common   enable  default   enable  disable FWD FWD FWD hello    
Вход в полноэкранный режим Выход из полноэкранного режима

Дополнительные возможности Ansible

Чтобы проверить дальнейшее использование коллекции netcommon с Cloud Engine, вам доступны следующие модули для выполнения изменений на коммутаторах:

  • Удобная команда, если вы не знаете, что делает модуль или как его использовать в Playbook, вы всегда можете использовать :$ ansible-doc community.network.ce_vlan.
  • Модули: смотрите ссылку (https://docs.ansible.com/ansible/latest/network/user_guide/platform_ce.html) для актуальных модулей .community.network.ce_aaa_servercommunity.network.ce_aaa_server_hostcommunity.network.ce_aclcommunity.network.ce_acl_advancecommunity.network.ce_bfd_globalcommunity.network.ce_bfd_sessioncommunity.network.ce_bfd_viewcommunity.network.ce_bgpcommunity.network. ce_bgp_afcommunity.network.ce_bgp_neighborcommunity.network.ce_bgp_neighbor_afcommunity.network.ce_dldpcommunity.network.ce_dldp_interfacecommunity.network.ce_eth_trunkcommunity.network.ce_evpn_bd_vniccommunity. network.ce_file_copycommunity.network.ce_info_center_debugcommunity.network.ce_info_center_globalcommunity.network.ce_info_center_logcommunity.network.ce_info_center_trapcommunity.network. ce_interfacecommunity.network.ce_interface_ospfcommunity.network.ce_ip_interfacecommunity.network.ce_lacpcommunity.network.ce_link_statuscommunity.network.ce_lldpcommunity.network.ce_lldp_interfacecommunity. network.ce_mlag_configcommunity.network.ce_netconfcommunity.network.ce_ntpcommunity.network.ce_ospfcommunity.network.ce_ospf_vrfcommunity.network.ce_rebootcommunity.network.ce_sflowcommunity. network.ce_snmp_communitycommunity.network.ce_snmp_target_hostcommunity.network.ce_snmp_usercunity.network.ce_static_routecommunity.network.ce_static_route_bfdcommunity.network.ce_switchportcommunity. network.ce_vlanccommunity.network.ce_vrfcommunity.network.ce_vrf_afcommunity.network.ce_vrf_interfacecommunity.network.ce_vrrpcommunity.network.ce_vxlan_tunnelcommunity.network.ce_vxlan_vap

Ссылки :

  • Установка EVE_NG : https://www.eve-ng.net/index.php/documentation/installation/virtual-machine-install/
  • Huawei Cloud Engine EVE Image : https://forum.huawei.com/enterprise/en/run-ce12800-ne40e-in-eve-ng/thread/653457-861
  • Huawei Cloud Engine Netconf Configuration : https://support.huawei.com/enterprise/en/doc/EDOC1100198823/4b902677/example-for-establishing-communication-between-the-nms-and-a-device-using-netconf
  • Cloud Engine Netcommons Collection Doc : https://docs.ansible.com/ansible/latest/network/user_guide/platform_ce.html
  • Python 3.10 veneer : https://docs.python.org/3/library/venv.html

Оцените статью
devanswers.ru
Добавить комментарий