Linux学习-ansible自动化

什么是Ansible?
  • ansible是新出现的自动化运维工具,基于python开发,集合了很多的运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。

  • ansible是基于paramiko开发的,并且基于模块化 工作,它本身没有批量部署的能力。真正具有批量部署的是ansible所运行的模块,ansible只是提供一种框架,ansible不需要在远程主机上安装client/agents,因为它们是基于ssh来和远程主机通讯的。ansible目前已经被红帽官方收购,是自动化运维工具认可度最高的。

  • 更加详细的资源参考官方文档,如右是Ansible的官方网站:Ansible Documentation

Ansible的特点
  • 部署简单,只需要在主控端部署Ansible环境,被控端无需做任何操作;

  • 默认使用SSH协议对设备进行管理;

  • 有大量的常规运维操作模块,可实现日常绝大部分的操作;

  • 配置简单、功能强大、扩展性强;

  • 支持API以及自定义模块,可以通过Python轻松扩展;

  • 通过Playbooks来定制强大的配置、状态管理;

  • 轻量级、无需在客户端安装agent,更新时,只需在操作机上进行一次更新即可;

  • 提供一个功能强大、操作性强的web管理界面和REST API接口------AWX平台。

ansible任务执行模式
  • ansible系统由控制主机被管节点的操作方式可以分为两类,即adhoc和playbook

  • ad-hoc模式(点对点模式)

使用单个模块,支持批量执行单条命令。ad-hoc命令是一种可以快速输入的命令,而且不需要保存起来的命令。就相当于bash中的一句话shell

  • playbook模式(剧本模式)

剧本模式是Ansible的主要管理方式,也是Ansible功能强大的关键所在。playbook通过多个task(任务)集合完成一类功能,比如web服务的安装部署、数据库服务的批量备份等。可以简单地把playbook理解为通过组合多条ad-hoc操作的配置文件

ansible命令执行过程(背会)
  • 加载自己的配置文件,默认为/etc/ansible/ansible.cfg;

  • 查找对应的主机配置文件,找到要执行的主机或者组;

  • 加载自己对应的模块文件,如command;

  • 通过ansible将模块或者命令生成对应的py文件(python脚本),并且将该文件传输到远程服务器;

  • 对应执行用户的家目录.ansible/tmp/xxx/xxx.py文件;

  • 给文件添加执行权限;

  • 执行并且返回结果;

  • 删除临时的py文件, sleep 0退出;

ansible的配置文件查找顺序(背会)
  • ansible与我们其他的服务在这一点上又很大的不同,这里的配置文件查找是从多个地方找的,顺序如下:

1.检查环境变量 ANSIBLE_CONFIG 指向的路径文件(export ANSIBLE_CONFIG=/etc/ansible/ansible.cfg);

  1. ~/.ansible.cfg,检查当前目录下的ansible.cfg配置文件;

3./etc/ansible.cfg检查etc目录的配置文件。

ansible的程序结构(yum安装为例)
  • 配置文件目录:/etc/ansible/

  • 执行文件目录:/usr/bin/

  • Lib库依赖目录:/usr/lib/pyhtonX.X/site-packages/ansible/

  • Help文档目录:/usr/share/doc/ansible-X.X.X/

  • Man文档目录:/usr/share/man/man1/

yum安装是我们比较熟悉的安装方式。我们需要先安装一个epel-release包,然后再安装ansible

yum install epel-release -y

yum install ansible -y

编译文件添加要管控的节点:vim /etc/ansible/hosts 添加IP地址和命名

生成密钥对:ssh-keygen (密钥每次生成都不一样,生成后上一个就不能用了)

传公钥到目标机器:ssh-copy-id 192.168.11.129

验证是否连接成功:ansible 192.168.11.129 -m shell -a "ls -l /root"

通用基础参数(多模块共用)

name作用:指定包名、服务名、任务名称

yum模块:安装dhcpd软件包 ansible 192.168.11.128 -m yum -a "name=dhcpd state=present"

service模块:操作nginx服务 ansible 192.168.11.128 -m service -a "name=nginx state=started"

state作用:定义资源最终状态,不同模块取值不同

yum模块

ansible 192.168.11.128 -m yum -a "name=nginx state=present" # 安装

ansible 192.168.11.128 -m yum -a "name=nginx state=latest" # 升级到最新

ansible 192.168.11.128 -m yum -a "name=nginx state=absent" # 卸载 #

service模块

ansible 192.168.11.128 -m service -a "name=nginx state=started" # 启动

ansible 192.168.11.128 -m service -a "name=nginx state=stopped" # 停止

ansible 192.168.11.128 -m service -a "name=nginx state=restarted"# 重启

file模块

ansible 192.168.11.128 -m file -a "path=/test state=directory" # 创建目录

ansible 192.168.11.128 -m file -a "path=/1.txt state=touch" # 创建空文件

ansible 192.168.11.128 -m file -a "path=/test state=absent" # 删除文件/目录
enabled作用:配置服务开机自启,仅 service 模块使用

ansible 192.168.11.128 -m service -a "name=nginx enabled=yes" # 开启开机自启

ansible 192.168.11.128 -m service -a "name=nginx enabled=no" # 关闭开机自启
chdir作用:执行命令前,先切换到指定目录

切换到/opt目录,执行ls查看文件 ansible 192.168.11.128 -m shell -a "chdir=/opt ls -l"

切换到/home目录,创建文件夹 ansible 192.168.11.128 -m shell -a "chdir=/home mkdir testdir"

command /shell 模块专属
creates作用:判断文件存在就跳过执行命令,避免重复操作

若/opt/lock.txt已存在,就不执行touch命令

ansible 192.168.11.128 -m shell -a "chdir=/opt creates=/opt/lock.txt touch lock.txt"
removes作用:判断文件不存在就跳过执行命令

若/opt/run.sh不存在,就不执行脚本

ansible 192.168.11.128 -m shell -a "chdir=/opt removes=/opt/run.sh sh run.sh"

copy 模块(文件拷贝)常用参数
src作用:本地源文件 / 源目录路径
dest作用:远程主机目标路径

把本地/root/1.txt 拷贝到远程 /tmp/ 下

ansible 192.168.11.128 -m copy -a "src=/root/1.txt dest=/tmp/"

写入are you ok到目标主机/opt/f2.txt文件中并赋权 把修改前的文件备份在同目录下

ansible 192.168.11.128 -m copy -a 'content="are you ok?" dest=/opt/f2.txt mode=777 backup=yes'
owner / group作用:设置文件所属用户、所属组

拷贝后指定属主、属组为root

ansible 192.168.11.128 -m copy -a "src=/root/1.txt dest=/tmp/1.txt owner=root group=root"
mode作用:设置文件权限(八进制)

拷贝文件并设置权限755

ansible 192.168.11.128 -m copy -a "src=/root/run.sh dest=/tmp/run.sh mode=0755"

file 模块(文件 / 目录管理)
path作用:指定要操作的文件 / 目录路径(旧版本也可用 dest

创建/software目录

ansible 192.168.11.128 -m file -a "path=/software state=directory mode=0755 owner=root"

创建用户

生成123的密文密码:openssl passwd -1 "123"

创建用户,密码123:($符号前要加转义符\)

ansible testpc -m user -a "name=zhangs password=\1\\YQ95Kwoj\$zl3/WhADN52TxlYT3bJ4W0"

script模块

script模块用于将本机的脚本在被管理端的机器上运行。该模块直接指定脚本的路径即可

提前准备好脚本

ansible webs -m script -a "/root/useradd.sh"

cron模块
**给所有 web 组主机,添加一个每 5 分钟执行一次 /sbin/ifconfig 的定时任务,任务名称为 ifconfig every 5 min:

ansible web -m cron -a 'name="ifconfig every 5 min" minute=*/5 job="/sbin/ifconfig"'
文件在目标主机/var/spool/cron/目录下**

综合组合示例(日常高频用法)
安装软件 + 启动 + 开机自启

安装httpd

ansible 192.168.11.128 -m yum -a "name=httpd state=present"

启动并设置开机自启

ansible 192.168.11.128 -m service -a "name=httpd state=started enabled=yes"

切换目录执行脚本

ansible 192.168.11.128 -m shell -a "chdir=/usr/local/scripts sh start.sh"

拷贝配置文件 + 赋权

ansible 192.168.11.128 -m copy -a "src=/root/nginx.conf dest=/etc/nginx/nginx.conf mode=0644 owner=root"

setup模块
  • setup模块主要用于收集信息,是通过调用facts组件来实现的,facts组件时Ansible用于采集被管理机器设备信息的一个功能。我们可以使用setup模块查看机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据文件中,ansible_facts是最上层的值。

  • facts就是变量,内建变量。每个主机的各种信息,cpu个数,内存的大小等。会存在facts中的某个变量中,调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。比如redhat系列用yum安装,而debian系列用apt安装软件

  • 查看信息实例,查看被管理主机的内存

过滤只显示mem信息:ansible web -m setup -a 'filter="*mem*"'

相关推荐
IT邦德12 小时前
Dify1.6基于ubuntu系统的部署实战
linux·运维·ubuntu
lucky_syq12 小时前
第5篇 · S1·下:前沿架构:MoE、Reasoning 模型、长上下文、多模态、SSM/Mamba 与模型谱系
人工智能·学习·架构
日拱一卒的小田12 小时前
ZYNQ学习笔记3-ZYNQ的IIC控制器1
笔记·单片机·学习
吠品13 小时前
Java byte数组与String互转:编码细节与踩坑记录
java·linux·服务器
木白CPP14 小时前
Linux 驱动UART子系统源码分析
linux·运维·服务器·驱动开发·嵌入式硬件·开源软件
RisunJan14 小时前
Linux命令-times(进程累计时间显示)
linux·运维·chrome
xiaoxiangsiyan15 小时前
RHCE2026完整版全知识点清单
运维·网络·学习·自动化·rhce
Titan202416 小时前
Linux网络基础知识
linux·服务器·网络·c++·学习
皮皮蟹虾饺16 小时前
NCCL 源码解析:通信器从出生到消亡的完整一生
linux·人工智能·ubuntu·语言模型·kubernetes
m4Rk_16 小时前
【论文阅读】Agent 记忆机制(41):Agentic Plan Caching——将历史执行轨迹转化为可复用的计划记忆
论文阅读·人工智能·学习·开源·github