09-Ansible配置
本章节下载: 09-Ansible配置 (277.45 KB)
目 录
Ansible是一种对大规模主机进行远程部署的自动化工具,这里主机是指任何可以通过SSH登录的设备。通过部署Ansible,系统可以实现大批量、自动化的进行集群配置和应用部署等系统运维操作。并且Ansible使用灵活、部署参数可复制,可以极大地减少运维人员的重复劳动,提高运维效率。
Ansible基于Python开发,使用SSH(Secure Shell)协议与网络设备建立连接,以实现对大规模设备的集中配置管理。
图1-1 Ansible网络架构
· 管理端(Manager):指安装了Ansible环境的主机。关于Ansible软件的安装,请参见Ansible的官方网站。
Ansible管理端支持的远程配置包括创建VLAN等,具体以Comware V7 Python库中支持的业务模块为准。
· 设备端(Device):设备端仅需支持作为SSH服务器,无需安装任何客户端代理软件。设备端和管理端建立SSH连接后,自动执行管理端下发的命令。
H3C设备支持作为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中编写的执行操作的目标主机需要在主机清单中存在定义。
Ansible的工作机制为:
(1) 在管理端上安装Ansible组件,并且将需要设备端执行的操作编写在Playbook中。
(2) 管理端和设备端建立SSH连接。管理端为SSH客户端,设备端为SSH服务器。
(3) 管理端通过执行Playbook来给单个或多个设备下发配置命令。
(4) 设备端自动执行管理端下发的命令来完成配置。
配置Ansible功能前,用户需要先配置如下功能:
· 手工配置设备的系统时间与管理端一致,或配置设备与管理端之间使用NTP/PTP进行时钟同步,否则可能导致双方无法互通。关于时钟同步的详细配置请参见“基础配置指导”中的“设备管理”,以及“网络管理和监控配置指导”中的“NTP”和“PTP”。
· 在设备上配置SSH服务器功能,使管理端能通过SSH连接向设备下发命令。关于SSH服务器的详细配置,请参见“安全配置指导”中的“SSH”。
如图1-3所示,设备开启SSH服务器功能,Ansible管理端通过SSH连接来远程配置设备。
图1-3 Ansible组网图
(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(包括scp、sftp、stelnet和netconf四种服务类型),认证方式为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
在本举例中,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保留在没有任何通知或提示的情况下对资料内容进行修改的权利!