eos_vlan и ansible, «команда cli» vlan 777 «ошибка: недопустимая команда» - PullRequest
0 голосов
/ 17 июня 2019

Я новичок в Ansible and Networking, однако я начал работу в сетевой компании, где мы начали использовать Ansible для автоматизации конфигураций сетевых узлов. Устройства Juniper не показывают проблем, однако переключатели Arista создают проблемы при попытке передать простые команды.

Итак, я пытаюсь создать vlans на коммутаторах Arista, используя Ansible. Я использую соединение eapi с использованием https (конфиденциальные данные заменены на xxx):

show management api http-commands
Enabled:        Yes
HTTPS server:   running, set to use port 443
HTTP server:    shutdown, set to use port 80
VRF:            MGMT
Hits:           318
Last hit:       766 seconds ago
Bytes in:       25241
Bytes out:      3985523
Requests:       40
Commands:       80
Duration:       79.082 seconds
   User       Hits       Bytes in       Bytes out    Last hit        
---------- ---------- -------------- --------------- --------------- 
   xxx       40         25241          3985523      766 seconds ago 

URLs                                  
------------------------------------- 
Vlan2       : https://xxx

вот моя задача:

     - name: create vlan
       eos_vlan:
          vlan_id: "{{ vlan_id }}"
          name: "{{ vlan_descr }}"
          state: present
          authorize: yes
          auth_pass: "{{ auth_password }}"
          transport: "{{ transport }}"
          username: "{{ username }}"
          password: "{{ password }}"
          validate_certs: false
          ssh_keyfile: "{{ ssh_keyfile }}"

Как видите, я использую пароль авторизации, все переменные хранятся в другом файле. Проблема в том, что я получаю эту ошибку:

changed": false, "code": 1002, "msg": "CLI command 2 of 2 'vlan 777' failed: invalid command"

Этот сервер работает на:

     CPE OS Name: cpe:/o:centos:centos:7
     Kernel: Linux 3.10.0-957.21.2.el7.x86_64
     Architecture: x86-64

Использование Ansible:

  config file = /opt/ansible/ansible.cfg
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.6/site-packages/ansible
  executable location = /usr/bin/ansible
  python version = 3.6.8 (default, May  2 2019, 20:40:44) [GCC 4.8.5 20150623 (Red Hat 4.8.5-36)]

Версия Arista:

Arista DCS-7050QX-32-F
Hardware version:    02.00
Software image version: 4.13.5F
Architecture:           i386

Я пробовал это в тестовой среде, используя одни и те же задачи, но разные ANSI-образы виртуальных машин и образ arista:

Arista vEOS
Hardware version:    
Serial number:       
Software image version: 4.21.1.1F
Architecture:           i386
Internal build version: 4.21.1.1F-10146868.42111F

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

Я полагаю, это может быть связано с тем, что у пользователя нет привилегий, но я включил пароль администратора, и у пользователей eapi и ansible есть роли администратора сети.

Вот более подробный вывод:

fatal: [x.x.x.x]: FAILED! => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "code": 1002,
    "invocation": {
        "module_args": {
            "aggregate": null,
            "associated_interfaces": null,
            "auth_pass": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "authorize": true,
            "delay": 10,
            "host": "x.x.x.x",
            "interfaces": null,
            "name": null,
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "port": 443,
            "provider": {
                "auth_pass": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                "authorize": true,
                "host": "x.x.x.x",
                "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                "port": 443,
                "ssh_keyfile": "/root/.ssh/id_rsa.pub",
                "timeout": 45,
                "transport": "eapi",
                "use_proxy": true,
                "use_ssl": true,
                "username": "eapi",
                "validate_certs": false
            },
            "purge": false,
            "ssh_keyfile": "/root/.ssh/id_rsa.pub",
            "state": "present",
            "timeout": 45,
            "transport": "eapi",
            "url_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "url_username": "eapi",
            "use_ssl": true,
            "username": "eapi",
            "validate_certs": false,
            "vlan_id": 777
        }
    },
    "msg": "CLI command 2 of 2 'vlan 777' failed: invalid command"
}

Еще одна вещь, на которую стоит обратить внимание: если я использую vlan, который уже существует, и не включаю описание (чтобы не было внесено никаких изменений), Ansible возвращает успех:

ok: [x.x.x.x] => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    },
    "changed": false,
    "commands": [],
    "invocation": {
        "module_args": {
            "aggregate": null,
            "associated_interfaces": null,
            "auth_pass": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "authorize": true,
            "delay": 10,
            "host": "x.x.x.x",
            "interfaces": null,
            "name": null,
            "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "port": 443,
            "provider": {
                "auth_pass": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                "authorize": true,
                "host": "x.x.x.x",
                "password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
                "port": 443,
                "ssh_keyfile": "/root/.ssh/id_rsa.pub",
                "timeout": 45,
                "transport": "eapi",
                "use_proxy": true,
                "use_ssl": true,
                "username": "eapi",
                "validate_certs": false
            },
            "purge": false,
            "ssh_keyfile": "/root/.ssh/id_rsa.pub",
            "state": "present",
            "timeout": 45,
            "transport": "eapi",
            "url_password": "VALUE_SPECIFIED_IN_NO_LOG_PARAMETER",
            "url_username": "eapi",
            "use_ssl": true,
            "username": "eapi",
            "validate_certs": false,
            "vlan_id": 777
        }
    }
}

Может ли кто-нибудь указать мне на то место, где я должен искать ответы? Или какие-либо предложения вообще? Я был бы очень признателен за это.

Спасибо

1 Ответ

0 голосов
/ 20 июня 2019

Ответ был в моем вопросе все время: оказывается, это было связано с версией программного обеспечения:

   Arista DCS-7050QX-32-F 
   Hardware version: 02.00 
   Software image version: 4.13.5F 
   Architecture: i386

Вам нужно как минимум 4.15.5F ту запустить с Ansible 2.8.1

...