ansible自动化运维详解ansible常用模块续

Posted 是大姚呀

tags:

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

文章目录

ansible自动化运维详解(三)ansible常用模块续

四、ansible常用模块(2)

4.10、yum_repository

yum_repository模块的功能为远程主机配置系统软件仓库源文件。其常用参数有:

常用参数含义
name指定仓库名称
baseurl指定软件源路径
description指定仓库描述
file指定仓库文件名称
enabled仓库是否启用
gpgcheck仓库是否检测gpgkey
state默认值为present 建立
absent 删除

实验步骤:
1、在测试这一模块前,先在控制主机使用ansible命令调用file模块,删除所有受控主机原有的软件源仓库指向文件westos.repo,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看软件源仓库配置目录 ,可以看到westos.repo删除成功

2、使用ansible命令调用yum_repository模块,为所有受控主机创建软件源仓库指向文件westos.repo(注意指定仓库文件名称时不用写repo后缀,会自动补齐),通过执行两次命令在文件中添加两个仓库源:分别指定仓库名称、仓库描述为AppStream / BaseOS,分别指定软件源路径,启用仓库,设置仓库不检测gpgkey,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看软件源仓库配置目录 ,可以看到软件源仓库指向文件westos.repo创建成功,查看文件内容无误

4.11、dnf

dnf 模块的功能是管理远程主机系统中的 dnf 仓库及管理软件。其常用参数有:

常用参数含义
name指定包
state指定动作:present 安装;latest 更新;absent 删除
list列出指定信息:installed ;all ;available
disable_gpg_check禁用gpgkey检测
enablerepo指定安装包来源
disablerepo禁用安装包来源

实验步骤:
1、使用ansible命令调用 dnf 模块,为所有受控主机安装httpd和php软件包,可以看到命令执行成功且对远程受控主机做出改变(注意在安装软件包时dnf会自动安装软件所需要的依赖性

在受控主机启动并查看httpd服务状态,可以看到服务成功安装并运行

2、使用ansible命令调用 dnf 模块,卸载所有受控主机上安装的httpd和php软件包,可以看到命令执行成功且对远程受控主机做出改变(注意dnf模块在卸载时只卸载安装的软件包本身,不卸载依赖性软件

再次使用ansible命令调用 dnf 模块,为所有受控主机重新安装httpd和php软件包

引用autoremove参数并设置其值为yes,再次卸载所有受控主机上安装的httpd和php软件包,可以看到此时不仅卸载了安装的软件包本身,还卸载了依赖性软件

3、编辑受控主机中创建的软件源仓库指向文件 westos.repo,设置gpgcheck的值为1,即从仓库下载安装软件时检测gpgkey

为所有受控主机重新安装httpd和php软件包,引用disable_gpg_check参数并设置其值为yes,禁用gpgkey检测,可以看到命令执行成功且对远程受控主机做出改变,之后卸载所有受控主机上安装的httpd和php软件包

4、为所有受控主机重新安装httpd和php软件包,引用disablerepo参数禁用AppStream软件源,可以看到安装失败

5、使用ansible命令调用 dnf 模块,列出所有受控主机上安装的httpd软件包信息,可以看到命令执行成功( list 模块的作用相当于dnf info

列出所有受控主机上已安装的软件包信息,使用 wc -l 命令统计得到安装包数量

列出受控主机软件源中所有可安装软件包的信息

列出受控主机软件源中所有软件包的信息

4.12、service 及 firewalld

service 模块的功能为管理远程主机系统中各服务的状态。其常用参数有:

常用参数含义
name指定服务名称
state指定对服务的动作:started 启动;stopped 停止;
restarted 重启;reloaded 重载
enabledyes/no:设定服务开机是/否启动

firewalld 模块的功能为管理远程主机系统中的防火墙。其常用参数有:

常用参数含义
zone指定防火墙的域
service指定服务名称
permanent令设定永久生效
state指定防火墙对服务的策略:enabled 允许;disabled 拒绝
immediate令设定立即生效

实验步骤:
1、首先在控制主机使用ansible命令调用 dnf 模块,为受控主机安装httpd软件包,显示受控主机已安装,此时使用ansible命令调用 service 模块开启受控主机的apache服务并设置其开机自启动,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看apache服务的状态,显示服务成功运行

2、此时在浏览器输入受控主机ip访问其apache发布页面(172.25.33.200),访问失败,这是因为没有在受控主机的防火墙策略中设置允许httpd服务通过

在控制主机使用ansible命令调用 firewalld 模块,在受控主机防火墙的默认域—公共域中设置永久允许httpd服务,并令设置立即生效,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看防火墙信息,允许httpd服务通过设置成功

此时再次在浏览器输入受控主机ip访问其apache发布页面(172.25.33.200),访问成功

4.13、group

group 模块可以帮助我们管理远程主机上的用户组。其常用参数有:

常用参数含义
name指定要操作的组名称
state指定对组的动作:present 建立;absent 删除
gid指定组的gid

实验步骤:
1、为了便于观察这一模块对受控主机用户组的改变,我们首先在受控主机开启一个监控,监控记录用户组信息的/etc/group文件

在控制主机使用ansible命令调用 group 模块,为受控主机创建名为testgroup、gid为6666的一个用户组,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到用户组创建成功

2、在控制主机使用ansible命令调用 group 模块,删除受控主机中名为testgroup、gid为6666的用户组,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到用户组删除成功

4.14、user

user 模块可以帮助我们管理远程主机上的用户,进行创建用户、修改用户、删除用户以及为用户创建密钥对等操作。其常用参数有:

常用参数含义
name必须参数,指定要操作的用户名称
group指定用户所在的基本组
groups指定用户所在的附加组
append指定为用户添加附加组,其默认值为 no
shell指定用户的默认使用shell
uid指定用户的uid号
comment指定用户的注释信息
state指定用户是否存在于远程主机:present 建立(默认值);absent 删除
remove当删除用户时删除用户家目录,默认值为 no
password此参数用于指定用户的密码
直接指定密码为明文,可以用openssl password -6 '密码'生成加密字符
generate_ssh_key为用户生成 sshkey

实验步骤:
1、为了便于观察这一模块对受控主机用户的改变,我们首先在受控主机开启一个监控,监控记录用户身份信息的/etc/passwd文件、用户组信息的/etc/group文件、家目录

在控制主机使用ansible命令调用 user 模块,为受控主机创建一个名为testuser的用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到用户testuser、其对应的用户组和家目录创建成功
注意: Linux创建用户时,需要为新建用户指定一用户组,如果不指定该用户所属的用户组,系统会自动生成一个与该用户名同名的用户组

2、再次调用 user 模块,删除受控主机中创建的testuser用户,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到用户testuser其对应的用户组删除成功,但其用户家目录没有被删除

在控制主机使用ansible命令调用 user 模块,重新为受控主机创建testuser用户,可以看到命令执行成功且对远程受控主机做出改变

此时调用 user 模块再次删除受控主机中创建的testuser用户,引入remove参数并设置其值为yes,指定在删除用户时删除用户家目录,可以看到命令执行成功且对远程受控主机做出改变

再次在受控主机的监控窗口查看,可以看到用户testuser其对应的用户组、家目录都删除成功

3、在控制主机使用ansible命令调用 user 模块,为受控主机创建testuser用户并指定其所属用户组gid为1001,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到用户testuser、其对应家目录都创建成功,其所属组为指定的1001(devops)用户组

再次执行上述命令,为受控主机中创建的testuser用户指定其所属附加组gid为48,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到48(apache)组的组内用户中成功添加了testuser用户

再次执行上述命令,为受控主机中创建的testuser用户指定其所属附加组组名称为nginx(设置附加组的第二种方式),可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到48(apache)组的组内用户中没有了testuser用户,nginx用户组的组内用户中成功添加了testuser用户

再次执行上述命令,为受控主机中创建的testuser用户指定其所属附加组组名称为apache,引入append参数并设置其值为yes,指定为该用户添加新的附加组,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到apache和nginx组的组内用户中都含有testuser用户

4、在控制主机使用ansible命令调用 user 模块,为受控主机中创建的testuser用户添加注释信息、指定该用户的默认shell为/bin/sh、指定该用户的uid为6666,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到testuser用户的注释信息、默认shell、uid设置成功

5、在受控主机中使用openssl password -6 '密码'命令生成加密字符,接着使用ansible命令调用 user 模块,为受控主机中创建的testuser用户指定密码(直接指定密码为明文,不安全),可以看到命令执行成功且对远程受控主机做出改变

查看受控主机的用户认证信息文件/etc/shadow,可以看到testuser用户密码设置成功

6、在受控主机中切换到testuser用户身份,看到当前该用户的家目录(~)下不存在 . ssh目录,这意味着通过ssh远程连接testuser用户时无法建立信任机制,不安全

在受控主机使用ansible命令调用 user 模块,为受控主机中创建的testuser用户生成ssh密钥对sshkey,可以看到命令执行成功且对远程受控主机做出改变

在受控主机中切换到testuser用户身份,此时可以成功切入到该用户家目录下的 . ssh目录,ssh公私密钥对成功生成,利用这一密钥对我们可以为testuser用户做ssh登录免密认证

4.15、lineinfile

lineinfile 模块可以帮助我们对远程主机上的文本进行操作。其常用参数有:

常用参数含义
path指定要操作的文件
line指定要写入的文本内容
regexp使用正则表达式匹配对应的行
替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换
当删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除
statestate的默认值为 present,当想要删除对应的文本时,需要将state参数的值设置为absent
backrefs表示当内容无匹配规则时不对文件做任何更改(默认值为no),还有向后引用regexp变量信息的作用
insertafter借助insertafter参数可以将文本插入到“指定的行”之 ,insertafter参数的值可以设置为EOF或者正则表达式
insertbefore借助insertbefore参数可以将文本插入到“指定的行”之 ,insertbefore参数的值可以设置为BOF或者正则表达式
backup是否在修改文件之前,对文件进行备份
create当要操作的文件并不存在时,是否创建对应的文件

实验步骤:
1、为了便于观察这一模块对受控主机中文件的改变,我们首先清空受控主机/mnt目录下的内容,接着在受控主机开启一个监控,监控/mnt目录下westosfile测试文件的变化

在控制主机使用ansible命令调用 lineinfile 模块,为受控主机在/mnt目录下创建一个名为westosfile的测试文件,并在文件中写入hello westos,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件创建成功、文件内容写入成功

2、在控制主机使用ansible命令调用 lineinfile 模块,使用regexp参数将受控主机/mnt/westosfile测试文件中,以hello开头的行替换为hello linux,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到文件内容替换成功

再次使用ansible命令调用 lineinfile 模块,使用regexp参数匹配受控主机/mnt/westosfile测试文件中以hello开头的行,将这些行删除,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到文件相应内容删除成功

3、在控制主机使用ansible命令调用 lineinfile 模块,在受控主机/mnt/westosfile测试文件中写入两行内容(\\n表示换行),如果/mnt/westosfile文件不存在则创建对应文件,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件内容写入成功

4、除了使用ansible命令调用 lineinfile 模块,我们还可以在ansible目录下使用YAML标记语言编写playbook脚本文件,同样地调用 lineinfile 模块在受控主机/mnt/westosfile测试文件中写入三行内容(在playbook中:|+表示自动换行)
执行该playbook脚本文件,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件新的三行内容写入成功

5、在控制主机使用ansible命令调用 lineinfile 模块,使用regexp参数匹配受控主机/mnt/westosfile测试文件中的字符串"linux",并将其所在的行替换为"welcome",可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件中只有最后一个字符串"linux"所在的行被成功替换
注意1:替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换

再次使用ansible命令调用 lineinfile 模块,使用regexp参数匹配受控主机/mnt/westosfile测试文件中以hello开头的行,并将其删除,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件中所有以hello开头的行都被删除了
注意2:删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除

再次使用regexp参数匹配受控主机/mnt/westosfile测试文件中的字符串"linux",并将其所在的行替换为"hello world",可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,westosfile测试文件中虽然没有相匹配的文本内容,但要输入的内容已经追加到文件的最后一行了
注意3:替换文本时,如果没有文本能被匹配,那么输入的内容会追加到文件最后一行

引入backrefs参数并设置其值为yes,再次使用regexp参数匹配受控主机/mnt/westosfile测试文件中的字符串"linux",并将其所在的行替换为"#######“,可以看到命令执行成功,但并未对远程受控主机做出改变

在受控主机的监控窗口查看,可以看到westosfile测试文件内容无变化,这是因为当backrefs参数的值为yes时,没有符合匹配规则的文本时不对文件做任何更改

再次执行上述命令,使用regexp参数匹配受控主机/mnt/westosfile测试文件中的字符串"welcome”,并将其所在的行替换为"#######“,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,此时westosfile测试文件中有符合匹配规则的文本,可以看到相应的行成功被替换

6、在受控主机/mnt目录下重新编辑westosfile文件以便进行后续测试,如下:

在控制主机使用ansible命令调用 lineinfile 模块,使用regexp参数匹配受控主机/mnt/westosfile测试文件中,h开头后跟4个任意字符、再后跟任意字符、再后跟w、再后跟5个任意字符的字符串,并将其所在的行替换为该行的第一个字符串 (\\1表示第一个变量),可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,此时westosfile文件中符合匹配规则的第一行被替换,但替换后的内容不正确,在命令中设置的变量引用没有成功

这是因为 lineinfile 模块默认不能向后引用变量,需要加backrefs参数,引入backrefs参数并设置其值为yes即允许向后引用变量,再次执行上述命令,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看westosfile文件,符合匹配规则的第一行被成功替换为了该行的第一个变量即字符串"hello”,向后变量引用成功

7、在控制主机使用ansible命令调用 lineinfile 模块,引用 insertafter / insertbefore 参数并设置其值为 EOF / BOF,将指定文本插入到文件的最后一行 / 第一行,可以看到命令执行成功且对远程受控主机做出改变

在受控主机的监控窗口查看,westosfile测试文件中指定行插入成功

8、在控制主机使用ansible命令调用 lineinfile 模块,将指定文本插入到文件的第一行,引用backup参数并设置其值为yes,在修改文件前对文件进行备份,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看westosfile文件,文件修改成功,此时原文件成功备份在同目录下

4.16、replace

replace 模块可以根据我们指定的正则表达式替换文件中的字符串,与 lineinfile 模块不同的是,文件中所有被匹配到的字符串都会被替换。其常用参数有:

常用参数含义
path指定要操作的文件
regexp指定一个正则表达式,文件中与正则表达式匹配的字符串都将被替换
replace指定最终要替换成的字符串
backup是否在修改文件之前,对文件进行备份,最好设置为yes

实验步骤:
1、为了便于观察这一模块对受控主机中文件的改变,我们首先清空受控主机的/mnt目录并编辑westos文件以便进行后续测试,如下:

在控制主机使用ansible命令调用 replace 模块,使用regexp参数匹配受控主机/mnt/westos测试文件中的字符串"westos"并将其替换为"WESTOS",在修改文件前对文件进行备份,可以看到命令执行成功且对远程受控主机做出改变

在受控主机查看westos文件,字符串替换成功,同时原文件成功备份在同目录下

4.17、setup

setup 模块可以帮助我们收集远程主机的一些基本信息。其常用参数有:

常用参数含义
filter用于进行条件过滤,如果设置,则仅返回匹配过滤条件的信息

实验步骤:
1、在控制主机使用ansible命令调用 setup 模块,使用filter参数过滤查看受控主机指定参数—ipv4地址的信息,可以看到命令执行成功且返回了受控主机的ipv4地址

4.18、debug

debug 模块为调试模块,用于在调试中输出信息。其常用参数有:

常用参数含义
msg调试输出的信息
var将某个任务执行的输出作为变量传递给debug模块
debug会直接将其打印输出
verbositydebug的级别(默认是0级,即全部显示)

实验步骤:
1、在控制主机使用ansible命令调用 debug 模块,显示输出指定调试信息,可以看到命令执行成功,这里我们还可以设定debug的显示级别
2、除了使用ansible命令调用 debug 模块,我们还可以在ansible目录下使用YAML标记语言编写playbook脚本文件,同样地调用 debug 模块显示输出变量test

执行该playbook脚本文件,可以看到命令执行成功
编辑该playbook脚本文件,在任务列表tasks的同一任务命名name里,引用两个模块在受控主机输出hello,如果输出成功则在控制主机输出显示调试信息hello

执行该playbook脚本文件,可以看到命令执行失败

这是因为playbook脚本文件的同一任务命名name里,只能引用一个模块即只能有一个任务task,重新编辑该playbook脚本文件,在任务列表tasks中设置两个任务命名name(也可以不命名直接写引用模块,破折号—代表了并列任务),在各name中分别引用一个模块,在受控主机输出hello,如果输出成功则在控制主机输出显示调试信息hello

执行该playbook脚本文件,可以看到命令执行成功,控制主机输出显示调试信息hello

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

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

ansible自动化运维详解ansible常用模块续

ansible自动化运维详解ansible常用模块续

ansible自动化运维详解ansible常用模块续

Ansible 常用模块详解

Ansible自动化运维学习之五:Ansible配置文件详解与调优