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

总体介绍

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下载。

image.png

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)

#配置一个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 username@172.16.200.6 

执行第一条测试命令:

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

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

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标签下
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
---

- 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}}

#执行操作
 ansible-playbook vlan.yml 

成功结果:


image.png

推荐阅读更多精彩内容