Ansible 批量管理华为 CE 交换机

注:本文为 "Ansible 管理华为 CE 交换机" 相关文章合辑。


使用 CloudEngine - Ansible 批量管理华为 CE 交换机

wsf535 IP 属地:贵州

2018.02.05 15:26:05

总体介绍

Ansible 是一个开源的自动化运维工具,AnsibleWorks 成立于 2012 年,由自动化工具 Cobbler 及 Func 的开发者 Michael DeHaan 创建,基于 Python 开发,集合了众多运维工具(puppet、cfengine、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。Ansible 能够安装在包括 Linux、BSD、Mac OS X 等平台。

Ansible 的 CloudEngine 模块是一个开源的,社区支持的应用程序。使用 CloudEngine 模块,可实现对华为数据中心 CE 系列交换机的自动化部署和配置。 您可以从 https://github.com/HuaweiSwitch/CloudEngine-Ansible 下载。

CloudEngine-Ansible 环境安装:

官方 git 地址:https://github.com/HuaweiSwitch/CloudEngine-Ansible

测试最新版本与 2.3 版本都有点问题,(需要加 export ANSIBLE_HOST_KEY_CHECKING=false 这个参数,不然连接会报错) 功能正常的是 2.0 版本

以下是在 centos 7 上的安装:

环境准备:

安装 ansible, 因 2.0 版本支持的 ansible 是 2.2 所以直接安装 ansible2.2, 通过 pip 方式安装

安装 python-devel (不安装,在安装 ansible 会报错)

复制代码
yum install python-devel

安装 pip

复制代码
wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py
pip install ansible==2.2

安装 ncclient

复制代码
 pip install ncclient

下载安装 ce-ansible:

下载

复制代码
wget https://github.com/HuaweiSwitch/CloudEngine-Ansible/archive/v0.2.0.zip

解压

复制代码
unzip v0.2.0.zip

cd CloudEngine-Ansible-0.2.0/
sh install.sh

交换机端的配置:(使用的是 ce5855)

bash 复制代码
# 配置一个 SSH 用户

aaa
local-user wsf535 password irreversible-cipher $1a$}") FR_EZ!*$q9Y/I (iUOXbg~g!!cLuOe9:-OV=;XA*vD9NQ:tk5$
 local-user wsf535 service-type ssh
 local-user wsf535 level 15
#
ssh user wsf535 authentication-type password
ssh user wsf535 service-type all
ssh authorization-type default aaa
#
user-interface vty 0 4
 authentication-mode aaa
 protocol inbound ssh

# 开启 netconf(关键,不开启会导致配置命令失败)

snetconf server enable

使用及排错:

如果 centos 系统没连接过交换机会报以下错

复制代码
An exception occurred during task execution. 
To see the full traceback, use -vvv. The error was: IOError: [Errno 2] 
No such file or directory: '/root/.ssh/known_hosts'

解决方法:手动 SSH 连接一下

复制代码
ssh [email protected] 

执行第一条测试命令:

bash 复制代码
ansible -m ce_command -a "commands='display vlan summary' transport='cli' host=172.16.200.6 port=22 username=wsf535 password=ABC@2017" localhost --connection local

如果成功返回则安装成功:

csharp 复制代码
localhost | SUCCESS => {

    "changed": false, 
    "stdout": [
        "Number of static VLAN: 10\nVLAN ID: 1 16 to 20 22 25 to 26 99 \n\nNumber of dynamic VLAN: 0\nVLAN ID: \n\nNumber of service VLAN: 31\nVLAN ID: 4064 to 4094"
    ], 
    "stdout_lines": [
        [
            "Number of static VLAN: 10", 
            "VLAN ID: 1 16 to 20 22 25 to 26 99", 
            "", 
            "Number of dynamic VLAN: 0", 
            "VLAN ID:", 
            "", 
            "Number of service VLAN: 31", 
            "VLAN ID: 4064 to 4094"
        ]
    ], 
    "warnings": []
}

使用 playbook

定义主机,我的测试环境只有这一台,如果有多台加到 cloudengine 标签下

csharp 复制代码
cat /etc/ansible/hosts 
[all:vars]
ansible_connection='local'
username='wsf535'
password='ABC@2017'
ansible_ssh_port=22
[cloudengine]
172.16.200.6

新建一下 vlan.yml 文件,以下内容表示创建 vlan 50

csharp 复制代码
---
- hosts: cloudengine
  gather_facts: no
  vars:
    test_vlan: 50
  tasks:  

  - ce_vlan: vlan_id={{test_vlan}} name="WEB" host={{inventory_hostname}} username={{username}} password={{password}} port={{ansible_ssh_port}}

执行操作

bash 复制代码
ansible-playbook vlan.yml 

成功结果:

最后编辑于 :2018.03.08 17:01:40


使用华为 ansible CE 模块管理华为交换机

fengbingjin 于 2020-08-16 02:21:46 发布

华为 ansible CE 模块管理华为交换机

华为自己开源了 CE 交换机 ansible 管理模块,用 ansible 管理交换机那是相当的方便,现在 ansible CE 模块数量已经到了 60 多个,ansible 脚本已经能满足大部分的自动运维管理工作了

测试环境

  1. VMware 虚拟机,ubuntu20.04-lts;

  2. 华为 ESNP 模拟器,V100R300C00SPC100;

安装部署

python 配置

ubuntu 虚拟机安装部署好后,系统自带 python3,需要安装 pip3,再通过 pip3 安装 ncclient 模块

复制代码
apt install python3-pip
pip3 install ncclient

我的虚拟机上两条命令就完成 python 的配置,在另外一台树莓派上 ansible 脚本没有运行成功,报错 python 没有安装 paramiko 模块,还有某些依赖包没有安装,不一一列举了,百度一下就能解决

ansible

ansible 安装配置很简单,直接用 apt 命令安装就行,且自带华为的 CE 模块,不需要去华为的 Github 上去找源码安装,GitHub 上的已经三年没更新,bug 一堆

复制代码
apt install ansible

配置 ansible 的配置文件 /etc/ansible/ansible.cfg,这里要把 host_key_cheking = False 取消注释,原因是不注释掉,如果本机从来没有 ssh 登录交换机,ansible 检查用户目录下.ssh/known_hosts 文件,发现没有交换机的 key 值,不会执行命令脚本

/etc/ansible/hosts 文件,配置登录参数和交换机清单

all:vars

ansible_connection=local

ansible_ssh_user=huawei

ansible_ssh_pass=Changeme_123

ansible_ssh_port=22

cloudengine

192.168.2.10

ansible playbook 脚本测试

脚本文件 ce.yml,测试 ce_interface 模块,批量打开交换机的端口

下图可见 1-9 口原处于 shutdown 状态

ce.yml 文件如下,作用是打开 2-9 端口

yaml 复制代码
---
- name: CloudEngine ce_interface test
  hosts: cloudengine
  connection: local
  gather_facts: no
  vars:
    cli:
      host: "{{ inventory_hostname }}"
      port: "{{ ansible_ssh_port }}"
      username: "{{ ansible_ssh_user }}"
      password: "{{ ansible_ssh_pass }}"
      transport: cli
  tasks:
  - name: "Admin up interfaces"
    ce_interface:
        interface: "{{ item }}"
        admin_state: up
        provider: "{{ cli }}"
    with_items:
            - ge1/0/2
            - ge1/0/3
            - ge1/0/4
            - ge1/0/5
            - ge1/0/6
            - ge1/0/7
            - ge1/0/8
            - ge1/0/9

执行 ansible-playbook ce.yml,结果如下

去交换机上看结果,2-9 端口都处于 up 状态了

再用 dis c c c 命令查看交换机配置变更历史

实验成功!


Ansible 之管理华为交换机配置

恒悦 sunsite 于 2021-05-12 15:15:40 发布

一、需求说明

信息系统日常运维中除了服务器,我们还有很多网络设备,比如路由器、交换机、防火墙等。虽然从专业线上分类由主机工程师、网络工程师分别管理,但是在很多小单位可能配置的岗位并不充足,往往是一人身兼数个角色。很荣幸,Ansible 也支持网络设备的管理,本文介绍如何使用 Ansible 管理华为交换机,目前只支持管理 CE 系列交换机。

环境说明:

  • Ansible 主控机操作系统:centos 8.0.1905

  • Ansible 版本:2.9.21

  • python 版本:3.6.13

  • 交换机型号:CE6800

  • 交换机软件版本:V200R005C10SPC607B607

二、配置步骤

1、查看华为相关的模块

如下所示跟华为相关的模块有 68 个,均以 ce 开头

root@centos8 \~\]# ansible-doc -l \|grep -i huawei \|wc -l 68 \[root@centos7 \~\]# ansible-doc -l \|grep -i huawei ce_aaa_server Manages AAA server global configuration on HUAWEI CloudEngine switches ce_aaa_server_host Manages AAA server host configuration on HUAWEI CloudEngine switches ce_acl Manages base ACL configuration on HUAWEI CloudEngine switches ... hwc_network_vpc Creates a Huawei Cloud VPC hwc_smn_topic Creates a resource of SMNTopic in Huaweicloud Cloud

2、使用 ce_command 模块查看交换机信息

  • 查看交换机路由信息

    使用命令:[root@centos8 ~]# ansible -m ce_command -a "commands='display ip routing-table' transport='cli' host=192.168.200.100 port=22 username=admin1 password=123456" localhost --connection local

执行后查看的路由信息如下:

  • 查看 vlan 信息

    使用命令:[root@centos8 ansible]# ansible -m ce_command -a "commands='display vlan sum' transport='cli' host=192.168.200.100 port=22 username=admin1 password=123456" localhost --connection local

3、配置交换机组的 inventory 文件

root@centos8 ansible\]# cat switchs \[hw

192.168.200.100 ansible_ssh_port=22 ansible_ssh_user=admin1 ansible_ssh_pass=123456

4、配置 playbook 文件

创建备份 交换机配置 的 playbook,备份到目录 /tmp/backup

root@centos7 ansible\]# vim ce.yml

复制代码
[root@centos8 ansible]# cat ce.yaml 
- name: CE switch command test.
  hosts: hw
  connection: local
  gather_facts: no
  vars:
    cli:
      host: "{{ inventory_hostname }}"
      port: "{{ ansible_ssh_port }}"
      username: "{{ ansible_ssh_user }}"
      password: "{{ ansible_ssh_pass }}"
      transport: cli
  tasks:
  - name: configurable backup path
    ce_config:
      lines: sysname {{ inventory_hostname }}
      provider: "{{ cli }}"
      backup: yes
      backup_options:
        filename: backup.cfg
        dir_path: /tmp/backup

5、执行 playbook 任务

root@centos8 ansible\]# ansible-playbook -i switchs ce.yaml ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/ae484c1db2b061ece686569a93da5136.png)

三、QA

1、执行 ansible-playbook 时报错 No module named 'ncclient'

root@centos8 ansible\]# pip3 install ncclient

2、执行 playbook 时报错 "Unable to decode JSON from response to exec_command (**). Received 'None'.

写在最后,尝试了各种 python 版本、操作系统版本都是报这个错,估计与 eNSP 模拟器 ce6800 有关。折腾了 3 天了,只能放弃了。直接执行是成功的,执行 play-book 报错没有收到交换机的任何信息。


Ansible Network 的基本用法,包括配置管理、状态采集的教程

玩机科技社已于 2023-03-31 18:40:28 修改

Ansible Network 是 Ansible 的一个模块,专门用于管理网络设备,比如交换机、路由器、防火墙等。使用 Ansible Network,我们可以通过编写 Ansible Playbook 来实现自动化的配置管理和状态采集。下面将介绍 Ansible Network 的基本用法。

  1. 安装 Ansible 和 Ansible Network

首先需要安装 Ansible 和 Ansible Network。如果已经安装了 Ansible,则可以使用以下命令安装 Ansible Network:

复制代码
$ pip install ansible [core,base,netcommon,network]
  1. 编写 Ansible Playbook

Ansible Network 的 Playbook 与 Ansible 的普通 Playbook 类似,但是需要指定网络设备的类型和连接方式。下面是一个简单的 Ansible Network Playbook,用于配置一个 Cisco 交换机的 VLAN:

cobol 复制代码
---
- name: Configure VLAN on Cisco switch
  hosts: switches
  gather_facts: no
  connection: network_cli
  vars:
    vlan_id: 10
    vlan_name: test_vlan
  tasks:
    - name: Create VLAN
      ios_vlan:
        vlan_id: "{{ vlan_id }}"
        vlan_name: "{{ vlan_name }}"
        state: present

该 Playbook 包含以下几个关键部分:

  • hosts:指定要管理的网络设备,可以使用主机名或 IP 地址。

  • gather_facts:关闭事实收集,因为网络设备可能无法返回系统信息。

  • connection:指定连接方式,network_cli 表示使用 SSH 连接到网络设备。

  • vars:定义变量,这里定义了 VLAN 的 ID 和名称。

  • tasks:具体的任务列表,这里只有一个任务,用于创建 VLAN。

  1. 运行 Ansible Playbook

运行 Ansible Network Playbook 与运行普通的 Ansible Playbook 类似,只需要使用 ansible-playbook 命令并指定 Playbook 文件即可。例如,运行上述 Playbook 可以使用以下命令:

复制代码
$ ansible-playbook -i inventory.ini playbook.yaml

其中,inventory.ini 是一个 Ansible Inventory 文件,包含要管理的网络设备的列表。

  1. 状态采集

    除了配置管理,Ansible Network 还可以用于状态采集,例如获取网络设备的端口状态、路由表等信息。下面是一个简单的 Ansible Network Playbook,用于获取一个 Cisco 路由器的接口状态:

cobol 复制代码
---
- name: Collect interface status from Cisco router
  hosts: routers
  gather_facts: no
  connection: network_cli
  tasks:
    - name: Get interface status
      ios_command:
        commands:
          - show interfaces status
      register: result
    - name: Print interface status
      debug:
        var: result.stdout_lines

该 Playbook 包含以下几个关键部分:

  • hosts:指定要管理的网络设备,可以使用主机名或 IP 地址。

  • gather_facts:关闭事实收集,因为网络设备可能无法返回系统信息。

  • connection:指定连接方式,network_cli 表示使用 SSH 连接到网络设备。

  • 以下是了解网络设备管理工具 Ansible Network 的基本用法,包括配置管理、状态采集的教程:

    Ansible Network 是 Ansible 官方提供的一款用于管理网络设备的工具。它基于 Ansible 的核心技术,提供了专门用于管理网络设备的模块和插件,可以用来自动化配置、部署和管理网络设备。

    一、配置管理

  • 安装 Ansible Network

  • 在使用 Ansible Network 之前,需要安装 Ansible 和 Ansible Network。可以通过以下命令安装:

    crystal 复制代码
    $ sudo pip install ansible
    $ sudo pip install ansible-base
    $ sudo pip install ansible-core
    $ sudo pip install ansible-network
  • 配置 Ansible Inventory

  • Ansible Inventory 是 Ansible 用来管理主机清单的工具。使用 Ansible Network 时,需要将网络设备的管理 IP 地址加入到 Inventory 中。

    可以手动编辑 Inventory 文件,也可以使用动态 Inventory 来自动生成 Inventory 文件。以下是手动编辑 Inventory 文件的示例:

cobol 复制代码
[network]
10.0.0.1
10.0.0.2
[network:vars]
ansible_network_os=ios
ansible_user=admin
ansible_password=123456
ansible_connection=network_cli

在 Inventory 文件中,可以定义多个组,每个组中包含多个主机。同时还可以为每个组和主机定义变量,以便在后续的任务中使用。

在以上示例中,定义了一个名为 network 的组,包含两个主机 10.0.0.1 和 10.0.0.2。同时为该组定义了一些变量,如 ansible_network_os 表示网络设备的操作系统为 IOS,ansible_user 表示登录网络设备的用户名为 admin,ansible_password 表示登录密码为 123456,ansible_connection 表示连接方式为 network_cli。

  • 编写 Ansible Playbook

  • 在 Ansible 中,使用 Playbook 来描述一组任务。以下是一个简单的 Ansible Playbook 示例,用于将一个名为 config.cfg 的配置文件上传到网络设备上:

    cobol 复制代码
    ---
    - name: upload config file
      hosts: network
      tasks:
        - name: copy config file to network device
          network_cli:
            command_string: "copy tftp://10.0.0.3/config.cfg startup-config"
            authorize: yes
            authorize_password: 123456

    以上 Playbook 中,使用 network 组来指定目标设备。在 tasks 中,使用 network_cli 模块来执行命令,将 TFTP 服务器上的 config.cfg 文件拷贝到目标设备的 startup-config 文件中。其中,authorize 表示在执行命令前需要进行认证,authorize_password 表示认证密码为 123456。

  • 执行 Ansible Playbook

  • 使用以下命令执行 Ansible Playbook:

    复制代码
    $ ansible-playbook upload_config.yml

执行过程中,Ansible 会连接到目标设备,并将 config.cfg 文件上传到设备上。执行完成后,可以在目标设备上检查配置文件是否已经生效。


via: