接上篇,周一配置完基础环境后,周二偷了一天懒,周三又开了一天会,所以直到今天(周四)才开始推进工作。
本篇主要说明如何以Ansible-Playbook(剧本)的方式推配置到华为设备。
P.S.不得不说,一直偷懒一直爽啊。
Centos7(Ansible server)
Ansible2.2
CloudEngine-Ansible-0.2.0 Package
Hwawei NE20E路由器
Ansible Inventory即Ansible的hosts文件,所有需要使用Ansible管理的Clients都需要被记录在Inventory中,在保证所有信息记录准确的情况下,记录的格式可以有多种方式,在编写Playbook时,需要在细节上配合Inentory的记录格式。
引用Ansible官网的说法: The inventory file can be in one of many formats, depending on the inventory plugins you have. For this example, the format for /etc/ansible/hosts is an INI-like (one of Ansible’s defaults) and looks like this:
mail.example.com [webservers] foo.example.com bar.example.com [dbservers] one.example.com two.example.com three.example.com
具体到本次测试,hosts文件是这样写的:
[all:vars] //定义全局变量 ansible_connection='local' username='XXXXX' password='XXXXX' ansible_ssh_port=22 [hkbas] //定义主机组 10.248.129.131 [szbas] 10.248.128.151 [ldbas] 10.248.134.131
这里的三个主机组分别是位于深圳、香港和伦敦的Bras设备,型号是华为NE20E,测试的最终目的是通过Playbook向深圳的Bras下发用户计费配置的命令。
剧本(Playbook)是Ansible与被控设备交互的一种方式,除此之外,还可以用Ad-hoc的方式下发配置命令。使用剧本的好处是可以完成系统的、复杂的配置任务,而Ad-hoc只能通过ansible –XX的方式对Client下发单条命令。
剧本语言必须用yaml格式编辑,yaml对空格敏感,相同缩进的行被视为同一模块,不能使用Tab(制表符)进行缩进。
每个Playbook包含一个或多个Plays,Play的作用是将一组主机映射到具体的行为。
具体见本次测试使用的Playbook:
[root@localhost ~]# cat bas_add_ip_segments.yml - name: Add IP Segements To SZ Bas hosts: szbas //play,将主机组与行为对应 connection: local gather_facts: no //用来采集目标系统信息的,具体是用setup模块来采集得,置no可显著加快剧本执行速度。 vars: a_ip: //可通过传递参数获得 z_ip: cli: host: "" port: "" username: "" password: "" transport: cli tasks: - name: "Add IP Segments To SZ Bas" ce_config: lines: layer3-subscriber vpn-instance VPN110_Internet_GIS_Charge domain-name sz_web_pre provider: ""
这个剧本要实现的功能很简单,即在深圳Bras设备上配置一条命令:
layer3-subscriber start_ip end_ip vpn-instance VPN110_Internet_GIS_Charge domain-name sz_web_pre
其中start_ip和end_ip是这条命令中唯二的变量,在执行剧本时将始末IP地址参数传入变量,最终实现命令的完整下发。
执行剧本:
ansible-playbook -e "a_ip=1.1.1.1 z_ip=1.1.1.2" bas_add_ip_segments.yml
在执行剧本任务时,使用 -e 可后缀需要传递到剧本内的参数。
测试达到预期效果,但操作过程还是相对繁琐,下一步借助其他工具进一步简化操作,躲不过了,还是用shell写脚本吧。。。
P.S. 代码高亮功能研究成功!!
P.P.S. 正在考虑去掉博客的全局BGM,越来越觉得现在这样体验不好,有时间搞搞。
就这样,Dear you,goodnight!
Ansible: hosts文件拆分为inventory和定义inventory全局变量
使用CloudEngine-Ansible批量管理华为CE交换机