ansible自动化运维详解ansible管理方式常用参数及常用模块

Posted 是大姚呀

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ansible自动化运维详解ansible管理方式常用参数及常用模块相关的知识,希望对你有一定的参考价值。

文章目录

ansible自动化运维详解(二)ansible管理方式、常用参数及常用模块

一、ansible实现管理的方式

ansible有以下两种管理方式:
1)Ad-Hoc命令:利用ansible命令直接完成管理,主要用于临时命令这一使用场景,之前的实验中大量使用过。
2)playbook脚本:ansible脚本,主要用于大型项目场景,需要前期的规划。

实验步骤:
1、使用Ad-Hoc命令方式调用ping模块管理受控主机,ansible模块本质上就是ansible里的命令

2、在ansible目录下使用YAML标记语言编写playbook脚本文件管理受控主机,同样地调用ping模块

执行playbook脚本文件

编辑脚本文件test.yml,添加调用shell模块在受控主机中创建文件

执行playbook脚本文件(执行playbook脚本时,-v参数指的是显示ansible执行时的详细信息)

v个数越多,ansible执行信息的详细程度越高

3、这里需要说明的一点是,使用Ad-Hoc执行方式实现管理时,我们可以通过以下命令获得帮助
ansible-doc -l:列出所有模块

ansible-doc shell(模块名称):对指定模块使用方法进行查看

ansible-doc -s shell(模块名称):对模块使用方法的简要查看,显示指定模块的playbook片段(=表示指明具体的值;-表示为布尔值,只能设定True或False)

二、ansible命令常用参数

1)ansible命令的格式为:ansible 清单 -m 模块 -a 模块参数
2)ansible命令中的常用参数及含义如下表所示:

参数含义
- -version显示版本
-m module指定模块,默认为command模块
-v显示命令详细信息,v的个数越多越详细,如-vv
- -list显示主机列表,也可以用- -list-hosts
-k提示输入ssh连接密码,默认key认证
-C预执行检测
-T执行命令的超时时间,默认为10s
-u指定远程执行的用户
-b执行sudo切换身份操作
-become -user=USERNAME指定sudo的用户
-K提示输入sudo密码

实验步骤:
1、使用ansible命令调用shell模块查询所有受控主机的域名

引入-k参数在查询所有受控主机的域名提示输入ssh连接密码
2、编辑当前ansible目录中的主配置文件,关闭远程主机中用devops用户操作指令时转换用户身份

此时使用ansible命令查询所有受控主机的登录用户身份,显示为未转换的devops用户,引入-u参数指定远程执行的用户,再次查询显示为指定的root用户

3、引入-C参数进行预执行检测,可以看到不论命令是否正确,执行结果都为SKIPPED

4、使用ansible命令时,引入 -become -user=USERNAME转换远程用户为指定sudo的用户 ,引入-K参数提示输入sudo密码

引入-T参数指定执行命令的超时时间为5s

三、ansible基本颜色代表的信息

如下图所示,ansible命令执行后显示的执行结果通常有三种颜色,其含义分别为:

颜色含义
绿色执行成功但未对远程受控主机做任何改变
黄色执行成功且对远程受控主机做出改变
红色执行失败

四、ansible常用模块(1)

4.1、command

command模块的功能为在远程主机执行命令,这一模块为默认模块,其常用参数有:

常用参数含义
chdir执行命令前先进入到指定目录
cmd运行命令指定
creates创建文件,如果文件存在将不运行
removes删除文件,如果文件存在将运行
free_form在远程主机中执行的命令,此参数不需要加
注意: Linux中的很多通配符在command模块中不支持

实验步骤:
1、使用ansible命令调用command模块,切换到所有受控主机的/mnt目录下创建文件

在受控主机/mnt目录下查看文件创建成功

2、使用ansible命令调用command模块,删除所有受控主机的/mnt目录下的file1文件

受控主机/mnt目录下的file1文件成功删除

3、使用ansible命令调用command模块,在所有受控主机的/mnt目录下创建file2文件

file2文件已经存在,因此命令没有执行

4、使用ansible命令调用command模块,清空所有受控主机的/mnt目录

4.2、shell

shell模块的功能与command类似,即在远程主机执行命令,不同的是shell模块可以使用通配符,command通配符不生效。其常用参数与command一样,此外还有一个参数如下:

常用参数含义
executable指定执行环境,默认为sh

实验步骤:
1、使用ansible命令调用shell模块,清空所有受控主机的/mnt目录

查看受控主机的/mnt目录,命令执行成功


2、使用ansible命令调用shell模块,切换到所有受控主机的/mnt目录下创建文件

在受控主机/mnt目录下查看文件创建成功

3、使用ansible命令调用shell模块,再次执行上述创建文件命令,文件已经存在,因此命令没有执行

4、查看受控主机当前进程的id,根据id查看当前进程可以看到是bash环境($$表示当前进程的id)

在控制主机使用ansible命令查看受控主机当前进程,看到的是默认的sh环境,引入executable参数指定执行环境为bash,再次查看受控主机当前进程看到的是bash环境

4.3、script

script模块的功能为在受控主机中执行在ansible主机中写好的脚本。如下述步骤所示,在ansible主机中切换到lee用户级环境中,在ansible目录中编写清单文件和脚本文件,接着使用ansible命令调用script模块,可以看到脚本在受控主机中成功执行。

4.4、copy

copy模块的功能是从ansible主机复制文件到受控主机,当受控主机文件已存在且文件内容一致时不会执行备份操作。其常用参数有:

常用参数含义
src指定源文件
dest指定目的地文件
owner/group指定目的地文件所有人/所有组
mode指定目的地文件权限
backup=yes当受控主机中存在文件时备份原文件
content指定文本内容直接在受控主机中生成文件

实验步骤:
1、清空受控主机/mnt目录下内容

在控制主机使用ansible命令调用copy模块,将控制主机ansible目录下的test.sh文件复制到受控主机的/mnt目录下,该文件在受控主机中的文件所有者是westos用户,文件权限为755

查看受控主机/mnt目录,可以看到上述命令执行成功

2、再次执行上述文件复制命令,引入backup参数设定受控主机中存在文件时备份原文件,显示命令执行成功但未对受控主机作出改变

查看受控主机/mnt目录无备份文件,这是因为当受控主机文件已存在且文件内容一致时不会执行备份操作

编辑修改受控主机的test.sh文件,再次执行上述命令,显示命令执行成功且对受控主机作出了改变

查看受控主机/mnt目录生成备份文件,这是因为控制主机文件内容已改变,会执行备份操作

3、在控制主机使用ansible命令调用copy模块,引用content参数直接指定在受控主机中生成文件的文本内容

查看受控主机/mnt目录下的指定文件,文件内容与指定直接输入内容一致

4.5、fetch

fetch模块的功能是从受控主机把文件复制到ansible主机,不支持复制目录。其常用参数有:

常用参数含义
src受控主机源文件
destansible主机目的目录
flat基本名称功能,只要文件本身,不写的话会把原文件层级也拷贝过来,写的话要写清楚dest文件

实验步骤:
1、在控制主机使用ansible命令调用fetch模块,将受控主机/etc/sysconfig/network-scripts目录下的网卡配置文件ifcfg-ens3复制到控制主机的/home/lee/ansible目录下,可以看到源文件的层级关系也拷贝了过来,在指定目录中自动生成了层级目录

2、再次执行上述命令,启用flat参数基本名称功能,即在拷贝时只拷贝文件本身,不拷贝文件的层级关系,注意启用flat参数时要写清楚dest目录下目的文件名称,此时查看dest目录可以看到文件直接拷贝成功

4.6、file

file模块的功能是设置受控主机中文件的属性。其常用参数有:

常用参数含义
path指定文件路径及名称
state指定操作状态:touch 建立;absent 删除;directory 递归;link/hard 建立软/硬链接
mode设定文件权限
owner设定文件用户
group设定文件拥有组
src指定受控主机源文件
dest指定ansible主机目的目录
recurse=yes递归更改文件(删除目录时不需要加此递归参数)

实验步骤:
1、在控制主机使用ansible命令调用file模块,在受控主机/mnt 目录下分别创建westosfile文件和westosdir目录,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt/westosdir新建目录下创建testfile文件,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,相应文件及目录创建成功

2、在控制主机使用ansible命令调用file模块,更改受控主机/mnt 目录下的westosfile文件的拥有者为westos用户、更改/mnt/westosdir目录的拥有组为westos用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,westosfile文件的拥有者、westosdir目录的拥有组成功从root用户变为westos用户,但此目录下文件的拥有组未改变

3、在控制主机使用ansible命令调用file模块,更改受控主机 /mnt/westosdir目录的拥有组为devops用户,同时设置recurse参数为yes,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,westosdir目录的拥有组成功变为devops用户,同时此目录下文件的拥有组也递归变为devops用户

4、在控制主机使用ansible命令调用file模块,为受控主机指定/mnt/westosfile文件在/mnt目录下创建一个名为linuxfile的软链接,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看文件属性,linuxfile软链接创建成功

设置state参数值为hard,再次执行上述命令,为受控主机指定/mnt/westosfile文件在/mnt目录下创建一个名为yaofile的硬链接,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看文件属性,yaofile硬链接创建成功,使用ll -i命令查看文件节点号,可以看到硬链接与原文件是同一个文件,节点号相同;软链接与原文件是不同的文件,节点号不同

5、在控制主机使用ansible命令调用file模块,删除受控主机/mnt目录下的linuxfile软链接,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,linuxfile软链接成功删除

4.7、archive及unarchive

archive模块的功能是压缩打包受控主机中的文件。其常用参数有:

常用参数含义
path指定要打包目录的名称
dest指定生成的打包文件的名称
format打包格式
owner指定文件拥有者
group指定文件拥有组
mode设定文件权限 (压缩文件权限默认为644)

unarchive模块的功能是解压缩受控主机中的文件。其常用参数有:

常用参数含义
copy默认为yes: 从ansible主机复制文件到受控主机
设定为no: 从受控主机中寻找src源文件
remote_src功能同copy但参数相反
设定为yes: 表示要解压缩的包在受控主机
设定为no:表示要解压缩的包在ansible主机
src指定包路径,可以是ansible主机也可以是受控主机
dest指定解压缩文件到受控主机目录
mode设定文件权限

实验步骤:
1、在控制主机使用ansible命令调用archive模块,将受控主机的/etc目录以gzip压缩格式打包到/mnt 目录下,生成etc.tar.gz压缩包,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,etc.tar.gz压缩包成功生成,此时压缩包的拥有者是root用户、文件权限默认为644

2、再次执行上述命令,将受控主机的/etc目录以bzip2压缩格式打包到/mnt 目录下,生成etc.tar.bz2压缩包,指定压缩文件权限为755,指定压缩文件拥有者、拥有组为westos用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/mnt目录下查看,etc.tar.bz2压缩包成功生成,此时压缩包的拥有者、拥有组是westos用户、文件权限为755

3、打包控制主机的/etc目录,并以gzip格式压缩在当前目录下生成etc.tar.gz压缩包

在控制主机使用ansible命令调用unarchive模块,将受控主机当前目录下的etc.tar.gz压缩包解压缩到受控主机/media目录下,并设置解压缩文件的拥有者为westos用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/media目录下查看,可以看到解压缩生成的etc目录,其拥有者为设置的westos用户
注意: 需要说明的一点是,由于在使用tar命令压缩受控主机的/etc目录时未使用-P参数,因此在解压缩时是在指定路径下递归创建去掉 / 后的目录,而不是直接解压

再次执行上述命令,设置解压缩文件的权限为700

在受控主机/media目录下查看,可以看到解压缩生成的etc目录被修改为700

4、删除控制主机ansible目录下的压缩文件,再次执行上述命令,引用copy参数设置其值为no,在受控主机中寻找src源文件,即将受控主机/mnt目录下创建的etc.tar.gz压缩包解压缩到其/media目录下,并设置解压缩文件的拥有者为devops用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机/media目录下查看,可以之前解压缩生成的 etc 目录的拥有者仍为westos用户,但 etc 目录下所有文件的拥有者变为devops用户,这是因为 设置权限解压后,目录所有者不会变,目录中文件的所有者会变

4.8、hostname

hostname模块的功能是管理受控主机名称。其常用参数有:

常用参数含义
name指定受控主机名称

命令示例:ansbile 172.25.254.100 -m hostname -a 'name=yao.westos.com'

4.9、cron

cron模块的功能是在受控主机设置定时任务。其常用参数有:

常用参数含义
minute / hour / day / month / weekday分钟 / 小时 / 天 / 月 / 周
name指定任务名称
job指定任务脚本或命令
disabledyes 禁用计划任务
no 启动计划任务
(disabled相当于加#注释掉)
stateabsent 删除计划任务

实验步骤:
1、在控制主机使用ansible命令调用cron模块,在受控主机中设置每两分钟执行一次test任务,任务具体内容是输出hello westos,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看定时任务,可以看到任务设定成功

2、再次执行上述命令,分别引用disabled参数设置其值为yes/no禁用/启用该定时任务,可以看到命令执行成功且对远程受控主机做出改变

依次在受控主机查看定时任务,可以看到定时任务禁用/启用成功,disabled相当于在受控主机定时任务配置文件中加 # 注释掉任务

3、再次执行上述命令,引用state参数设置其值为absent删除该定时任务,可以看到命令执行成功且对远程受控主机做出改变

依次在受控主机查看定时任务,可以看到定时任务成功删除

以上是关于ansible自动化运维详解ansible管理方式常用参数及常用模块的主要内容,如果未能解决你的问题,请参考以下文章

ansible自动化运维详解ansible管理方式常用参数及常用模块

自动化运维工具——ansible详解案例分享

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

ansible自动化运维详解ansible的安装部署参数使用清单管理配置文件参数及用户级ansible操作环境构建

大型企业中如何批量管理千万台服务器之ansible自动化运维工具详解 [⭐建议收藏⭐]