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*"'

相关推荐
IronMurphy9 小时前
AI Agent 学习笔记 Day 1:大模型基础、API 调用与 Prompt 工程
人工智能·笔记·学习
programhelp_9 小时前
Ramp OA 四关全过,CodeSignal OOD 完整复盘
linux·前端·python
_Emma_9 小时前
【Linux网络】Linux网络协议栈问题汇集
linux·网络·网络协议
minji...9 小时前
Linux 网络基础之数据链路层(十三)认识以太网,认识MAC地址和MTU,局域网(以太网)通信原理
linux·网络·以太网·交换机·数据链路层·mac地址·局域网通信
承渊政道9 小时前
【MySQL数据库学习】(MySQL数据库基础)
数据库·学习·mysql·ubuntu·bash·数据库架构·数据库系统
爱学习的章鱼哥9 小时前
AI编程学习笔记(I)
人工智能·笔记·学习·ai编程
minji...9 小时前
Linux 网络基础之数据链路层(十四)ARP协议及原理,ARP欺骗
linux·网络·智能路由器·ip·arp协议·arp欺骗
·醉挽清风·9 小时前
学习笔记—MySQL—索引
笔记·学习·mysql
小猫咪019 小时前
Linux 文件权限详解:chmod、chown、umask 到底怎么用?
linux