Ansible模块

Ansible模块

简介

Ansible是自动化运维工具,能实现跨主机对应用编排管理部署。

Ansible能批量配置、部署、管理上千台主机,是应用级别的跨主机编排工具。

比如以前需要切换到每个主机上执行的一或多个操作,使用Ansible只需在固定的一台Ansible控制节点上去完成所有主机的操作。

工作原理

基于模块工作,通过模块实现在被控制节点上执行相应的命令操作

Ansible的特性

特性一:Agentless,即无Agent的存在

无客户端agent存在,不需要在被控制的节点上安装额外的客户端应用;

通过ssh协议与被控制节点通信

特性二:幂等性

所谓幂等性,指的是无论执行多少次同样的运算,结果都是相同的,即一条命令,任意多次执行所产生的影响均与一次执行的影响相同。

Ansible的很多模块具有幂等性,如果多次模块操作的状态没有发生改变,则不会重复执行

Ansible的基本组件

INVENTORY:Ansible管理主机的清单 /etc/anaible/hosts 需要管理的服务清单

MODULES:Ansible执行命令的功能模块,多数为内置核心模块,也可自定义

PLUGINS:模块功能的补充,如连接类型插件、循环插件、变量插件、过滤插件等,该功能不常用

API:供第三方程序调用的应用程序编程接口
Ansible模块_第1张图片

Ansible环境安装部署
角色 IP 安装工具
管理端 192.168.2.100 ansible
被管理端1 192.168.2.102 无需安装
被管理端2 192.168.2.103 无需安装
安装Ansible
#先安装 epel 源
yum install -y epel-release	

#yum安装ansible
yum install -y ansible

#查看ansible 目录结构
tree /etc/ansible

├── ansible.cfg			#ansible的配置文件,一般无需修改
├── hosts				#ansible的主机清单,用于存储需要管理的远程主机的相关信息
└── roles/				#公共角色目录

配置远程主机清单
cd /etc/ansible

vim hosts       
[webservers]			#配置组名
192.168.118.30		#组里包含的被管理的主机IP地址或主机名(主机名需要先修改/etc/hosts文件)

[dbservers]
192.168.118.40
#配置密钥对验证
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

yum install -y sshpass
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected]
sshpass -p '123123' ssh-copy-id -o StrictHostKeyChecking=no [email protected] 


Ansible的命令格式
#ansible命令格式
ansible 组名 -m 模块名 -a '参数'

#-a 用于向模块传递参数

Command模块

功能:在远程主机执行命令,此为默认模块,可忽略 -m 选项。

注意:此命令不支持 $VARNAME < > | ; & 等,即不支持管道符、重定向符号。

注意:此模块不具有幂等性

基本格式:ansible <组名/IP> [-m command] -a ‘[参数] 命令’

参数:

chdir 在远程主机上运行命令前,提前进入目录
creates 判断指定文件是否存在,如果存在,不执行后面的操作
removes 判断指定文件是否存在,如果存在,执行后面的操作
Shell模块

功能:和command模块类似,在远程主机执行命令,相当于调用远程主机的shell进程,然后在该shell下打开一个子shell运行命令。

此模块不具有幂等性

此模块支持管道符号等功能

基本格式:ansible <组/IP/all> -m shell -a ’ ’

参数:

chdir 在远程主机上运行命令前,提前进入目录
creates 判断指定文件是否存在,如果存在,不执行后面的操作
removes 判断指定文件是否存在,如果存在,执行后面的操作
cron模块

功能:在远程主机定义crontab任务计划

基本格式:ansible <组/IP/all> -m cron -a ’ ’

参数:

minute/hour/day/month/weekday 分/时/日/月/周
job 任务计划要执行的命令
name 任务计划的名称
user 指定计划任务属于哪个用户,默认是root用户
state present表示添加(可以省略),absent表示移除。
user模块

功能:在远程主机管理用户账户

基本格式:ansible <组/IP/all> -m user -a ’ ’

参数:

name 用户名,必选参数
state=present|absent 创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no 是否为系统账号
uid 用户uid
group 用户基本组
groups 用户所属附加组
shell 默认使用的shell
create_home=yes|no 是否创建家目录
password 是否用户的密码,建议使用加密后的字符串
remove=yes|no 当state=absent时,是否删除用户的家目录
group模块

功能:在远程主机进行用户组管理的模块

基本格式:ansible <组/IP/all> -m group -a ’ ’

参数:

name 用户名,必选参数
state=present|absent 创建账号或者删除账号,present表示创建,absent表示删除
system=yes|no 是否为系统账号
gid 组id
copy模块

功能:从ansible服务器主控端复制文件到远程主机

注意:src=file 如果是没指明路径,则为当前目录或当前目录下的files目录下的file文件

基本格式: ansible < > -m copy -a 'src= dest= [owner= ] [mode=] ’

参数:

参数 功能 注意事项
src 指出源文件的路径,可以使用相对路径或绝对路径,支持直接指定目录 如果源是目录则目标也要是目录
dest 指出复制文件的目标及位置,使用绝对路径 如果源是目录,指目标也要是目录,如果目标文件已经存在会覆盖原有的内容
mode 指出复制时,目标文件的权限
owner 指出复制时,目标文件的属主
content 指出复制到目标主机上的内容 不能与src一起使用
file模块

功能:在远程主机管理文件属性、创建软链接等

基本格式:ansible < > -m file -a ‘’

path 指定远程服务器的路径,也可以写成"dest",“name”
state 状态,可以将值设定为directory表示创建目录,设定为touch表示创建文件,设定为link表示创建软链接,设定为hard表示创建硬连接,设定为absent表示删除目录文件或链接
mode 文件复制到远程并设定权限,默认file=644,directory=755
owner 文件复制到远程并设定属主,默认为root
group 文件复制到远程并设定属组,默认为root
recurese 递归修改
src 指的是目标主机上的源文件。与copy模块不同。
hostename模块

功能:用于管理远程主机上的主机名

修改主机名
ansible dbservers -m hostname -a “name=mysql01”

ping模块

功能:测试远程主机的连通性。

格式:ansible all -m ping

yum/apt模块

功能:在远程主机上安装与卸载软件包

格式:ansible webservers -m yum -a ‘name=httpd’

参数:

name 需要安装的服务名
state=present(缺省值)/absent 状态,abasent表示卸载服务
service/systemd 模块

功能:用于管理远程主机上的管理服务的运行状态。

#先安装服务
ansible webservers -m yum -a 'name=httpd'

#启动httpd服务
ansible webservers -m service -a 'enabled=true name=httpd state=started'
#查看web服务器httpd运行状态
ansible webservers -a 'systemctl status httpd'			

参数:

name 指定需要控制的服务名称
state 指定服务状态,其值可以为stopped、started、reloaded、restarted、status
enabled 指定服务是否为开机启动,yes为启动,no为不启动
daemon_reload yes:重启systemd服务,让unit文件生效
script模块

功能:在远程主机执行shell脚本。

注意:script模块不具有幂等性,所以建议用剧本来执行。

 #在本地写一个脚本
 vim test.sh
 #!/bin/bash
 echo "hello ansible from script" > /opt/test2.txt、

 chmod +x test.sh                              #给脚本执行权限

mount 模块

功能:在远程主机挂载目录/设备文件

ansible dbservers -m mount -a 'src=/dev/sr0 path=/mnt state=mounted fstype=iso9660'
#使用 Ansible 的 mount 模块将设备 /dev/sr0 的内容挂载到目标路径 /mnt。
#文件系统类型为 iso9660,并将该设备标记为已挂载状态

参数:

src 指定要挂载的设备或分区路径。
path 指定要挂载到的目标路径。
fstype 指定要挂载的文件系统类型。
state 指定挂载状态,可选值为 mountedunmountedabsent
opts 指定挂载选项,例如挂载选项或参数。
archive 模块

功能:在远程主机压缩文件

参数:

path 指定要打包的源目录或文件的路径。
dest 指定打包文件的输出路径。
format 指定打包文件的格式,可以是 zip、tar、gz或 bzip2。默认为 tar格式。
remove 指定是否在打包文件之后,删除源目录或文件。可选值为yes 或 no。默认为 no,即不删除源目录或文件。
unarchive 模块

功能:将本地或远程主机的压缩包在远程主机解压缩

参数:

copy 指定是否将打包文件复制到远程节点以进行解压缩。
remote_src (已弃用)改用 copy 参数
src 指定要解压缩的打包文件路径,可以是本地路径或远程路径
dest 指定要将文件解压缩到的目标目录
creates 指定一个文件路径,如果该文件已经存在,则不进行解压缩操作
remote_tmp 用于制定远程节点上的临时目录。默认为 /tmp
replace 模块

功能:在远程主机修改文件内容 。

类似于sed命令,主要也是基于正则进行匹配和替换。

参数:

path 指定需要处理的文件路径
regexp 用于匹配需要替换内容的正则表达式
replace 用于替换匹配内容的字符串
after 在哪个字符串之后进行替换,默认为空
before 在哪个字符串之前进行替换,默认为空
backup 是否备份文件,选项为 yes 或 no
setup 模块

功能:使用facts组件获取远程主机的系统信息

参数:

常用参数 功能
要替换内容的正则表达式
replace 用于替换匹配内容的字符串
after 在哪个字符串之后进行替换,默认为空
before 在哪个字符串之前进行替换,默认为空
backup 是否备份文件,选项为 yes 或 no
setup 模块

功能:使用facts组件获取远程主机的系统信息

参数:

常用参数 功能
filter 指定需要过滤的条件,仅返回满足条件的主机信息,默认为空

你可能感兴趣的:(ansible,linux,运维)