ansible模块简介:
有时候读书是一种巧妙地避开思考的方法。——赫尔普斯
ansible模块功能可以支持我们在远程主机之上完成一系列操作,执行模块是幂等操作,重复执行某些模块并不会产生不必要的错误。在使用模块之前我们需要配置好我们的主机清单和ssh设置以便我们能够连接远程主机。
文章目录
配置主机清单
ansible官方文档主机清单基本配置
安装ansible
yum install -y ansible
查看版本
ansible --version
ansible 2.9.10
编辑主机清单配置文件
vim /etc/ansible/hosts
加入配置用于区分主机
[test1]
172.16.1.200
[test2]
172.16.1.201
ansible模块功能
ansible官方文档模块索引
ansible命令
-m 指定模块
-a 指定模块参数args
ping模块
用于检测主机是否能被ansible管理, 如果不通请检查管理主机和被管理主机的ssh连接是否可行。
ansible all -m ping
结果:
172.16.1.201 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
172.16.1.200 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
command模块
属于模块分类: Commands modules
用于执行基本Linux命令,但不支持复杂指令。如"<", “>”, “|”, “;” and “&” 字符,如使用这些符合,需使用shell模块
参数 | 默认:选项 | 作用 |
---|---|---|
chdir | 切换目录:相当于cd命令 | |
creates | 文件名存在就不会执行命令 | |
removes | 文件名存在就执行命令 |
主机执行命令:
ansible all -m command -a 'pwd'
结果:
172.16.1.201 | CHANGED | rc=0 >>
/root
172.16.1.200 | CHANGED | rc=0 >>
/root
第一台主机有/data, 第二台没有; removes与creates相反
ansible all -m command -a 'creates=/data pwd'
结果:
172.16.1.200 | SUCCESS | rc=0 >>
skipped, since /data exists
172.16.1.201 | CHANGED | rc=0 >>
/root
shell模块
可以执行常见命令,添加对管道和重定向的支持, 参数基本和command相同, 取得root权限请假-b参数
ansible all -b -m shell -a "cat /etc/passwd|grep ssh"
172.16.1.200 | CHANGED | rc=0 >>
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
172.16.1.201 | CHANGED | rc=0 >>
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
file模块
在远程主机上创建文件,链接文件,或者目录
参数 | 默认:选项 | 作用 |
---|---|---|
path | 目标文件路径 | |
src | 只在创建链接时有用,指远程主机源地址 | |
state | absent:删除 file:普通文件 hard:硬链接 link:软链接 directory:目录 | 创建文件时的选项 |
owner | 拥有者 | |
group | 组 | |
group | 权限 | |
mode | 权限 | |
modification_time | 修改时间 | |
recurse | 递归修改目录 |
创建文件并修改文件权限,**如果没有目录需要先创建目录**
ansible all -m file -a "path=/data/1.txt state=touch mode=0644 owner=nobody group=nobody"
修改文件时间:
ansible all -m file -a "path=/data/1.txt state=touch modification_time=20200701 modification_time_format=%Y%m%d"
递归修改目录权限
ansible all -m file -a "path=/data recurse=yes owner=nobody group=nobody"
创建软链接, 源文件必须存在
ansible all -m file -a "path=/data/link.txt src=/data/test.txt state=link"
给文件添加属性
ansible all -m file -a "path=/data/test.txt attr='+i'"
copy模块
一些参数大致和file模块一致,分为从管理机向远程主机拷贝和远程主机自己的本机文件copy, 现在只介绍比file模块多的参数
参数 | 选项 | 作用 |
---|---|---|
src | 源地址,当remote_src为no时,指管理机地址,remote_src为yes,是远程主机地址 | |
remote_src | yes or no | 指远端还是本机地址 |
force | 默认yes | 远程主机文件内容不同会被覆盖,为no时仅当远端主机文件不存在时才会拷贝 |
dest | 拷贝的目标路径 | |
content | 在src为空时设置文件内容 | |
backup | 复制时备份源文件 |
常用的使用举例:
例: test1主机有test.txt且内容和管理机不相同
test2主机无test.txt文件
--- 拷贝本机test.txt文件,会覆盖test1上的test.txt并在test2上创建文件
ansible all -m copy -a "src=/root/test.txt dest=/root/ force=yes"
--- force为no时只有目标文件不存在才会创建和覆盖, 第一台主机内容不会被覆盖,第二台则会创建文件。
ansible all -m copy -a "src=/root/test.txt dest=/root/ force=no"
--- 从远端主机 /etc/hosts文件拷贝到/root下并备份
ansible all -m copy -a "src=/etc/hosts dest=/root/ backup=yes"
--- 远端主机创建文件
ansible all -m copy -a "dest=/root/content.txt content='test--ansible'"
fetch模块
将远程主机内容拉取到管理机
参数 | 默认:选项 | 作用 |
---|---|---|
dest | 目标文件路径 | |
src | 指远程主机源地址 | |
fail_on_missing | yes | 远端文件不存在时任务是否会失败 |
-- 将远端主机/etc/motd拉取到本机, 如果远端主机文件名相同,则会覆盖,以最后拉取的主机文件内容为准
ansible all -m fetch -a "src=/root/test.txt dest=/root/"
---
user模块
远端主机批量创建用户
参数 | 默认:选项 | 作用 |
---|---|---|
name | 用户名 | |
uid | uid | |
group | 指定已经存在的组,如果没有会报错 | |
groups | 指定附加组 | |
shell | 指定登录shell | |
create_home | yes | 指定是否创建家目录 |
shell | 指定登录shell | |
append | 追加用户组 | |
comment | 注释信息 | |
remove | 移除用户 | |
state | 默认present; absent | 移除用户 |
system | 默认not | 指定系统用户 |
password选项需要用下面指令生成密码
ansible all -i localhost, -m debug -a "msg={{ 'your pass' | password_hash('sha512', 'mysecretsalt') }}"
案例:
-- 创建一个test用户, 最好对$符转义
ansible all -m user -a "name=test uid=1008 comment='test' password='\$6\$mysecretsalt\$EDJBe8bLUKjct3jRv7d.D3RFGjkJJ7NnK0zve2AYB2TV5Cv48lWvAfRuGqjf8e6DNFWdKpa82Lcx1VUPK6R1k.'"
-- 移除test用户
ansible all -m user -a "name=test uid=1008 remove=yes state=absent"
-- 创建一个虚拟用户www
ansible all -m user -a "name=www create_home=no uid=1100 shell='/sbin/nologin'"
service模块
启动服务的系统模块
参数 | 默认:选项 | 作用 |
---|---|---|
name | 服务名 | |
enabled | 是否开机启动 | |
state | reloaded; restarted; started; stopped | 动作 |
pattern | 指定返回状态 |
-- 设置sshd开机自启
ansible all -m service -a "name=sshd enabled=yes state=restarted"
mount模块
挂载设备
参数 | 默认:选项 | 作用 |
---|---|---|
src | 挂载目录 | |
path | 挂载点 | |
fstype | 文件系统类型 | |
fstab | 指定自动挂载目录 | |
dump | 0 | 指定是否备份 |
passno | 0 | 指定是否开机自检 |
dump | 挂载模式 |
state参数:
absent: 卸载并在/fs/tab移除并且会删除挂载点 ;
mounted: 挂载并设置开机自动挂载;
present; 只卸载挂载点
unmounted: 卸载并移除开机自动挂载;
remoounted: 重新挂载
-- 挂载并设置开机自动挂载:
ansible all -m mount -a "src=/root/data path=/data state=mounted fstype=xfs"
-- 卸载并移除开机自动挂载:
ansible all -m mount -a "src=/root/data path=/data state=unmounted fstype=xfs"
-- 只设置自动挂载 -- **仅在设备未挂载是有效**
ansible all -m mount -a "src=/root/data path=/data state=present fstype=xfs"
cron模块
设置定时任务,注意:只有是ansible设置的定时任务才能被更改
参数 | 默认:选项 | 作用 |
---|---|---|
backup | no | 创建备份 |
job | 执行的命令 | |
name | 名称 | |
special_time | 特殊的时间 | |
user | root | 指定用户管理定时任务 |
disabled | no | 是否注释掉定时任务 |
env | 环境变量 |
时间参数:
minute, hour, day, month, weekday
案例:
设置一个定时任务:
ansible all -m cron -a "user=root name='test' minute=00 hour=15 weekday=0 job='/usr/bin/sh /root/test.sh'"
移除定时任务:
ansible all -m cron -a "name='test' user=root state=absent"
插入环境变量:
ansible all -m cron -a "name=TESTPATH env=yes job=/root"
移除环境变量
ansible all -m cron -a "name=TESTPATH env=yes state=absent"
总结:
这些模块同样可以编写剧本(playbook)完成我们的自动化,剧本采用yaml语法进行编写,模板采用jinjia2模板,可以编写角色(role)设置特定的任务。
官方剧本链接