• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 关于我们

11-网络管理和监控配置指导

目录

11-Ansible配置

本章节下载 11-Ansible配置  (277.46 KB)

11-Ansible配置


1 Ansible

1.1  Ansible简介

Ansible是一种对大规模主机进行远程部署的自动化工具,这里主机是指任何可以通过SSH登录的设备。通过部署Ansible,系统可以实现大批量、自动化的进行集群配置和应用部署等系统运维操作。并且Ansible使用灵活、部署参数可复制,可以极大地减少运维人员的重复劳动,提高运维效率。

Ansible基于Python开发,使用SSH(Secure Shell)协议与网络设备建立连接,以实现对大规模设备的集中配置管理。

1.1.1  Ansible网络架构

图1-1所示,Ansible系统由管理端和设备端组成。

图1-1 Ansible网络架构

 

·     管理端(Manager):指安装了Ansible环境的主机。关于Ansible软件的安装,请参见Ansible的官方网站。

Ansible管理端支持的远程配置包括创建VLAN等,具体以Comware V7 Python库中支持的业务模块为准。

·     设备端(Device):设备端仅需支持作为SSH服务器,无需安装任何客户端代理软件。设备端和管理端建立SSH连接后,自动执行管理端下发的命令。

H3C设备支持作为Ansible系统的设备端。

1.1.2  Ansible基本概念

图1-2 Ansible基本概念

 

图1-2所示,Ansible在使用时涉及如下概念:

·     Playbook:Ansible的自动化脚本,在Playbook中包含了需要对设备端下发的所有配置,以YAML格式编写,按照脚本中文本的内容顺序进行执行。Playbook可以避免管理端大规模重复输入指定,是实现Ansible自动化的重要部件。

·     Play:针对一组主机的所有操作组成一个Play。在一个Playbook中可以包含多个Play。

·     Task:描述了要在目标主机上执行的操作和配置的基本单元。每一个具体的操作都对应一个Task,例如,为设备创建VLAN 10对应一个Task,为设备的VLAN 10接口配置IP地址对应另一个Task。在一个Play中可以包含多个Task。

·     Module(模块):模块可以是Python脚本或Bash脚本,在Task中调用模块后,Ansible才可以对目标主机执行特定的操作,并返回结果。模块可以在Playbook中被调用,也可以在管理终端中通过命令行直接被调用,推荐通过Playbook离开调用模块,以避免重复执行命令。

·     主机清单(Hosts Inventory):主机清单是Ansible重要的一类配置文件,用来告诉Ansible需要管理哪些主机,并且把这些主机按需分类。在Playbook中编写的执行操作的目标主机需要在主机清单中存在定义。

1.1.3  Ansible工作机制

Ansible的工作机制为:

(1)     在管理端上安装Ansible组件,并且将需要设备端执行的操作编写在Playbook中。

(2)     管理端和设备端建立SSH连接。管理端为SSH客户端,设备端为SSH服务器。

(3)     管理端通过执行Playbook来给单个或多个设备下发配置命令。

(4)     设备端自动执行管理端下发的命令来完成配置。

1.2  Ansible配置准备

配置Ansible功能前,用户需要先配置如下功能:

·     手工配置设备的系统时间与管理端一致,或配置设备与管理端之间使用NTP/PTP进行时钟同步,否则可能导致双方无法互通。关于时钟同步的详细配置请参见“基础配置指导”中的“设备管理”,以及“网络管理和监控配置指导”中的“NTP”和“PTP”。

·     在设备上配置SSH服务器功能,使管理端能通过SSH连接向设备下发命令。关于SSH服务器的详细配置,请参见“安全配置指导”中的“SSH”。

1.3  Ansible典型配置举例

1.3.1  Ansible基本组网配置举例

1. 组网需求

图1-3所示,设备开启SSH服务器功能,Ansible管理端通过SSH连接来远程配置设备。

2. 组网图

图1-3 Ansible组网图

 

3. 配置设备端

(1)     配置设备与管理端的IP地址,确保它们之间路由可达。

(2)     配置设备与管理端之间使用手工方式或NTP/PTP进行时钟同步。

(3)     配置设备作为SSH服务器。

# 生成本地密钥对。关于本地密钥对的详细配置,请参见“安全配置指导”中的“SSH”。

# 创建本地用户abc,配置该用户的密码,授权用户角色为network-admin,用户可以使用的服务为SSH、HTTP和HTTPS。

<Device> system-view

[Device]local-user abc

[Device-luser-manage-abc] password simple 123456TESTplat&!

[Device-luser-manage-abc] authorization-attribute user-role network-admin

[Device-luser-manage-abc] service-type ssh http https

[Device-luser-manage-abc] quit

# 开启NETCONF over SSH服务器功能。

[Device] netconf ssh server enable

# 设置SSH客户端登录用户线的认证方式为AAA认证,用户角色为network-admin。

[Device] line vty 0 63

[Device-line-vty0-63] authentication-mode scheme

[Device-line-vty0-63] user-role network-admin

[Device-line-vty0-63] quit

# 开启Stelnet服务器功能。

[Device] ssh server enable

# 配置SSH用户abc的服务类型为all(包括scpsftpstelnetnetconf四种服务类型),认证方式为password认证。

[Device] ssh user abc service-type all authentication-type password

# 开启SFTP/SCP服务器功能。

¡     对于支持SFTP的设备,开启SFTP服务器功能。

[Device] sftp server enable

¡     对于不支持SFTP的设备,开启SCP服务器功能。

[Device] scp server enable

4. 配置Ansible管理端

说明

在本举例中,Ansible管理端安装的操作系统为Ubuntu,如果您使用的为其他Linux系统或者类Unix系统,请在Ansible文档的官方网站https://docs.ansible.com中寻找安装Ansible的方法。

 

(1)     配置缺省主机清单(即受控的设备清单)。

# 缺省主机清单文件为/etc/ansible/hosts,管理端需要将设备端的主机信息(例如IP地址或域名等)编写入该文件中,例如:

192.168.1.1    Device

有关主机清单详细的编写规则以及修改主机清单路径的方式,请参见Ansible文档的官方网站https://docs.ansible.com

(2)     通过pip工具来安装Ansible

# 检查Python版本。

$ python --version

如果未安装Python,请先安装Python:

$ sudo apt-get update

$ sudo apt-get install python3

# 检查pip版本。

$ pip --version

如果未安装pip,请先安装pip:

$ sudo apt-get update

$ sudo apt-get install python-pip

# 安装Ansible。

$ sudo pip install markupsafe

$ sudo pip install ansible

安装完成后,查看Ansible安装的版本。

$ ansible -- version

(3)     安装Python库

说明

Ansible在执行脚本时,其调用的模块需要通过Python来实现。安装Python库的目的是获得能够使得Ansible的Playbook调用的模块正常运行的代码。

 

# 从github下载最新Comware Python库的源代码。

$ sudo git clone https://github.com/HPENetworking/pyhpecw7

# 安装Comware Python库。

$ cd pyhpecw7-master

$ sudo chmod 777 setup.py

$ sudo python setup.py install

说明

如果在安装过程中出现缺少某些组件的报错,可根据需要使用命令$ sudo apt-get install xxx安装缺少的组件(xxx为缺少的组件名称)。

 

# 从github下载Ansbile模块。

$ sudo git clone https://github.com/HPENetworking/ansible-hpe-cw7

# 由于下载的配置文件为HPE开源的文件,对于H3C设备,需要使用find命令在根路径下查找namespaces.py文件,在所有查找结果中,如果文件的路径名中含有“pyhpecw7”字符,则打开该文件并修改为如下内容:

HPDATA="http://www.h3c.com/netconf/data:1.0"

HPDATA_C='{'+HPDATA+'}'

NETCONFBASE="urn:ietf:params:xml:ns:netconf:base:1.0"

NETCONFBASE_C='{'+NETCONFBASE+'}'

HPCONFIG="http://www.h3c.com/netconf/data:1.0"

HPCONFIG_C='{'+HPCONFIG+'}'

HPACTION="http://www.h3c.com/netconf/data:1.0"

HPACTION_C='{'+HPACTION+'}'

(4)     配置SSH服务

# 安装SSH服务器。

$ sudo apt-get install ssh

# 修改SSH器配置,将其中“PermitRootLogin”项修改为“Yes”。

$ sudo vi sshd_config

# 重启SSH服务

$ sudo service ssh restart

(5)     定义主机清单变量

# 在ansible-hpe-cw7-master/hosts文件中,修改Ansible管理端通过SSH登录设备时使用的用户名和密码,后续管理端登录所有主机时都将使用下面的用户名和密码。

[all:vars]

username=abc

password=123456TESTplat&!

# 在ansible-hpe-cw7-master/hosts文件中修改[switches]字段值为主机名Device。修改该文件后,所有在[switches]下的主机名都属于同一个组,可以对组内的所有主机执行相同任务。

[switches]

Device

(6)     编写Playbook。

# 创建vlans.yml文件,编写如下代码。

---

- name: VLAN automation with Ansible on Devices

  hosts: switches

  gather_facts: no

  connection: local

 

  tasks:

    - name: ensure VLAN 10 exists

      comware_vlan: vlanid=10 name=VLAN10 descr=LOCAL_SEGMENT username={{ username }} password={{ password }} hostname={{ inventory_hostname }}

 

    - name: ensure VLAN 20 exists

      comware_vlan: vlanid=20 state=present username={{ username }} password={{ password }} hostname={{ inventory_hostname }}

(7)     执行脚本。

# 赋予执行权限。

$ sudo chmod 777 vlans.yml

# 使用ansible-playbook命令执行vlans.yml。

$ sudo ansible-playbook -i hosts vlans.yml

 

PLAY [VLAN automation with Ansible on Devices] *********************************

 

TASK [ensure VLAN 10 exists] ***************************************************

changed: [Device]

 

TASK [ensure VLAN 20 exists] ***************************************************

ok: [Device]

 

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

Device                      : ok=2    changed=1     unreachable=0    failed=0

可以看到Ansible管理端完成了创建VLAN 10的任务,VLAN 20由于检测到设备端已存在、无需创建。

不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们