Ansible网络自动化的优势介绍

您所在的位置:网站首页 python自动化部署脚本 Ansible网络自动化的优势介绍

Ansible网络自动化的优势介绍

#Ansible网络自动化的优势介绍| 来源: 网络整理| 查看: 265

谈到网络自动化,目前流行的网络自动化框架是Nornir,这个框架基于纯Python,支持的网络设备也最全,毋庸置疑是目前学习网络自动化的王道框架。

但是,未必所有人都熟悉Python编程,而Python的学习成本也不低(但确实值得学习)。

那有没有另一种工具,不用学习Python,使用低代码就能够快速实现网络自动化呢?

有,Ansible就是一个不错的选择!

Ansible的大名,对于运维工程师(尤其是系统运维工程师)来说应该毫不陌生,一般了解过运维自动化的网络工程师也应该有所耳闻。

它是一款开源的IT自动化运维工具,能够自动执行配置管理、应用部署和编排;基于YAML文本编写,简单易读,且无需安装额外agent。它为大家所熟知,尤其在于系统运维和应用运维方面。

这里就不普及Ansible的基础知识了,相信在其他地方大家都可以很好地学习到。

我们重点说说在网络自动化运维方面,Ansible的优势。我总结了一下,觉得Ansible有以下四个方面的优势:

丰富的网络设备模块使用简便且丰富的过滤器使用简便的条件判断免费开源的AnsibleAWX

接下来就来详细谈谈Ansible的这四个特点优势。

首先谈谈Ansible支持的网络设备。

简单来说,Ansible的方便就在于它有很多对接适配网络设备的模块,这些模块都是前人造的轮子,伸手即用,免去了大量编程工作。

这些模块能够帮助你快速地执行命令、配置设备,而你只需提供必要的参数就可以了。

我们先根据设备类型来划分这些模块(这里只列举我觉得比较常见、经典的网络模块,不包括全部):

路由交换:Cisco IOS(ios)、Cisco NX-OS(nxos)、华为CloudEngine(ce)防火墙:Cisco ASA防火墙(asa)、Fortinet防火墙(fortios)、Juniper防火墙(junos)、CheckPoint防火墙(checkpoint)、Paloalto防火墙(panos)负载均衡器:F5(bigip)、A10(a10)SDN:Cisco ACI(aci)无线控制器:Cisco WLC(aireos)、Aruba(aruba)

除了以上跟网络设备厂商相关的模块,还有跟目前流行的虚拟化网络、容器网络以及云平台相关的模块:

软路由:Vyos(vyos)、Mikrotik(routeros)云平台:亚马逊云AWS(aws)、微软云Azure(azure)、谷歌云(gcp)其他:openstack、openvswitch、kubernetes等等

从上面的信息,可以看出Ansible对国外网络厂商设备的支持是很好的,但对国内厂商似乎只支持华为CE。确实,目前国内企业使用的路由交换设备都倾向于国内网络厂商产品,很多网工可能就觉得国内设备都不怎么支持,没多大用处。

但是,一些业界顶尖的设备厂商还是国外品牌,这个无法否认。比如防火墙。

2022年防火墙魔力象限

防火墙是企业中保护网络安全的重要设备,相信即使是国内企业,也有很多选择这些顶尖的防火墙品牌。

从上图可以看到Ansible刚好都支持这些顶尖的防火墙品牌。

这里之所以重点提防火墙,是我之后考虑写一篇如何使用Ansible实现自动化配置防火墙策略的文章,这块网上似乎很少有人提及,但在企业实际运维中却占很大一块。

防火墙是企业和数据中心必不可少的设备,根据需要会部署在各个网络区域,如何自动化地部署各个区域、不同厂商的防火墙策略应该是所有企业面临的问题。当然如果你能熟练运用编程语言比如python或者GO,开发出一套网络运维平台的确是最佳方案。

但是一般网络工程师没法达到这样的水平,或者说有一定困难。而你如果想基于简单的逻辑判断、配置不同防火墙策略,Ansible就可以帮助你实现!

Ansible另一个优势是它的过滤器。

Ansible的过滤器是一种用于处理变量的工具,可以在playbook中使用。过滤器可以将变量转换为所需的格式,或者从变量中提取特定的信息。Ansible提供了许多内置的过滤器,也可以自定义过滤器。

这里举一些我觉得Ansible网络自动化中常用的过滤器,作一点简单介绍:

ipaddr:用于ip地址过滤,比如筛选ip、计算ipurlsplit:用于url处理split、find、replace、lower、upper:用于字符串简单处理regex_search、regex_findall、regex_replace、regex_escape、split:用于字符串的复杂正则处理first、last、random、length:用于列表的简单取值map、select、unique、union、intersect、difference、symmetric_difference:用于列表的复杂取值join:用于列表转换为字符串dict2items、items2dict、combine:用于字典数据处理to_json、to_nice_json、to_yaml、to_nice_yaml:用于将字典转换为json或yaml格式selectattr、rejectattr:用于多字典列表的数据处理json_query:用于json数据处理

使用这些过滤器,能够简便快速地处理各种数据、快速获取自己想要的数据,这在编写playbook中十分有用。

下面举个简单的例子。比如检查一个字符串是否为ip地址,如果是ip属于哪个网络区域。

vars: oa_server: ['10.88.0.0/24','10.88.1.0/24'] #定义一个列表来代表一个网络区域,这个列表包含这个区域里的所有网段;oa服务器区 app_server: ['10.88.4.0/24','10.88.5.0/24'] src_addr: "10.88.1.22" #现在我有一个源地址想调查它是否属于oa服务器区 dst_addr: "10.88.4.33" tasks: - name: Fail when src_addr is not ip address fail_when: src_addr | ipaddr('address') == False #使用过滤器“ipaddr”检查src_addr是否为ip地址,如果不是中止执行 - name: Set src_addr_subnet #先把ip处理成网段,注册为变量 set_fact: src_addr_subnet: "{{src_addr.split('.')[0] + '.' + src_addr.split('.')[1] + '.' + src_addr.split('.')[2] + '.' + '0/24'}}" #使用“split”将IP地址以"."分割,将前三个部分按原样组合起来,将最后一个部分替换为"0/24",最终形成一个"10.88.1.0/24"字符串 - name: Print debug: msg: "{{src_addr}} 属于OA服务器区" when: src_addr_subnet in oa_server #使用“in”来判断当新定义的src_addr_subnet变量在oa_server这个列表内,执行操作 - name: Print debug: msg: "{{src_addr}} 不属于OA服务器区" when: src_addr_subnet not in oa_server #使用“not int”来判断,当不在oa_server这个列表内时执行其他操作

这只是一个简单的例子,检查IP地址的网络区域,并根据检查结果执行不同的打印操作。试想一下,如果知道源目IP地址的网络区域,是否就能得出一些条件,用于判断在哪个防火墙实施配置策略了?

这个示例代码中出现了fail_when和when判断语句,这就是接着要说的Ansible的条件判断语句。

再谈Ansible的条件语句。

when和fail_when都是Ansible中的条件语句,用于控制任务的执行。

其中,when语句用于判断条件是否成立,如果成立则执行任务,否则跳过;而fail_when语句则是在条件不成立时将任务标记为失败。

在Ansible中条件成立或不成立的选项可以是多条同时符合(即and),也可以是符合某一条件或者另一条件(即or),以上面例子的延续举例说明:

- name: Print debug: msg: "需要配置APP防火墙" when: - src_addr_subnet not in app_server - dst_addr_subnet in app_server #dst_addr_subnet注册方式与上面src_addr_subnet相同,不赘述 #如上列表式的条件写法即表示“and” #当源地址不属于app服务器区,而目标地址属于app服务器区时,需要配置APP防火墙 - name: Print debug: msg: "源目地址位于同区域,不需要配置防火墙" when: ( src_addr_subnet in oa_server and dst_addr_subnet in oa_server ) or ( src_addr_subnet in app_server and dst_addr_subnet in app_server ) #源地址和目标地址在同个网络区域,则无需配置防火墙

不管符合的条件有多复杂,只要能够灵活地运用Ansible模块和过滤器注册和筛选变量、并逻辑地反映在条件语句里,就能达到你想要的目的。

最后,Ansible还有一个重型杀器----AnsibleTower(开源版名为AWX),它是基于Ansible框架的图形化自动化平台,能够更方便地编排和部署Ansible Playbook,并提供集中的日志记录、审计和系统跟踪。可以让你轻松实现WEB界面的playbook脚本管理、执行和过程记录。并且它还提供REST API,能够轻松与其他CICD工具、运维平台集成。

AnsibleAWX

因为AnsibleAWX像Ansible一样是开源免费的,对于企业和网工来说都是神器。

如何安装使用AnsibleAWX用于网络自动化运维,在以后的文章我会再详细介绍,并提供一些我自己探索过程中总结的技巧。

Ansible的四点优势就谈到这里,下回再说。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3