Ansible概述:
Ansible是一款自动化运维工具,基于Python开发,集合了众多运维工具 (Puppet、CFengine、Chef、SaltStack)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。
Ansible是基于模块工作的,本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架。
Ansible支持丰富的的网络模板:
网络设备相关的模板请参照:
https://docs.ansible.com/ansible/2.9/modules/list_of_network_modules.html
例如:cisco ios模块
Ansible原理:
Ansible对local本地的linux系统进行配置;
Ansible通过SSH对node(例如网络设备)进行配置;
在其他linux上装插件,management node通过插件和其他node进行通信,完成自动化配置。
Ansible安装:
Centos:
yum install -y epel-release
yum install -y enable
ansible --version //查看版本号
centos8默认使用的是python3.6.8版本
ansible的重要文件:
ansible.cfg:ansible的系统配置文件。
hosts:定义登陆设备相关的文件。
解决SSH Known host key的问题:ssh第一次连接设备,都会弹出确认密钥的信息。有两种方式可以解决:
hosts文件配置:
[CSR1] # 定义第一个设备的IP地址
192.168.0.66
[CSR2] # 定义第二个设备的IP地址
192.168.0.77
[CSR:children] # 将两个设备加组
CSR1
CSR2
[CSR:vars]
ansible_become=yes # 说明设备有enable密码,不需要的话可以跳过这一步
ansible_become_method=enable
ansible_become_password=‘cisco’ # enable密码
ansible_password=‘Cisc0123’ # SSH密码
ansible_user=‘prin’ # SSH账号
ansible_connection=network_cli # 连接方式
ansible_network_os=ios
Playbook(剧本)简介:
Playbook是由一个或多个"play"组成的列表。play的主要功能在于将事先归为一组的主机装扮成事先通过ansible中的task定义好的角色。从根本上来讲,所谓的task无非是调用ansible的一个module(在上文给出的官方网站中去找)。将多个play组织在一个playbook中,即可以让他们联通起来按事先编排的机制同唱一台大戏。
剧本本身是一个yaml文件,什么是yaml文件,请参考:https://blog.csdn.net/tushanpeipei/article/details/116883378?spm=1001.2014.3001.5501
例如:
可以在其中看到{{}},表示jinja2模板替换,我们通常需要在另外一个yaml文件中保存需要使用的数据。例如:
实验测试:
实验目的:
完成CSR1和CSR2的基础配置。
前提准备:
两台CSR1000v设备,地址为192.168.0.66和192.168.0.77。
在两台设备上提前配置好SSH。
步骤一: 解决SSH Known host key的问题和配置hosts文件。
步骤二: 实验ping模块测试连通性(实际上是用ping和ssh)
ansibleCSR-mping-o
CSR为组名,会测试组中所有的设备,连通性无误后再进行后续步骤。
步骤三: 找到需要配置的具体模块,例如,需要配置接口的IP地址:
找到对应的模板信息:
步骤四: 组织各个模板信息组成playbook并且组织记录数据。
config_data.yaml:
--- csr_ifs: -{ip:1.1.1.1/32,port:Loopback0,router:192.168.0.66} -{ip:10.1.1.1/24,port:GigabitEthernet2,router:192.168.0.66} -{ip:2.2.2.2/32,port:Loopback0,router:192.168.0.77} -{ip:10.1.1.2/24,port:GigabitEthernet2,router:192.168.0.77} csr_ospf_nets: -{area:0,mask:0.0.0.0,network:1.1.1.1,router:192.168.0.66} -{area:0,mask:0.0.0.255,network:10.1.1.0,router:192.168.0.66} -{area:0,mask:0.0.0.0,network:2.2.2.2,router:192.168.0.77} -{area:0,mask:0.0.0.255,network:10.1.1.0,router:192.168.0.77} csr_ospf_router_id: -{router:192.168.0.66,routerid:1.1.1.1} -{router:192.168.0.77,routerid:2.2.2.2} csr_domain_name:"cisco.com" csr_name_servers:"114.114.114.1148.8.8.8" csr_syslog_level: -{dest:console,level:notifications} csr_syslog_hosts: -192.168.0.188 -192.168.0.166 csr_user_db: -{username:qytadmin,privilege:15,password:Cisc0123} -{username:otheradmin,privilege:1,password:Cisc0123} ...
csr_config_playbook.yaml:
--- -hosts:CSR#playbook操作的设备,这里是CSR组,包含CSR1和CSR2,也就是两个设备都将执行一遍playbook gather_facts:fase connection:local vars_files: -config_data.yaml#加载数据记录的yaml文件 tasks: -name:CSR_task_interface#ios_l3_interface(配置IP) ios_l3_interfaces: config: -name:"{{item.port}}"#item为csr_ifs中的每一个元素,可以看到每个元素是一个字典,.port是提取其中port对应的value,替换到模板中 ipv4: -address:"{{item.ip}}" with_items:"{{csr_ifs}}"#导入config_data.yaml中csr_ifs这个部分的配置内容 when:(item.router==inventory_hostname)#条件判断,当IP地址等于router的IP才执行此任务,用于CSR1和CSR2配置不同的IP地址 -name:noshutdowninterface#ios_interface(打开接口) ios_interfaces: config: -name:"{{item.port}}" enabled:True with_items:"{{csr_ifs}}" when:(item.router==inventory_hostname) -name:ospfrouter-id#ios_config(配置OSPF的router-id) ios_config: lines: -router-id{{item.routerid}} parents:routerospf1 with_items:"{{csr_ospf_router_id}}" when:(item.router==inventory_hostname) -name:ospfnetwork#ios_config(通告接口到OSPF进程) ios_config: lines: -network{{item.network}}{{item.mask}}area{{item.area}} parents:routerospf1 with_items:"{{csr_ospf_nets}}" when:(item.router==inventory_hostname) -name:domain#配置域名 ios_system: domain_name:"{{csr_domain_name}}" -name:DNS#配置DNS ios_system: name_servers: -"{{csr_name_servers}}" -name:logging_level#配置日志level ios_logging: dest:"{{item.dest}}" facility:local7 level:"{{item.level}}" state:present with_items:"{{csr_syslog_level}}" -name:logging_host#配置logging服务器 ios_logging: dest:host name:"{{item}}" state:present with_items:"{{csr_syslog_hosts}}" -name:ios_user#管理和创建用户 no_log:true ios_user: name:"{{item.username}}" privilege:"{{item.privilege}}" configured_password:"{{item.password}}" password_type:password state:present with_items:"{{csr_user_db}}" -name:SAVECSRSCONFIG#任务名字 ios_config:#模块名字 backup:yes#是否备份 save_when:modified#当配置修改就保存配置 ...
步骤五: 找到playbook文件,运行:
ansible-playbookCSR_config_playbook.yaml
可以看到上述图片中蓝色的显示,为skipping,也就是剧本里匹配条件没有匹配到,跳过的步骤。
注意: 由于剧本的最后一个任务设置的备份配置,那么在哪运行了剧本,会在哪个目录下产生一个backup目录,其中记录了备份的配置。
审核编辑:刘清
-
Linux
+关注
关注
87文章
11222浏览量
208890 -
CSR
+关注
关注
3文章
118浏览量
69592 -
SSH
+关注
关注
0文章
185浏览量
16298 -
python
+关注
关注
56文章
4781浏览量
84445
原文标题:网络设备自动化运维工具——ansible入门笔记
文章出处:【微信号:网络技术干货圈,微信公众号:网络技术干货圈】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
评论