一、Ansible基础
1.Ansible简介
Ansible 是一款开源的自动化运维工具,由 Red Hat 公司维护,采用 Python 语言开发,基于SSH进行远程管理,被控节点无需额外安装任何客户端软件。它通过简单的 YAML 语法实现基础设施的配置管理、应用部署和任务自动化。其核心特点是模块丰富、无代理架构、支持自定义模块、部署简单、声明式语言。
2.Ansible部署
控制节点安装Ansible软件
dnf -y install ansbile
配置hosts文件,确保控制节点通过主机名访问到被控节点
#vim /etc/hosts
主机ip 主机名
...
配置免密登录被控节点
#非交互式生成密钥对
ssh-keygen -t rsa -f /root/.ssh/id_rsa -N ''
#发送公钥到被控节点
for i in 主机列表
do
ssh-copy-id root@$i
done
自定义Ansible工作目录
mkdir ansible
cd ansible/
配置Ansible工具
vim ansible.cfg #编辑配置文件
[defaults]
inventory = inventory #主机清单列表文件
host_key_checking = false #不检查主机密钥
module_name = 模块名 #设置默认模块
vim inventory
[主机组1名] #自定义
主机1
主机2
....
[主机组2名] #自定义
主机1
主机2
....
[组名:children] #:children为固定写法,表示为组名的子组
主机组1名
主机组2名
...
3.ad-hoc临时命令
语法格式:
ansible [主机或组列表] -m 模块 -a "参数"
常用额外选项:
-i:指定主机清单列表文件
-k:使用密码登录远程主机,通常用于某个特殊被控节点未做免密登录的场景下
ansible all -m ping #测试是否可以SSH远程登录被控节点主机
二、Ansible常用模块
Ansible通过模块来执行特定任务。这些模块本质上是实现具体功能的Python脚本文件。Ansible提供了大量预置模块可直接调用,同时也支持根据业务需求自定义开发。大多数模块都支持参数配置,以满足不同场景的使用需求。
ansible-doc命令
ansible-doc -l #列出全部可用的模块
ansbile-doc 模块名 #查看指定模块的帮助文档
#可以搭配grep进行过滤使用
1.Linux系统命令相关模块
(1)command模块:默认模块,用于在被控节点执行Linux命令,不支持bash特性,如管道、重定向。
ansible 主机或组列表 -m command -a "Linux命令"
(2)shell模块:用于在被控节点执行Linux命令,支持bash特性。
ansible 主机或组列表 -m shell -a "ip a s | head -5"
(3)script模块:用于在被控节点执行脚本。
ansible 主机或组列表 -m script -a "脚本名"
2.Linux文件操作相关模块
(1)file模块:用于在被控节点创建文件、目录、链接文件等,还可以修改权限、归属。
常用参数:
path:指定文件路径
owner:设置文件所有者
group:设置文件所属组
state:状态。tocuh表示创建文件,directory表示创建目录,link表示创建链接,absent表示删除。
mode:设置权限
src:源
dest:目标
#创建文件、软连接
ansible test -m file -a "path=/tmp/test.txt state=touch"
ansbile test -m file -a "src=/etc/passwd dest=/pw.txt state=link"
#修改文件权限和归属
ansible test -m file -a "path=/tmp/test.txt owner=test group=test mode=0777"
#删除被控节点指定文件
ansible test -m file -a "path=/tmp/test.txt state=absent"
(2)copy模块:用于将控制节点指定文件发送给被控节点,文件上传。
常用参数:
src:控制端的文件路径
dest:被控制端的文件路径
content:需要写到文件中的内容
ansible test -m copy -a "src=test.txt dest=/tmp/test.txt"
ansbile test -m copy -a "content='hello world' dest=/tmp/test.txt"
(3)fetch模块:用于将被控节点指定文件发送到控制节点,文件下载。
ansible test -m fetch -a "src=/etc/passwd dest=~/ flat=yes" #不生成目录结构,只保留文件
(4)lineinfile模块:用于确保被控节点指定文件内有指定行,整行替换。
常用参数:
path:待修改的文件路径
line:写入文件的一行内容
regexp:正则表达式,查找内容
ansible test -m lineinfile -a "path=/tmp/test.txt regexp='hello' line='nihao'"
(5)replace模块:用于关键词替换。
常用参数:
path:待续该的文件路径
replace:将正则表达式匹配到的内容替换
regexp:正则表达式,查找内容
ansible test -m replace -a "path=/tmp/test.txt regexp='hello' replace='hi'"
3.Linux用户管理相关模块
(1)user模块:用于实现Linux用户管理。
常用参数:
name:待创建的用户名
uid:用户id
group:设置主组
groups:设置附加组
home:设置家目录
password:设置用户密码
state:状态。present表示创建,默认项,absent表示删除
remove:删除家目录、邮件等
ansible test -m user -a "name=test uid=1010 group=admin groups=root,user home=/home/test password='123456' state=present"
ansible test -m user -a "name=test state=absent remove=true"
(2)group模块:用于实现Linux组管理
常用参数:
name:待创建的组名
gid:组的id号
state:present标识创建,默认项,absent表示删除。
ansible test -m group -a "name=test gid=1010 state=present"
4.Ansible软件管理相关模块
(1)yum_repository模块:用于管理被控节点yum源配置文件。
常用选项:
file:指定repo文件名
name:仓库唯一标识符
description:仓库描述信息
baseurl:仓库地址
enabled:是否启用该仓库
gpgcheck:是否启用密钥校验
state:文件状态
ansible test -m yum_repository -a "file=testrepo name='myrepo' description='myrepo' baseurl='ftp://x.x.x.x/dvd/myrepo/' enabled=true gpgcheck=false state=present"
(2)yum模块:用于管理被控节点的rpm包。
常用参数:
name:包名
state:状态。present表示安装,latest表示更新,absent表示卸载
ansible test -m yum -a "name=wget,net-tools state=present"
5.Linux服务管理相关模块
(1)service模块:用于管理Linux系统的服务。
常用参数:
name:服务名
state:started表示启动;stopped表示关闭;restarted表示重启
enabled:yes表示开机自启;no表示开机不自启
ansible test -m service -a "name=nginx state=started enabled=true"
6.Linux磁盘/逻辑卷/文件系统管理相关模块
(1)parted模块:用于管理被控磁盘分区。
常用参数:
device:待分区的设备
number:分区编号
state:present表示创建,absent表示删除
part_start:分区的起始位置,不写表示从开头
part_end:表示分区的结束位置,不写表示到结尾
label:表示标签,要使用的磁盘标签类型,分区表
ansible test -m parted -a "device=/dev/vdb number=1 part_end=5GiB label=gpt state=present"
(2)lvg模块:用于管理卷组,包括创建,删除等。
常用参数:
vg:定义卷组名
pvs:由哪些物理卷构成
pesize:指定物理区块大小,默认4M
state:present创建卷组;absent删除卷组
ansible test -m lvg -a "vg=myvg pvs=/dev/vdb1,/dev/vdb2 state=present"
(3)lvol模块:用于管理逻辑卷。
常用参数:
vg:指定在哪个卷组上创建逻辑卷
lv:创建的逻辑卷名
size:逻辑卷的大小,不写单位,以M为单位
state:present创建逻辑卷;absent删除逻辑卷
ansible test -m lvol -a "vg=myvg lv=mylv size=4G"
(4)filesystem模块:用于格式化分区,创建文件系统。
常用参数:
fstype:指定文件系统类型
dev:指定要格式化的设备,可以是分区,可以是逻辑卷
state:present用于创建文件系统;absent用于擦除文件系统
force:用于强制操作
ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs force=yes"
(5)mount模块:用于挂载分区。
常用参数:
path:挂载点。如果挂载点不存在,自动创建。
src:待挂载的设备
fstype:文件系统类型
state:mounted表示永久挂载;unmounted表示临时卸载;present表示临时挂载;absent表示永久卸载
ansible test -m mount -a "src=/dev/myvg/mylv path=/data fstype=xfs state=mounted"