博观而约取,厚积而薄发。这篇文章主要讲述ansible常用模块介绍相关的知识,希望能为你提供帮助。
作为运维自动化工具之一,ansible有着批量执行远程命令、批量安装和配置软件服务、编排高级的企业级复杂的IT架构任务和提供自动化运维工具的开发API等功能。ansible模块众多,到目前为止已有3000多个,但是常用的模块也只有20多个,此篇主要看一下ansible的常用模块。
- ?ping模块?
ping模块的功能是探测ansible主机是否能够远程连接被控制端的主机,如果返回的结果是绿色的,即视为可达,ansible主机发出ping的动作,被控制端如果可达会返回一个pong?
?(如下图)??。
- ?Command模块?
Command模块的功能是在远程主机执行命令,此为默认模块,可忽略 -m 选项,例如我们可以在ansible主机查看远程主机名称、创建或删除文件??(如下图)??。
Command模块支持先切换文件夹再查看,也支持我们根据文件夹的存在与否来进行创建,如果不存在则创建,如果已经存在,会提示已存在而不去创建??(如下图)??。
Command模块虽然能在远程主机执行命令,但不支持各种符号,如管道和重定向等,例如我们希望通过ansible主机将hello这个单词写入到远程主机的/data/test2.log中,但是执行后,只是将echo之后的语句显示出来,并不是执行我们想要的操作??(如下图)??。
- ?Shell模块?
Shell模块的功能和Command模块相似,用shell执行命令,支持各种符号,比如:*,$, >
,可以认为Shell模块是增强版的Command模块。例如我们可以利用Shell模块来执行Command模块中向远程主机的/data/test2.log文件中写入hello这个单词的操作,执行命令后可以生成test2.log文件,查看内容显示的是hello??(如下图)??。
- ?Script模块?
Script模块的功能是在远程主机上运行ansible主机上的脚本,并且无需执行权限。例如笔者这边创建了一个简单的脚本,就是显示dbsrvs分组中的主机名称,利用Script模块执行脚本后会将分组中的主机名称显示出来??(如下图)??。
- ?Copy模块?
Copy模块的功能是从ansible主机复制文件到远程主机上,例如笔者这边希望将ansible主机上的ansible_test.txt文件复制到websrvs分组中的远程主机上,在复制过程中,我们可以修改文件的名称、所有者、所属组、权限和保存路径等??(如下图)??。
- ?Fetch模块?
Fetch模块的功能是从远程主机提取文件至ansible主机端,与copy模块相反,例如下图将websrvs分组远程主机的/var/log/messages文件复制到ansible主机的/data/log目录下。
- ?Get_url模块?
Get_url模块的功能是用于将文件从http、https或ftp下载到被管理机节点上,其常用参数包括url??(下载文件的URL,支持HTTP,HTTPS或FTP协议)??、dest??(下载到目标路径)??、owner??(指定属主)??、group??(指定属组)、??mode??(指定权限)??和checksum??(对目标文件在下载后计算摘要,以确保其完整性)??等,笔者这边就不弄那么复杂了,在ansible主机上执行命令,下载nginx-1.18.0版本的包到websrvs分组的主机上,并放在/usr/local/src目录下,将包名改为nginx.tar.gz??(如下图)??。
【ansible常用模块介绍】
- ?File模块?
File模块的功能是设置文件属性,创建软链接等。例如通过ansible主机在所有的主机上创建/data/haha文件夹,将所有者和所属组改为fangxiaotiao??(如下图)??。
此时针对以上的文件夹来创建软链接,软链接名叫什么不重要,重要的是一定要将state设为link,同时state可以用dest或name代替??(如下图)??。
- ?stat模块?
state模块的主要功能是检查文件或文件系统的状态,例如我们查看/etc/passwd文件,会显示文件的大小、属性等信息??(如下图)??。
- ?unarchive模块?
unarchive模块的功能是在ansible主机对远程主机进行解压缩,其实现方式有三种:一种是将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes,此为默认值可省略;第二种是将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no;第三种是直接将互联网上的某一个包下载到远程主机并进行解压缩。例如笔者这边在Get_url模块下载了nginx压缩包到websrvs分组主机上,此时要进行对远程主机的压缩包进行解压,在解压缩的时候可以修改所有者和所属组等??(如下图)??。
- ?Archive模块?
Archive模块的功能是打包压缩保存在被管理节点,该模块在的使用方法与unarchive模块相似,因笔者所下载的ansible版本中不带此模块就演示了。
- ?Hostname模块?
Hostname模块的功能是管理主机名,如果是分组的话,会直接将分组中的所有主机名都改为设定的,笔者这边将ip为10.0.0.156的主机改名为hello-world??(如下图)??。
- ?Cron模块?
Cron模块的功能是执行计划任务,例如ansible主机上有一个关于数据库备份的脚本,希望10.0.0.154主机每周一到周五的两点半执行一次,执行命令后,可以在ansible主机查看到计划任务已经添加到了目标远程主机的任务列表中??(如下图)??。
- ?Yum和Apt模块?
yum管理软件包,只支持RHEL、CentOS、fedora,不支持Ubuntu和其它版本;apt模块管理Debian相关版本的软件包。例如笔者这边通过ansible主机在ip为10.0.0.154的远程主机上安装httpd服务??(如下图)??。
如果想删除已安装的服务,添加state=absent即可??(如下图)??。
- ?Service模块?
Service模块的功能是管理远程主机上的服务,例如笔者想要开启10.0.0.154远程主机上httpd服务,需填写服务的名称、状态,同时支持设置开机自启动??(如下图)??。
如果想关闭服务,需要将状态改为stopped,不想开机自启动,也可将enabled改为no??(如下图)??。
- ?User模块?
User模块的功能是管理远程主机的用户,例如我们可以新增用户,设置用户的说明、UID、家目录和组等??(如下图)??。
- ?Group模块?
Group模块用于管理远程主机上的组,例如笔者在ip为10.0.0.153的远程主机上创建nginx组,可以设定nginx组的ID和是否是系统组等??(如下图)??。
- ?Lineinfile模块?
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换 。其实在ansible自身提供了两个模块可以方便的进行替换,其中一个就是Lineinfile模块,一般在ansible当中去修改某个文件的单行进行替换的时候需要使用Lineinfile模块。
例如笔者在10.0.0.154主机上下载了httpd服务,现在想将端口从80改为8080??(如下图)??。
使用正则表达式匹配对应的行,当处于删除文本的操作时,如果有多行文本都能被匹配,这些行都会被删除??(如下图)??。
但在使用正则表达式匹配对应的行,当处于替换文本的操作时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换,例如笔者将10.0.0.154远程主机的/etc/httpd/conf/httpd.conf文件中再添加两行Listen 8080,现在希望将所有的8080端口重新改为80,执行命令后只有最后一行被替换了??(如下图)??。
- ?Replace模块?
Replace模块有点类似于sed命令,主要也是基于正则进行匹配和替换,建议使用,如果想进行多行匹配进行替换需要使用Replace模块。例如还是上面10.0.0.154远程主机的/etc/httpd/conf/httpd.conf文件,我们要将端口改为9527??(如下图)??。
- ?reboot模块?
reboot模块负责远程主机的重启功能,对象可以是全部主机、分组或单台主机,例如笔者这边重启10.0.0.156主机??(如下图)??。
- ?Setup模块?
Setup模块用于收集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度。直接使用该模块查看某一台主机时,会显示这台远程主机网卡设置、主机名称和版本等信息。
当然我们也可以看具体的版块,例如想看一下10.0.0.154远程主机的内存使用使用情况
- ?debug模块?
debug模块可以用于输出信息,并且通过msg定制输出的信息内容,msg后面的变量需要加 " " 引起来,它主要是用于一些调试工作。debug 模块默认输出Hello world??(如下图)??。
推荐阅读