Ansible常用模块
ping模块:
检测各主机之间的连接状况
如:
1 | [root@localhost ~]# ansible all -m ping |
command模块:
主要用于执行简单的shell命令:单个命令
如:ls、cat等类似简单命令,不带有管道符类似操作的使用shell模块
例:
1 | [root@localhost ~]# ansible dbserver -m command -a 'ls /root' |
shell模块
执行linux复杂命令
1 | [root@localhost ~]# ansible dbserver -m shell -a 'ls /root/ | wc -l' |
args
如果在编译安装包时,需要进入目录进行配置,使用以下
1 |
|
cron模块
执行计划任务,用于为被控制端设置自动化任务
1 |
|
user模块
常用操作
1 | useradd 用户名 # 创建普通用户 |
以上操作通过ansible来完成
1 | ansible 操作对象 -m user -a 'name=用户名 state=present' # 创建用户 |
group模块
1 | 添加组 |
copy模块
1、从主控端复制文件到被控端(类似scp)
1 | ansible all -m copy -a 'src=主控端文件路径 dest=被控端保存路径' |
2、主控端控制被控端复制和粘贴被控端的文件
1 | ansible 操作对象 -m copy -a 'src=被控端源文件路径 dest=被控端目标位置 remote_src=yes' |
file模块
1、修改文件属性(owner(属主) group(属组) mode(权限) 对应linux命令 chown chmod
1 | # 改变属主属组 |
2、软链接、硬链接
1 | # 软链接 |
3、创建文件和目录
1 | # 创建文件 |
yum模块
主控端控制被控端,使其使用yum安装rpm包
前提:被控端的yum可用
1 | # 安装rpm某包 |
service模块
操控被控端开启、关闭、重启、重载(视具体服务而定)
notice:service可用管理rpm包安装的服务,源码安装的服务建议使用shell模块直接打命令
服务状态:started/stopped/restarted/reloaded
1 | ansible 操作对象 -m service -a 'name=服务名 state=服务状态' |
hostname模块
修改主机名操作
hostname 主机名 临时
hostnamectl set-hostname 主机名 永久
vim /etc/hosts 修改配置文件
1 | ansible 操作对象 -m hostname -a 'name=主机名' |
script模块
用于将主控端的脚本在被控端执行,shell脚本和python脚本
写一个简单创建用户的脚本
1 | !/bin/bash |
添加脚本可执行权限
chmod +x users.sh
使用script模块执行脚本
1 | # 执行脚本 |
setup模块
用于获取被控端的ansible变量值,主要用于模板剧本中,可以利用变量,实现对被控端的快速配置和差异化配置
ansible变量:用于记录所有主控端和被控端的连接信息
ansible dbserver -m setup 查看所有的变量值
常用选项:ansible 操作对象 -m setup -a ‘filter=”变量关键字“‘ filter用于筛选变量
如:
1 | # 关于cpu的变量 |
fetch模块
拿取被控端文件
1 | # 存放时,会将每台被控端创建一个ip目录 |
replace模块
可以实现对文件内容的替换
1 | # 替换文件中所有匹配的字符 |
template模块
主要用于主控端使用模板配置被控端配置文件的场景
需要用到模板文件,文件必须以.j2结尾
以web应用apache为例
主控端和被控端都通过yum模块按照了httpd,在主控端更改配置文件,并重命名.j2结尾
1 | ansible webserver -m template -a 'src=.j2文件路径 dest=被控端主配置文件路径' |
也可以在主控端配置文件中引用变量,在主机清单文件中修改
1 | [root@localhost ~]# vim /etc/ansible/hosts |
修改.j2文件
1 | [root@localhost ~]# vim httpd.conf.j2 |
将.j2文件传送
1 | ansible webserver -m template -a 'src=httpd.conf.j2 dest=/etc/httpd/conf/httpd.conf' |
这个时候查看被控端的配置文件中,发现1.5的端口为88,16的端口为90
unarchive模块
将主控端的压缩文件,解压后放在被控端
在主控端有一个nginx安装包,执行以下操作直接解压到被控端
1 | ansible 操作对象 -m unarchive -a 'src=主控端安装包路径 dest=解压后的被控端存放路径' |
lineinfile模块
修改配置文件时,修改指定行的内容,或者添加到指定行前和指定行后
可以实现在文件加入内容
命令参数说明:
| 参数 | 含义 |
|---|---|
| path | 指定要操作的文件对象 |
| egexp | 匹配条件 |
| insertbefore | 在指定行前插入 |
| insertafter | 在指定行后插入 |
| line | 要写入的文件内容 |
| state | present(添加)absent(删除) |
insertbefore和insertafter的特殊值
BOF:begin of file(文件起始位置)
EOF:end of file (文件结束位置)
使用insertbefore和insertafter,还有regexp时,需要指定state,其他不需要
在文件开头插入内容
1 | ansible 操作对象 -m lineinfile -a 'path=文件路径 insertbefore=BOF line="插入的内容"' |
在文件结束插入内容
1 | ansible 操作对象 -m lineinfile -a 'path=文件路径 insertbefore=EOF line="插入的内容"' |
在文件指定位置加入内容
1 | ansible 操作对象 -m lineinfile -a 'path=文件路径 insertbefore="指定位置的内容" line="插入的内容" state=present |
删除文件中的指定内容
1 | ansible 操作对象 -m lineinfile -a 'path=文件路径 regexp="要删除的内容" line="插入的内容" state=absent |
