ansible-自动化工具

一、ansible概述

不是 C/S 架构,就是一种工具

1 linux 自动化运维

编写程序实现运维自动化:shell python

工具模式自动化:

①OS Provisioning: RedHat satellite;PXE(可实现dhcp和tftp),cobbler

②OS config(命令批量运行,保持任务执行的状态):puppet saltstack(灵活性不如ansible)

③:Task Excute(命令任务执行的工具,独立出来,效率比较高):fabric func saltstack

④:Deployment(实现应用程序部署):fabric (高版本ansible完全可以取代)

ansible 可以实现 OS config Task Excute Deployment 是属于轻量级的自动化运维工具。

Ansible 不可以实现 pxe 功能,因为他是操作系统功能,要自动化操作系统

基于管理节点和被管理节点模式,需要考虑安全因素。

**运维工具的远程管理分类:**服务端/客户端

无客户端 ,以SSH 服务 来操控(需要账户和相关管理员权限) ansible 属于此类

2 ansible 简介

2012年诞生的新兴的开源自动化运维工具,基于python语言开发,源代码托管在github上,是目前最受欢迎的自动化运维工具之一,排名前十。

由Paramiko,PyYAML和jinjia2三个关键模块来融合了众多功能。

**三大核心组件:**Paramiko实现核心功能、PyYAML实现剧本相关功能、jinjia2实现模版技术

3 ansible 功能

批量执行远程命令,可以对远程的多台主机同时进行命令的执行

批量安装和配置软件服务,可以对远程的多台主机进行自动化的方式配置和管理各种服务

编排高级的企业级复杂的IT架构任务,Ansible的Playbook和role可以轻松实现大型的IT复杂架构

提供自动化运维工具的开发API

4 ansible 的特性

①:minimal learning curve(最小学习曲线) auditability(可认证的) 基于Python语言来实现

②:Modules in any language(支持多模块化,模块支持任意编程语言)

centos7有3378模块、rocky8有5000多模块,rocky9:72个模块

③:Paramiko(python对ssh的实现),PyYAML,jinja2(模板语言)三个关键模块

④:No bootstrapping(无需客户端引导,客户端只要支持ssh协议就行)

⑤:No DAG ordering,Fails Fast(无依赖关系)幂等性,一个任务执行1遍和执行N遍效果一样,不因重复执行带来意外情况(非绝对)

⑥:No agents(没有代理)

⑦:No server(没有服务器端)

⑧:安全,基于openssh,No additional PKI(无需依赖证书)

⑨:yaml,not code(简化的标签格式定义文档文本格式,学习简易)

⑩:strong multi-tier solution (支持多角色)

最主要核心模块Paramiko(python对ssh的实现)本质:

管控机基于ssh协议控制受控机,做完参数之后,在受控机用户家目录会生成一个.ansible,会生成一个.py;受控完毕之后,就会把这个.py文件删除

幂等:相当于脚本可以重复执行,且不报错

TFTP:简单文件传输,走UDP

5: ansible 核心组件(重点)

①:ansible core

②:host iventory 主机池(主机清单就受控记的主机名或者ip地址,必须写到管控机inventory中)

③:core modules 核心模块

④:custom modules 自定义模块

⑤:playbook(yaml jinjia2) 运行将多个主机的配置的任务写在yaml格式的配置文件中,支持python的jinjia2模板语言

⑥:connect plugin(连接每个管理主机的插件)

⑦:API(第三方应用程序调用的编程接口)

二、ansible的原理以及语法

1.流程:

①用户可以调用命令,先去找主机清单(找受控机)、其次去调用模块,任务模块去调用API(这时会涉及到一些第三方插件),去对Windows主机或者网络设备做控制。

②用户可以调用剧本,然后剧本调用主机清单和模块

ansible部署简单,无需客户端,使用ssh协议来实现管理。基于主从模式(非应用程序管理)

ansible以"模块"完成各种"任务";支持自定义模块,支持各种编程语言

2.ansible 命令语法

ansible 支持分类列表、支持主机ip, 支持正则表达式

ansible <host-pattern> -f forks -m module_name -a args

host-pattern:表示对哪些主机生效

-f forks:一次性处理多少主机(启动并发线程数)

-mmodule_name:要使用的模块

-a args :传输模块特有的参数

-v:显示详细信息

**-C:**检测运行模式(测试执行)

**-i:**指明主机清单文件是谁(默认为/etc/ansible/hosts)

**-k:**基于ssh密码传输(非基于Key认证)

**--list:**列出对执行的所有主机

**--syntax-check:**对playbook剧本实现语法检测

连接相关选项

-c CONNECTION:使用什么方式连接目标主机,默认为smart

-u REMOTE USER:指定目标主机连接的用户名,默认为None

权限升级方式选项

-s 普通用户提权(sudo)

简单操作:必须定义主机清单

支持通配符,逻辑与,逻辑或正则表达式

ansible-doc -l:列出所有模块 -s:查看模块用法

【注】:操作必须是幂等的

三、ansible常见模块

1.command 命令模块(默认模块,用于在远程执行命令,不能使用变量,也不支持幂等,不支持管道。)

ansible all -a 'cat /etc/issue'

2. shell 运行命令管理模块 (用于管道等复杂命令,也不支持幂等)

ansible all -m shell -a 'echo $HOSTNAME'

3. user

name=:指明创建用户的名字

remove=yes/no 缺省值为no

4. group

ansible-doc group(空格往下翻)

ansible all -m group -a 'name=public gid=2500'

5.copy

src=:定义本地源文件路径

dest=:定义远程目标文件路径 以上都需要使用绝对路径

content=:取代src=,表示自定义文本的内容直接取代拷贝的文本文件内容信息

owner=:指定属主

group=:指定属组

mode=:指定权限

例:把anaconda-ks.cfg复制到被控机/mnt,并且需要改名为a.cfg

ansible all -m copy -a 'src=/root/anaconda-ks.cfg dest=/mnt/a.cfg mode=400'

【注】:后面补 / 是目录,不补 / 是文件

在被控机进行检验:

6.fetch 拉取远程主机文件到本地

注意:不能拉取目录

src=:远程主机路径下的源文件

dest=:拉取到本地目标文件路径下的文件 以上都需要使用绝对路径

ansible-doc fetch //fetch的帮助文档

例:将110的rocky环境拉倒本地(为了防止拉相同文件,弄混,自动创建了文件夹,方便管理)

ansible 192.168.10.110 -m fetch -a 'src=/root/rocky9_huanjing.sh dest=/tmp/rocky9_huanjing.sh'

7. file 主要作用于文件管理

path=:指定文件路径,可以使用name或dest来替换

state=touch/directory/link/absent 创建文件/目录/软链接/删除

创建链接: src= path= :指明符号链接文件路径

例:删掉/mnt/目录

8.hostname 更改主机名

name= :新主机名

9. Get_url URL 下载模块

功能:用于将文件从http、https或者ftp下载到被管理节点

url=:被下载文件的URL

dest=:下载到目标路径(绝对路径)

owner=:指定属主

group=:指定属组

mode=:指定权限

force=:如果是yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件。

checksum=算法:对目标文件下载后计算摘要,以确保其数据的安全性和完整性

例:checksum=md5:xxxxxx

ansible all -m get_url -a 'url=http://nginx.org/download/nginx-1.18.0.tar.gz dest=/nginx.tar.gz checksum="md5:b2d33d24d89b8b1f87ff5d251aa27eb8"'

例:校验码如果比对不匹配,则会报错;

10. archive unarchive 压缩和解压缩模块

src=:源压缩文件(可以是从网上直接下载的url)

copy=no:不在我的主机上,yes在我的主机上

dest=:目标解压缩文件路径

format=:目标压缩文件格式

【注】:归档压缩 path= 源被压缩文件或目录 dest= 压缩之后的归档文件以及所在的路径

11.script:运行本地脚本模块

12. yum 安装程序包模块(当然,需要事先配置好 yum 源)

name=:指明要安装的程序包,可以接上版本号

state=:present,latest表示安装(默认值--最新版本),absent表示卸载

例:ansible all -m yum -a 'name=httpd state=latest'

在被控机上进行验证查看:

13. cron

name=" 计划任务的名字 " 分、时、日、月、周、用户名、指令

job= 作业执行的程序内容

State(状态) present:安装 (默认)absent:移除

例:ansible all -m cron -a 'name="this is new job" job="/usr/bin/touch /root/1.txt" minute=0 hour=1 day=1 month=3'

在被控机上进行验证查看:

14. ping 网络连通性

ansible all -m ping

【注】:不接-m,等于调用command模块,command模块不支持幂等,严重不推荐

15. service systemd 服务启停管理模块,不可以管 unix 单元

enabled=:是否开机自动启动 (true false)

name=:服务名称

state=:状态,取值有started,stopped,restarted

例:首先安装nginx,然后设置开机自启

ansible all -m yum -a 'name=nginx state=present' //安装nginx

ansible all -m system -a 'name=nginx state=started' //启动nginx

ansible all -m system -a 'name=nginx state=stopped' //停止nginx

在被控机上测试查看:

16. lineinfile :支持某一行的字符转移替换

path=:

regexp=:正则表达式(如果不知道精确到哪一行,所以全部都修改)

line=:要修改的行

例:ansible-doc lineinfile //查看lineinfile的帮助文档

ansible 192.168.10.110 -m fetch -a 'src=/etc/nginx/nginx.conf dest=/root/'

ansible 192.168.10.110 -m lineinfile -a "path=/etc/nginx/nginx.conf regexp='^ +(root).*' line=' root/nginx/html;'"

ansible 192.168.10.110 -m lineinfile -a "path=/etc/nginx/nginx.conf regexp='^ +(root).*' line=' \1 /nginx/html;'backrefs=yes"

被控机测试查看:

17. replace :支持全文匹配的字符转移替换(需要写入完整的正则表达式)

path=:

regexp=:正则表达式

replace=:要替换的行

例:

ansible 192.168.10.110 -m lineinfile -a "path=/root/1.txt regexp='^i.*' line='liang nian ban'"

被控机查看:

全部替换

ansible 192.168.10.110 -m replace -a "path=/root/1.txt regexp='(liang)(.*)' replace="san\2"

被控机查看:

18. setup 收集每个远程主机的 fact

每个被管理节点在接收并运行管理命令之前,会将自己的主机相关信息,如操作系统版本, IP 地址等报告给 ansbile 主机

例如:ansible all -m setup 发送过来所有的远程主机的所有信息。

Ansible 192.168.10.110 -m setup

Yum -y install ansible --nobest

ansible --version

ansible-doc -l | wc -l

相关推荐
有毒的教程2 天前
Ansible批量操作自动化完整教程:批量部署服务、配置同步、软件更新实战
运维·自动化·ansible
Hy行者勇哥7 天前
用Cursor智能编写Ansible/Terraform脚本,打通CI/CD链路
ci/cd·ansible·terraform
芷栀夏9 天前
飞牛NAS怎么部署Immich?家庭照片自动备份与远程访问教程
服务器·nginx·ansible
悠然南风19 天前
Ansible常见模块总结及LDAP Role 编写与调试
ansible
祺风挽楠1 个月前
ansible编辑
网络·ansible
芳心粽伙饭1 个月前
Ansible课后作业
ansible
烁3471 个月前
Ansible初识
ansible
烁3471 个月前
Ansible安装部署调试
ansible
烁3471 个月前
Ansible命令
ansible
小义_1 个月前
【Ansible】(三)基础配置与连接设置
云原生·ansible