网络设备自动化运维工具——ansible入门笔记

2024-04-27 15:18

本文主要是介绍网络设备自动化运维工具——ansible入门笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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原理:

在这里插入图片描述

  1. Ansible对local本地的linux系统进行配置;
  2. Ansible通过SSH对node(例如网络设备)进行配置;
  3. 在其他linux上装插件,management node通过插件和其他node进行通信,完成自动化配置。

Ansible安装:

Centos:
yum install -y epel-release
yum install -y enable

ansible --version //查看版本号
在这里插入图片描述
centos8默认使用的是python3.6.8版本

ansible的重要文件:

在这里插入图片描述

  1. ansible.cfg:ansible的系统配置文件。
  2. 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的基础配置。

前提准备:

  1. 两台CSR1000v设备,地址为192.168.0.66和192.168.0.77。
  2. 在两台设备上提前配置好SSH。

步骤一: 解决SSH Known host key的问题和配置hosts文件。

步骤二: 实验ping模块测试连通性(实际上是用ping和ssh)

ansible CSR -m ping -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.114 8.8.8.8"csr_syslog_level:
- {dest: console, level: notifications}csr_syslog_hosts:
- 192.168.0.188
- 192.168.0.166csr_user_db:
- {username: qytadmin, privilege: 15, password: Cisc0123}
- {username: otheradmin, privilege: 1, password: Cisc0123}...

csr_config_playbook.yaml:

---
- hosts: CSR  # playbook操作的设备,这里是CSR组,包含CSR1和CSR2,也就是两个设备都将执行一遍playbookgather_facts: faseconnection: localvars_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: no shutdown interface # ios_interface(打开接口)ios_interfaces:config:- name: "{{ item.port }}"enabled: Truewith_items: "{{ csr_ifs }}"when: (item.router == inventory_hostname)- name: ospf router-id # ios_config(配置OSPF的router-id)ios_config:lines:- router-id {{ item.routerid }}parents: router ospf 1with_items: "{{ csr_ospf_router_id }}"when: (item.router == inventory_hostname)- name: ospf network # ios_config(通告接口到OSPF进程)ios_config:lines:- network {{ item.network }} {{ item.mask }} area {{ item.area }}parents: router ospf 1with_items: "{{ csr_ospf_nets }}"when: (item.router == inventory_hostname)- name: domain  # 配置域名ios_system:domain_name: "{{ csr_domain_name}}"- name: DNS # 配置DNSios_system:name_servers:- "{{ csr_name_servers }}"- name: logging_level # 配置日志levelios_logging:dest: "{{ item.dest }}"facility: local7level: "{{ item.level }}"state: presentwith_items: "{{ csr_syslog_level }}"- name: logging_host # 配置logging服务器ios_logging:dest: hostname: "{{ item }}"state: presentwith_items: "{{ csr_syslog_hosts }}"- name: ios_user # 管理和创建用户no_log: trueios_user:name: "{{ item.username }}"privilege: "{{ item.privilege }}"configured_password: "{{ item.password }}"password_type: passwordstate: presentwith_items: "{{ csr_user_db }}"- name: SAVE CSRS CONFIG  # 任务名字ios_config: # 模块名字backup: yes  # 是否备份save_when: modified  # 当配置修改就保存配置
...

步骤五: 找到playbook文件,运行:

ansible-playbook CSR_config_playbook.yaml

在这里插入图片描述

可以看到上述图片中蓝色的显示,为skipping,也就是剧本里匹配条件没有匹配到,跳过的步骤。

注意: 由于剧本的最后一个任务设置的备份配置,那么在哪运行了剧本,会在哪个目录下产生一个backup目录,其中记录了备份的配置。

这篇关于网络设备自动化运维工具——ansible入门笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940839

相关文章

基于Python开发Windows自动更新控制工具

《基于Python开发Windows自动更新控制工具》在当今数字化时代,操作系统更新已成为计算机维护的重要组成部分,本文介绍一款基于Python和PyQt5的Windows自动更新控制工具,有需要的可... 目录设计原理与技术实现系统架构概述数学建模工具界面完整代码实现技术深度分析多层级控制理论服务层控制注

5 种使用Python自动化处理PDF的实用方法介绍

《5种使用Python自动化处理PDF的实用方法介绍》自动化处理PDF文件已成为减少重复工作、提升工作效率的重要手段,本文将介绍五种实用方法,从内置工具到专业库,帮助你在Python中实现PDF任务... 目录使用内置库(os、subprocess)调用外部工具使用 PyPDF2 进行基本 PDF 操作使用

C#自动化实现检测并删除PDF文件中的空白页面

《C#自动化实现检测并删除PDF文件中的空白页面》PDF文档在日常工作和生活中扮演着重要的角色,本文将深入探讨如何使用C#编程语言,结合强大的PDF处理库,自动化地检测并删除PDF文件中的空白页面,感... 目录理解PDF空白页的定义与挑战引入Spire.PDF for .NET库核心实现:检测并删除空白页

Python实现自动化删除Word文档超链接的实用技巧

《Python实现自动化删除Word文档超链接的实用技巧》在日常工作中,我们经常需要处理各种Word文档,本文将深入探讨如何利用Python,特别是借助一个功能强大的库,高效移除Word文档中的超链接... 目录为什么需要移除Word文档超链接准备工作:环境搭建与库安装核心实现:使用python移除超链接的

基于Go语言开发一个 IP 归属地查询接口工具

《基于Go语言开发一个IP归属地查询接口工具》在日常开发中,IP地址归属地查询是一个常见需求,本文将带大家使用Go语言快速开发一个IP归属地查询接口服务,有需要的小伙伴可以了解下... 目录功能目标技术栈项目结构核心代码(main.go)使用方法扩展功能总结在日常开发中,IP 地址归属地查询是一个常见需求:

使用python制作一款文件粉碎工具

《使用python制作一款文件粉碎工具》这篇文章主要为大家详细介绍了如何使用python制作一款文件粉碎工具,能够有效粉碎密码文件和机密Excel表格等,感兴趣的小伙伴可以了解一下... 文件粉碎工具:适用于粉碎密码文件和机密的escel表格等等,主要作用就是防止 别人用数据恢复大师把你刚删除的机密的文件恢

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

从入门到精通详解Python虚拟环境完全指南

《从入门到精通详解Python虚拟环境完全指南》Python虚拟环境是一个独立的Python运行环境,它允许你为不同的项目创建隔离的Python环境,下面小编就来和大家详细介绍一下吧... 目录什么是python虚拟环境一、使用venv创建和管理虚拟环境1.1 创建虚拟环境1.2 激活虚拟环境1.3 验证虚

Python自动化处理PDF文档的操作完整指南

《Python自动化处理PDF文档的操作完整指南》在办公自动化中,PDF文档处理是一项常见需求,本文将介绍如何使用Python实现PDF文档的自动化处理,感兴趣的小伙伴可以跟随小编一起学习一下... 目录使用pymupdf读写PDF文件基本概念安装pymupdf提取文本内容提取图像添加水印使用pdfplum

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环