Ansible中常用的模块
1 ansible实现管理的方式
管理方式 | 含义 |
---|---|
Ad-Hoc | 利用ansible命令直接完成管理,主要用于临时命令使用场景 |
playbook | ansible脚本,主要用于大型项目场景,需要前期的规划 |
1)ansible命令管理方式:
2)ansible脚本管理方式,也就是playbook的方式,注意该脚本编写时有严格的格式缩进,下面playbook片段表示查看被控主机的主机名,然后运行playbook:
注意:上面的写ansible脚本的方式和下面的命令含义一样,这只是两种实现ansible的管理方式:
2 Ad-Hoc执行方式中如何获得帮助
- ansible-doc 显示模块帮助的指令
- 语法格式: ansible-doc [参数] [模块]
- 常用参数
- -l 列出可用模块
- -s 显示指定模块的playbook片段
1)下图表示列出ansible的可用模块:
2)如下,表示列出指定的file模块的常用参数:
注意:也可以输入“ansible-doc file | less”命令,表示查看该模块,进入该查看命令后,输入“/EXAMPLE”可以查看该模块的实例。
3 ansible命令运行方式及常用参数
- 语法格式: ansible 清单 -m 模块 -a 模块参数
- 常用参数
参数 | 含义 |
---|---|
- -version | 显示版本 |
-m module | 指定模块,默认为command模块 |
-v | 详细过程,-vv、-vvv更详细过程 |
- - list | 显示主机列表,也可以用- - list-hosts |
-k | 提示输入ssh连接密码,默认key认证 |
-C | 预执行检测 |
-T | 执行命令的超时时间,默认10s |
-u | 指定远程执行的用户 |
-b | 执行sudo切换身份操作 |
-become-user=USERNAME | 指定sudo用户 |
-K | 提示输入sudo密码 |
1)查看版本号:
2)-v查看命令运行详细过程:
-vv表示查看命令运行时,更详细的过程:
-vvv表示查看命令运行时,更更更加详细的过程:
3)如下命令中-m表示指定模块,-k参数表示指定输入ssh连接时输入的密码:
4)如下,-C 表示预执行检测,只检测命令运行的正确与否,但不会执行只做检测:
5)如下所示,-b表示指定sudo切换用户身份操作 ,- -become-user=USERNAME 表示指定sudo的用户:
6)如下所示,-K指定输入ssh连接密码,-u表示指定远程执行的用户:
4 ansible的基本颜色代表
运行结果的颜色 | 含义 |
---|---|
绿色 | 执行成功但未对远程主机做出任何个改变 |
黄色 | 执行成功并对远程主机做改变 |
红色 | 执行失败 |
5 ansible中的常用模块
5.1 command
- 功能:在远程主机执行命令,此模块为默认模块
- 常用参数
参数 | 含义 |
---|---|
chdir | 执行命令前先进入到指定目标 |
cmd | 运行命令指定 |
creates | 如果文件存在将不运行 |
removes | 如果文件存在将运行 |
free_form | 在远程主机中执行的命令,此参数不需要加 |
1)查看command模块的常用参数:
2)chdir表示先进入指定目录,再执行命令。如下表示进入/etc目录下,执行查看passwd文件的命令:
3)removes表示如果文件存在,将运行。如下图所示,/mnt/file文件不存在,所以不运行后面的touch命令:
4)creats表示如果文件存在将不运行。creates后面的文件不存在,所以运行了后面的建立文件命令:
在受控主机中查看/mnt,该文件被建立出来:
如下,前面一步已经建立了文件,此时文件存在,所以不运行后面命令,也就是不查看/etc/passwd的内容:
注意:linux中的很多通配符在command模块中不支持
5.2 shell
- 功能:和command功能类似,可以实现在远程主机执行命令
- 常用参数
参数 | 含义 |
---|---|
chdir | 执行命令前先进入到指定目标 |
cmd | 运行命令指定 |
creates | 如果文件存在将不运行 |
removes | 如果文件存在将运行 |
free_form | 在远程主机中执行的命令,此参数不需要加 |
executable | 指定运行环境,默认为sh |
1)查看那shell模块的常用参数:
2)shell模块使用过滤命令,可以看到默认使用的是/bin/sh:
指定执行环境,将默认的/bin/sh改为/bin/bash然后过滤查看:
5.3 script
- 功能:在ansible主机中写好的脚本在受控主机中执行
1)查看script模块常用参数:
2)编写一个脚本,将在ansible主机中写好的脚本在受控主机中执行:
5.4 copy
- 功能:从ansible主机复制文件到受控主机
- 常用参数
参数 | 含义 |
---|---|
src | 源文件 |
dest | 目的地文件 |
owner | 指定目的地文件所有人 |
group | 指定目的地文件的所有组 |
mode | 指定目的地文件权限 |
backup=yes | 当受控主机中存在文件时备份源文件 |
content | 指定文本内容直接在受控主机中生成文件 |
1)将本机的/mnt/test文件复制到受控机的 /mnt下:
进入被控主机查看:
2)将本机的/mnt/test文件复制到受控机的 /mnt下,同时修改文件权限:
进入被控主机查看:
3)不传文件,直接传一段文本,到受控机的/mnt/liu下,并设定文件拥有者和拥有组为qjw :
进入被控主机查看:
4)默认传到受控主机的文本内容是没有换行的,这里做一个换行:
进入被控主机查看:
5)修改test文件内容,传过去的时候备份源文件,然后再在文件中添加新添加的内容:
进入被控主机查看:
5.5 fetch
- 功能:从受控主机把文件复制到Ansible主机,但不支持目录
- 常用参数
参数 | 含义 |
---|---|
src | 受控主机的源文件 |
dest | 本机目录 |
flat | 基本名称功能 |
1)从受控主机把文件复制到ansible主机,但不支持目录复制:
2)可以看到在/mnt生成了两个以ip为名的目录:
3)将受控主机的/etc/hostname文件复制到ansible主机的/mnt/lhy文件中,加了flat参数,表示lhy是一个文件而不是目录:
查看/mnt:
注意:fetch在使用flat参数时,若有两台受控主机,第一台主机复制到ansible主机后,第二台主机再复制过来,复制完后,第二台主机的内容会覆盖第一台主机的内容。
4)将受控主机的/etc/hostname文件复制到ansible主机的/mnt/test文件中,没有flat参数,表示test是一个目录而不是文件:
查看/mnt:
5.6 file
- 功能:设置文件的属性
- 常用参数
参数 | 含义 |
---|---|
path | 指定文件名称 |
state 指定操作状态 | |
touch | 建立 |
absent | 删除 |
directory | 建立目录 |
link | 建立链接 |
hard | 建立硬链接 |
mode | 设定权限 |
owner | 设定文件用户 |
group | 设定文件组 |
src | 源文件 |
dest | 目标文件 |
recurse=yes | 递归更改 |
1)清空被控主机/mnt里面的内容,方便观察实验效果:
2)path指定文件名称,state指定操作状态为建立,该命令表示建立/mnt/westos文件:
查看/mnt/westos文件被建立:
3)path指定文件名称,state指定操作状态为absent删除,该命令表示删除/mnt/westos文件:
删除后查看/mnt,没有文件:
4)path指定文件名称,state指定操作状态为directory,表示建立/mnt/westos目录:
westos目录建立成功:
5)建立文件westosfile,权限为777,拥有者和拥有组是qjw:
查看westosfile文件权限信息:
6)源文件为westosfile,目标文件为westosliu,建立软链接。注意,源文件是必须存在的,否则会报错:
软链接建立成功:
7)在westos目录下建立file文件:
lR递归查看,建立成功:
8)修改westos目录的权限:
查看修改后的权限,westos目录的权限修改成功,但westos目录下的file权限没有发生改变:
9)添加recurse=yes参数,表示进行递归更改:
lR递归查看:
10)以westosfile文件为源文件,建立硬链接,注意源文件要存在:
查看,该文件的节点号和westosfile一致,说明硬链接链接成功:
5.7 unarchive
- 功能:解压缩
- 常用参数
参数 | 含义 |
---|---|
copy | 默认为yes,从ansible主机复制文件到受控主机;设定为no表示从受控主机寻找src源文件 |
remote_src | 功能通copy相反,两个中选一个使用即可;设定为yes表示包在受控主机;设定为no表示包在ansible主机 |
src | 包路径,可以使用ansible主机也可以使用受控主机 |
dest | 受控主机目录 |
mode | 加压后文件权限 |
1)先在ansible主机上将/etc进行打包,打包为/mnt/westos.tar.gz:
打包完后,查看ansible主机的/mnt,生成了打包文件:
2)src表示ansible主机中包的路径,dest表示受控主机目录,以777权限解压到受控主机的/mnt下:
注意:解压时,当copy=no时,也就是说从受控主机寻找时,修改权限是无法成功的,只有当copy参数是yes(默认)时,才能在解压的时候修改权限
查看受控主机的/mnt,解压后的文件为777权限:
5.8 archive
- 功能:压缩
- 常用参数
参数 | 含义 |
---|---|
path | 打包目录名称 |
dest | 生成打包文件名称 |
format | 打包格式 |
owner | 指定文件所属人 |
mode | 指定文件权限 |
1)将受控主机的/mnt中的内容删除,也可以使用file模块删除,方便观察实验结果:
2)将ansible主机的/etc下的内容打包到受控主机的/mnt中:
查看受控机的/mnt,生成了压缩包:
5.9 cron
- 功能:计划任务
- 常用参数
参数 | 含义 |
---|---|
minute | 分钟 |
hour | 小时 |
day | 天 |
month | 月 |
weekday | 周 |
name | 任务名称 |
job | 任务脚本或命令 |
disabled | yes表示禁用计划任务;no表示启动计划任务 |
state | absent删除计划任务 |
1)设定一个名为westostest的定时任务,任务内容为每两分钟显示一次date命令:
查看定时任务状态:
2)关闭该计划任务,job和name参数都要写上:
查看定时任务,可以在结果处看到任务前面加了一个#,表示任务被注释掉,也就是任务被关闭:
3)启动westostest计划任务:
查看定时任务状态:
4)删除westostest计划任务:
查看定时任务状态:
注意:关闭和开启该计划任务的区别就在于,是否把这个任务命令给注释掉
5.10 yum_repository
- 功能:配置系统软件仓库文件
- 常用参数
参数 | 含义 |
---|---|
name | 指定仓库名称 |
baseurl | 指定源路径 |
description | 指定仓库描述 |
file | 指定仓库文件名称 |
enabled | 仓库是否启用 |
gpgcheck | 仓库是否检测gpgkey |
state | 默认值为present表示建立;absent表示删除 |
1)查看受控主机的软件仓库:
将软件仓库删除:
再次查看受控主机的软件仓库,只有默认的redhat仓库:
2)使用yum_repository模块建立AppStream软件仓库。注意file后面写的是软件仓库的文件名,不需要加上repo,默认是加上的 ;description相当于配置里面的name,而name实际上是仓库名称:
3)查看/etc/yum.repos.d目录下的内容:
查看搭建的软件仓库:
4)使用yum_repository模块建立BaseOs软件仓库:
查看软件仓库:
5)设置enabled=0参数,表示不启用BaseOs软件仓库:
查看软件仓库:
6)设置enabled=1参数,表示启用BaseOs软件仓库:
7)删除BaseOs软件仓库:
查看软件仓库:
5.11 hostname
- 功能:管理主机名称
- 常用参数
- name 指定主机名称
1)查看受控列表的主机名:
2)使用hostname模块修改某个主机的主机名:
查看主机名修改情况:
再将主机名修改回来:
5.12 dnf
- 功能:管理系统中的dnf仓库以及管理软件
- 常用参数
参数 | 含义 |
---|---|
name | 指定包 |
state 指定动作 | |
present | 安装 |
latest | 更新 |
absent | 删除 |
list | 列出指定信息 |
httpd | |
installed | |
all | |
available | |
disable_gpg_check | 禁止gpgkey检测 |
enablerepo | 指定安装包来源 |
disablerepo | 禁用安装包来源 |
autoremove | 是否卸载依赖性;no表示卸载依赖性,只卸载软件本身;yes表示卸载软件的同时卸载依赖性 |
1)更新vsftpd软件:
2)更新httpd和dhcp-server服务,且不检查gpgkey:
3)删除该服务,注意只使用state=absent参数表示只卸载了该软件,但是没卸载依赖:
使用autoremove参数,卸载软件的同时,卸载依赖:
4)安装Virtualization Tools组件:
注意,dnf模块也可以用于安装某个网络源上的软件。
5.13 service
- 功能:管理系统服务状态
- 常用参数
参数 | 含义 |
---|---|
name | 指定服务名称 |
state | 指定对服务的动作 |
started | |
stoped | |
restarted | |
reloaded | |
enabled | 设定服务开机是否启动,yes表示开机启动,no表示开机不启动 |
1)开启vsftpd服务:
2)查看服务状态。注意当服务重启后, Main PID会发生改变:
重启服务:
查看服务状态,看到Main PID发生改变,也就意味着服务重启过:
3)注意vsftpd服务默认没有reload,而httpd服务可以reload:
5.14 user
- 功能:帮助我们管理远程主机上的用户,比如创建、修改ia、删除用户以及为用户创建密钥等操作
- 常用参数
参数 | 含义 |
---|---|
name | 必须参数,用户指定要操作的用户名称 |
group | 指定用户所在的基本组 |
groups | 指定用户所在的附加组 |
append | 指定添加附加组,默认值为no |
shell | 指定用户的默认shell |
uid | 指定用户的uid号 |
comment | 指定用户的注释信息 |
state | 用于指定用户是否存在于远程主机 |
present 建立 | |
absent 删除 | |
remove | 当删除用户时删除用户的家目录,默认值为no |
password | 此参数用于指定用户的密码,但密码是明文的;可以使用 “openssl password -6 ‘密码’”生成加密字符 |
generate_ssh_key | 生成sshkey |
1)建立监控方便观察实验结果,注意监控是再受控主机的其中某一台上建立的:
2)建立一个用户,然后去查看监控会看到用户建立成功:
3)移除用户,查看监控:
4)再建立用户,同时指定用户id:
5)删除用户,注意不加remove参数删除用户,该用户的家目录依旧存在;建立用户,删除时加上remove参数,表示删除用户的同时删除家目录:
6)建立用户时,建立用户id和用户组和用户说明:
7)建立用户时,建立用户id和用户组和用户说明,同时将用户的默认shell改为/bash/sh:
8)将用户加到apache组里:
9)注意如果不加append参数,想再把用户加到另一个组,那么就会覆盖前面所加入的组,所以加上该参数表示该用户可以加入多个组:
10)使用openssl passwd -6
命令生成一个密码;将该密码写入password参数,此时用户就有密码了:
11)generate_ssh_key=yes参数表示在添加用户时,生成密钥:
12)设定建立用户时的家目录是/home/liu:
5.15 firewalld
- 功能:管理火墙策略及状态
- 常用参数
参数 | 含义 |
---|---|
zone | 火墙的域 |
service | 服务名称 |
permanent | 永久生效 |
state | 状态 |
ensbled 允许 | |
disabled 拒绝 | |
immediate | 立即生效 |
1)服务下载,开启后,需要添加在火墙策略中的,所以,还需要在火墙模块中设置。设置火墙策略允许http服务,immediate表示立即生效;重新加载firewall-cmd;列出火墙策略:
5.16 group
- 功能:管理远程主机上的组
- 常用参数
参数 | 含义 |
---|---|
name | 用于指定要操作的组名称 |
state | 用于指定组的状态 |
present 建立 | |
absent 删除 | |
gid | 用于指定组的gid |
1)建立一个组:
2)建立组的时候,指定组的gid:
5.17 lineinfile
- 功能:对文件进行行管理
- 常用参数
参数 | 含义 |
---|---|
path | 指定遥操作的文件 |
line | 指定文本内容 |
regexp | 使用正则表达式匹配对应的行,当替换文本时如果有多行文本被匹配到了,则只有最后被匹配到那行文本才会被替换;当删除文本时如果有多行文本被匹配到,那么这些行都会被删除 |
state | 当想要删除对应的文本时需要将state参数的值设置为absent;state的默认值为present |
backrefs | 当内容无匹配规则时,不对文件做任何更改,默认值为no;向后引用regexp变量信息 |
insertafter | 该参数可以将文本插入到“指定的行”之后;该参数的值可以设置为EOF或者正则表达式 |
insertbefore | 该参数可以将文本插入到“指定的行”之前;该参数的值可以设置为BOF或者正则表达式 |
backup | 是否在修改文件之前对文件进行备份 |
create | 当要操作的文件不存在时,是否创建对应的文件 |
1)在受控主机建立监控:
2)给/mnt/westos文件中添加内容,注意此时/mnt是不存在westos文件的,所以会报错,line表示再文件里添加的内容:
3)加上create参数,表示path里的文件不存在时,就建立出来:
在文件中添加内容:
5)加上regexp参数,表示使用匹配的方式替换文件内容,如果文件有多行时,只有文件中最后一个与匹配内容一致的才会被替换;但是当删除时,所有与匹配内容一致的,都会被删除;所以该命令表示将test换成test1:
6)将含有test关键字的行换成test2,也就是之前的test1会被换成了test2:
7)再添加一行test1:
将含有test的替换成test3,查看监控,只替换了最后一行:
8)删除含有test的行,那么test2、3都被删除:
9)命令中(h.{4}) 表示,以h开始后面有四个字符, .* 表示中间任意是什么,后面w同理,\1表示匹配的第一个字符。此时文件内容中含有hello westos,hello westos 会直接被换成 \1:
加上backrefs=yes参数,结果是把符合条件的行的第一个字符采集出来然后将该行用第一个字符覆盖:
10)再天添加一行“hello westos”。\2表示第二个字符,把第二个字符采集出来然后将原来那一行用该字符覆盖:
11)使用insertafter参数,将hhhhh插入到hello之后:
12)使用insertbefore参数,将ggggg插入到hello之前:
13)将aaa插入最后一行。EOF 表示end of file:
14)将bbbb插入第一行。BOF 表示before of file:
15)删除文件中的hello,并将源文件备份:
5.18 replace
- 功能:该模块可以根据指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换
- 常用参数
参数 | 含义 |
---|---|
path | 指定要操作的文件 |
regexp | 指定一个正则表达式,文件中与正则表达式匹配的字符串回被替换 |
replace | 指定最终要替换的字符串 |
backup | 是否在修改文件之前对文件进行备份,最好设置为yes |
注意:lineinfile是替换一整行,而replace只替换某个字符
将/mnt/westos里的westos替换成hello,并对源文件做备份:
5.19 setup
- 功能:该模块用于收集远程主机的一些基本信息
- 常用参数
- filter 用于进行条件过滤,如果设置该参数,则仅返回过滤条件信息
过滤受控主机的ip:
5.20 debug
- 功能:调试模块,用于在调试中输出信息
- 常用参数
参数 | 含义 |
---|---|
msg | 调试输出的消息 |
var | 将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打印输出 |
verbosity | debug的级别(默认是0级别,会显示全部信息。越往后,显示的信息越简便) |
1)显示输出信息:
2)设定显示输出信息的级别:
3)编写一个yml文件,里面是playbook片段,该文件中var表示将某个任务执行的输出作为变量传递给debug模块,debug会直接将其打包输出:
执行yml文件,可以看到变量的输出结果:
4)将文件中的var替换成msg,就相当于echo直接输出字符串: