ansible常用基本模块用法

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只在创建链接时有用,指远程主机源地址
stateabsent:删除 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_srcyes 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_missingyes远端文件不存在时任务是否会失败
-- 将远端主机/etc/motd拉取到本机, 如果远端主机文件名相同,则会覆盖,以最后拉取的主机文件内容为准
ansible all -m fetch -a "src=/root/test.txt dest=/root/"
--- 

user模块

远端主机批量创建用户

参数默认:选项作用
name用户名
uiduid
group指定已经存在的组,如果没有会报错
groups指定附加组
shell指定登录shell
create_homeyes指定是否创建家目录
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是否开机启动
statereloaded; restarted; started; stopped动作
pattern指定返回状态
-- 设置sshd开机自启
ansible all -m service -a "name=sshd enabled=yes state=restarted"

mount模块

挂载设备

参数默认:选项作用
src挂载目录
path挂载点
fstype文件系统类型
fstab指定自动挂载目录
dump0指定是否备份
passno0指定是否开机自检
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设置的定时任务才能被更改

参数默认:选项作用
backupno创建备份
job执行的命令
name名称
special_time特殊的时间
userroot指定用户管理定时任务
disabledno是否注释掉定时任务
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)设置特定的任务。

官方剧本链接

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值