文章目录

  • ansible自动化运维详解(三)ansible常用模块续
    • 四、ansible常用模块(2)
      • 4.10、yum_repository
      • 4.11、dnf
      • 4.12、service 及 firewalld
      • 4.13、group
      • 4.14、user
      • 4.15、lineinfile
      • 4.16、replace
      • 4.17、setup
      • 4.18、debug

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 重载
enabled yes/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 使用正则表达式匹配对应的行
替换文本时,如果有多行文本都能被匹配,则只有最后面被匹配到的那行文本才会被替换
当删除文本时,如果有多行文本都能被匹配,那么这些行都会被删除
state state的默认值为 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会直接将其打印输出
verbosity debug的级别(默认是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常用模块续相关推荐

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

    文章目录 ansible自动化运维详解(一)ansible的安装部署.参数使用.清单管理.配置文件参数及用户级ansible操作环境构建 一.ansible的安装部署 1.1.ansible简介 1. ...

  2. @ansible自动化运维详解(总述)

    ansible [自动化运维应用场景] "运维的未来是,让研发人员能够借助工具.自动化和流程,并且让他们能够在运维干预极少的情况下部署和运营服务,从而实现自助服务.每个角色都应该努力使工作实 ...

  3. Ansible 自动化运维工具之inventory和常用模块介绍

    一.inventory介绍 前面我们介绍过ansible的hosts文件是存放被管理主机的,被管理主机比较少的情况下,直接在hosts中定义即可,但是以后很定会管理多台主机,而ansible可管理的主 ...

  4. Ansible自动化运维(五)----Ansible剧本

    Ansible自动化运维(五)----Ansible剧本 Ansible核心的功能,作用就是进行配置管理. Ansible需要编写的 playbook 剧本需要遵循一定的规则,格式,这个格式就称之为y ...

  5. SaltStack 自动化运维详解

    一.自动化运维工具对比 使用所需软件配置单个服务器是一项相当简单的任务. 但是,如果许多服务器需要安装相同或相似的软件和配置,则该过程将需要大量的工时才能完成,这会耗尽您本已紧张的资源.如果没有某种形 ...

  6. Saltstack自动化运维详解(数据系统 jinja模板 job管理)

    文章目录 1. saltstack 的数据系统 1.1 SaltStack组件之Grains 1.grains使用方法 信息查询 查询某个key值 用Grains来匹配minion 2.自定义grai ...

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

    文章目录 ansible 自动化运维工具 详解 关于作者 作者介绍 一.ansible 概述 1.1 ansible 概述 1.2 是什么要使用 ansible 1.3 ansible 功能 1.4 ...

  8. ansible自动化运维从入门到精通

    ansible自动化运维 Ansible介绍 Ansible是一个同时管理多个远程主机的软件(任何可以通过SSH协议登录的机器),因此Ansible可以管理远程虚拟机.物理机,也可以是本地主机. An ...

  9. Ansible自动化运维_超详细

    Ansible自动化运维 自动化运维工具简介 Puppet 自动运维工具特点: Saltstack 自动运维工具特点: Ansible 自动运维工具特点: Ansible 运维工具原理 Ansible ...

最新文章

  1. android Adapter剖析理解
  2. ajax(Tibco) 与 SQL server 2005(5)
  3. 企业日志分析之linux系统message收集展示
  4. 转载:Systemd 命令
  5. [导入]较为周全的Asp.net提交验证方案 (下)
  6. 腾讯Blade Team胡珀:IoT时代,“白帽子”以网为剑捍卫安全
  7. 关于车机互联方式的一点想法
  8. twisted系列教程十六–twisted守护进程
  9. 为Android安装BusyBox
  10. 双数组trie树的基本构造及简单优化
  11. Unable to compile class for JSP 的可能原因
  12. 克隆卡设备_SD Clone for mac(SD卡克隆备份软件) v3.2
  13. java 解析excle
  14. 六张图了解Python的赋值、浅复制、深复制
  15. 笔记本电池不充电了 无法充电 如何激活
  16. get查询IP PHP源码,ip归属地查询代码
  17. 计算机没有有效的ip配置,win7电脑没有有效的ip配置怎么办
  18. android 内存6g 8g 12g,手机多大内存够用,6g和8g要怎么选,有必要上12g运存吗
  19. LeetCode(C++):寻找两个有序数组的中位数
  20. 计算机准考证要打印多大的纸,税务证准考证打印纸张大小要求多大的?

热门文章

  1. 毕业设计 - 基于java web的记账管理系统 【源码+论文】
  2. 银河计算机网络,python学习笔记
  3. 51单片机定时器扫描按键
  4. 6自由度优傲(ur)机械臂做圆周运动
  5. 太极链DAPP主要的三种热门游戏
  6. 模拟退火算法介绍及matlab实现
  7. windows10下cuda9.2升级到cuda10.2
  8. Django中 form表单的使用
  9. 《云计算》linux改变主机名的四种方法
  10. 铁路牵引变电所无人化改造方案 辅助监控系统