EOS 平台选项

Arista EOS 专辑支持多种连接。本页详细介绍了每种连接在 Ansible 中的工作原理及使用方法。

可用连接

CLIeAPI
协议SSHHTTP(S)
凭据在存在 SSH 密钥/ ssh-agent 时使用 SSH 密钥/ssh-agent,在使用密码时接受 -u my_user -k 参数存在 HTTPS 证书时使用 HTTPS 证书
间接访问通过堡垒机(跳转主机)经由 web 代理
连接设置ansible_connection: ansible.netcommon.network_cliansible_connection: ansible.netcommon.httpapi
enable 模式(权限提升)受支持的:与 ansible_become_method: enable 一起使用 ansible_become: true受支持的:httpapi 会使用与 ansible_become_method: enable 一起的 ansible_become: true
返回的数据格式stdout[0].stdout[0].messages[0].

ansible_connection: local 已被弃用。要使用 ansible_connection: ansible.netcommon.network_cliansible_connection: ansible.netcommon.httpapi 代替。

在 Ansible 中使用 CLI

示例 CLI group_vars/eos.yml

ansible_connection: ansible.netcommon.network_cli
ansible_network_os: arista.eos.eos
ansible_user: myuser
ansible_password: !vault...
ansible_become: true
ansible_become_method: enable
ansible_become_password: !vault...
ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"'
  • 若咱们使用的是 SSH 密钥(包括 ssh-agent),则可以移除 ansible_password 配置项;
  • 若咱们直接访问的主机(不通过堡垒机/跳转主机),则可移除 ansible_ssh_common_args 配置项;
  • 若咱们通过堡垒机/跳转主机访问咱们的主机,则咱们不能在 ProxyCommand 指令中包含咱们的 SSH 密码。为防止秘密外泄(例如在 ps 的输出中),SSH 不支持使用环境变量提供密码。

示例 CLI 任务

- name: Backup current switch config (eos)
  arista.eos.eos_config:
    backup: yes
  register: backup_eos_location
  when: ansible_network_os == 'arista.eos.eos'

在 Ansible 中使用 eAPI

启用 eAPI

使用 eAPI 连接交换机前,咱们必须启用 eAPI。要在某个新交换机上使用 Ansible 启用 eAPI,就要经由 CLI 连接,用到 arista.eos.eos_eapi 模组。如同上面 CLI 示例中一样,设置 group_vars/eos.yml,然后运行类似下面的 playbook 任务:

---
- hosts: eos-sw
  gather_facts: no

  tasks:
    - name: Enable eAPI
      arista.eos.eos_eapi:
        enable_https: yes

译注

  • 运行此 playbook 需要使用 -bK 命令行开关进行权限提升;

  • 需要更多操作才能启用 HTTPS 的 eAPI。否则会报出错误:"Could not connect to https://eos-sw:443/command-api: [Errno 111] 连接被拒绝"

  • 在 Arista EOS 交换机上启用 eAPI 后,会报出错误:"Could not connect to https://eos-sw:443/command-api: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] ssl/tls alert handshake failure (_ssl.c:1000)"

  • 在 Arista EOS 交换机上成功启用 HTTPS 的 eAPI 后,可直接访问 https://eos-sw/,但因为使用的自签名证书,而会报出证书错误。要往分组/主机加入变量 ansible_httpapi_ciphers: AES256-SHA:DHE-RSA-AES256-SHA:AES128-SHA:DHE-RSA-AES128-SHA 解决此问题;

  • 需要 ansible_useransible_password 变量。否则报出错误 "HTTP Error 401: Unauthorized"。示例配置如下。

    eos-sw:
      ansible_host: eos-sw
      ansible_network_os: arista.eos.eos
      ansible_connection: ansible.netcommon.httpapi
      ansible_httpapi_use_ssl: true
      ansible_httpapi_validate_certs: false
      ansible_user: admin
      ansible_password: my_secret
      ansible_ssh_private_key_file: /home/hector/.ssh/id_ecdsa
      ansible_httpapi_ciphers: AES256-SHA:DHE-RSA-AES256-SHA:AES128-SHA:DHE-RSA-AES128-SHA

参考:

咱们可在 arista.eos.eos_eapi 模组文档中,找到启用 HTTP/HTTPS 连接的更多选项。

启用 eAPI 后,就要修改咱们的 group_vars/eos.yml 以使用 eAPI 连接。

示例 eAPI group_vars/eos.yml

ansible_connection: ansible.netcommon.httpapi
ansible_network_os: arista.eos.eos
ansible_user: myuser
ansible_password: !vault...
ansible_become: true
ansible_become_method: enable
proxy_env:
  http_proxy: http://proxy.example.com:8080
  • 如果咱们是直接访问主机(而非通过 web 代理),咱们可移除 proxy_env 配置项;
  • 如果咱们通过某个使用 https 的 web 代理服务器访问主机,则要将 http_proxy 更改为 https_proxy

示例 eAPI 任务

- name: Backup current switch config (eos)
  arista.eos.eos_config:
    backup: yes
  register: backup_eos_location
  environment: "{{ proxy_env }}"
  when: ansible_network_os == 'arista.eos.eos'

在这个示例中,group_vars 中定义的 proxy_env 变量,被传递给任务中模组的 environment 选项。

警告

切勿以明文方式存储密码。我们建议使用 SSH 密钥验证 SSH 连接。Ansible 支持 ssh-agent 来管理 SSH 密钥。如果必须使用密码来验证 SSH 连接,建议使用 Ansible Vault 对密码进行加密。

(End)

Last change: 2025-03-22, commit: 91d7c58

小额打赏,赞助 xfoss.com 长存......

微信 | 支付宝

若这里内容有帮助到你,请选择上述方式向 xfoss.com 捐赠。