Ansible 中常用模块

Posted 123坤

tags:

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

test setting

  1. 免密认证
  2. sudo 权限设定
  3. 写入解析

1. ansible 实现管理的方式

管理方式含义
Ad-Hoc利用ansible命令直接完成管理,主要用于临时命令使用场景
playbookansible脚本,主要用于大型项目场景,需要前期的规划
  1. ansible 命令管理方式

在这里插入图片描述

  1. ansible 剧本的方式(playbook的方式)
    :该脚本编写时有严格的格式缩进。

如图所示的 playbook 片段表示查看被控主机的主机名,然后运行 playbook;

在这里插入图片描述
上面剧本的方式类似于下面这种命令的方式:

在这里插入图片描述

2. Ad-Hoc 执行方式中如何获得帮助

用命令 ansible-doc 显示模块帮助的指令;

  • 格式
    ansible-doc [参数] [模块…]
  • 常用参数
    -l ##列出可用模块
    -s ##显示指定模块的playbook片段

使用命令 ansible-doc -l 来列出所有的模块;目前有 3387 个模块;

在这里插入图片描述
查看模块的帮助,直接在 ansilbe-doc 后面加上模块参数即可;

在这里插入图片描述

加入参数 -s 即可查看简短帮助:

在这里插入图片描述

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)查看版本
ansible --version

在这里插入图片描述

2)详细过程,当不加 v 时,只会有输出结果,没有过程,最多可以加三个 v ;

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3)预执行检测,只会检测命令的结果是否正确,并不会执行该动作;

在这里插入图片描述

4)-k 表示输入密码,之前 做了免密认证,此时加入 -k 可以输入密码;

在这里插入图片描述

5)-b表示指定sudo切换用户身份操作 ,- -become-user=zxk 表示指定 sudo 的用户;

在这里插入图片描述

6)-u 表示指定远程执行的用户;

如图之前对于 zxk 用户做了免密认证,当用 -u 来指定用户时,会发现直接报错,加入 -k 输入密码之后,便可以。
在这里插入图片描述

4. ansible 的基本颜色代表信息

颜色含义
绿色执行成功但为对远程主机做任何改变
黄色执行成功并对远程主机做改变
红色执行失败

5. ansible 中的常用模块

5.1 command

  • 功能: 在远程主机执行命令,此模块为默认模块;
  • 常用参数
参数含义
chdir执行命令前先进入到指定目录
cmd运行命令指定
creates如果文件存在将不运行
removes如果文件存在将运行
free_form在远程主机中执行的命令,此参数不需要加

可以用命令 ansible-doc command -s 来查看其参数及含义;

在这里插入图片描述
测试
chdir表示先进入指定目录,再执行命令。如图表示进入 /etc 目录下,查看passwd文件的命令;

在这里插入图片描述
creates表示当文件存在时将不执行动作,如图,当文件 /mnt/zxk 不存在,便运行后面的显示动作;
removes 表示当文件不存在时便不执行动作,如图,当文件 /mnt/zxk 不存在,便没有运行后面的显示动作;
最后一条,由于文件 /mnt/zxk 不存在,便运行后面的显示动作;

在这里插入图片描述
如图,当文件存在时,便不会执行后面的动作:

在这里插入图片描述

注意:Linux 中的很多通配符在 command 模块中不支持。

5.2 shell

  • 功能:和 command 功能类似
  • 常用参数
参数含义
chdir执行命令前先进入到指定目录
cmd运行命令指定
creates如果文件存在将不运行
removes如果文件存在将运行
free_form在远程主机中执行的命令,此参数不需要加
executable指定执行环境,默认为sh

在这里插入图片描述

在这里插入图片描述

5.3 script

  • 功能:在 ansible 主机中写好的脚本在受控主机中执行

参数如图所示:

在这里插入图片描述

编写一个脚本,在 ansible 主机中写好的脚本在受控主机中执行;

在这里插入图片描述

5.4 copy

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

复制文件到受控主机中;

在这里插入图片描述

在受控主机中查看:

在这里插入图片描述
可以从上面看到,复制时权限会被保留,那么加上参数 mode 来指定目的地文件的权限来复制:

在这里插入图片描述
查看效果:

在这里插入图片描述

指定参数来指定目的地文件的所有人和所有组:

在这里插入图片描述

查看效果:

在这里插入图片描述
指定文本内容直接在受控主机中生成文件:

在这里插入图片描述
查看效果:

在这里插入图片描述

默认复制到目的地文件时,当文件已经存在时会被覆盖,加入参数 backup 来生成备份文件:

在这里插入图片描述

结果如图所示:

在这里插入图片描述

5.5 fetch

  • 功能:从受控主机把文件复制到 ansible 主机,但不支持目录
  • 常用参数
参数含义
src受控主机的源文件
dest本机目录
flat基本名称功能

(1)从受控主机把文件复制到ansible主机,但不支持目录复制:

在这里插入图片描述
查看:可以看到在 /mnt 生成了两个以 ip 为名的目录

在这里插入图片描述
(2)将受控主机的 /etc/hostname 文件复制到 ansible 主机的 /mnt/lzxk 文件中,加了flat 参数,表示 zxk 是一个文件而不是目录:

在这里插入图片描述
此时在 /mnt/ 中生成一个文件,而文件中只有一台主机名,这是因为在执行的过程中先访问的是 100主机,随后访问的是 200 主机,200 主机的主机名会覆盖100主机名;

在这里插入图片描述

5.6 file

  • 功能:设置文件的属性
  • 常用参数
参数含义
path指定文件名称
state指定操作状态
touch建立
absent删除
directory递归
link建立链接
hard
mode设定权限
owner设定文件用户
group设定文件组
src源文件
dest目标文件
recurse=yes递归更改

清空被控主机 /mnt 中的素有文件,来观察实验效果:

在这里插入图片描述

(1)新建文件
用命令 ansible westos -m file -a 'path=/mnt/westos state=touch'在被控主机的 /mnt 下新建文件:

在这里插入图片描述

建立之后用命令 ansible westos -m shell -a 'ls -l /mnt'来查看文件

在这里插入图片描述
(2) 删除
用命令 ansible westos -m file -a 'path=/mnt/westos state=absent'在被控主机的 /mnt 下删除文件:

在这里插入图片描述

(3)新建目录
用命令 ansible westos -m file -a 'path=/mnt/westos state=directory'在被控主机的 /mnt 下新建目录:

在这里插入图片描述
查看

在这里插入图片描述
(4)建立链接
先建立一个文件,然后用命令 ansible westos -m file -a 'src=/mnt/zxk dest=/mnt/kkk state=link 来建立链接;

在这里插入图片描述

建立链接之后,查看的结果如图所示:

在这里插入图片描述

(5)硬链接
用命令 ansible westos -m file -a 'src=/mnt/zxk dest=/mnt/xxx state=hard' 来建立硬链接;

在这里插入图片描述
如图所示,硬链接的 id 和链接来源的 id 一致;

在这里插入图片描述

(6)递归
在前面生成的目录中新建一个文件,来更改其权限;
更改之前的目录以及目录中文件的权限如图所示:

在这里插入图片描述
用命令 ansible westos -m file -a 'path=/mnt/westos mode=777 recurse=yes'来递归更改权限;

在这里插入图片描述

更改之后的效果如下图所示:

在这里插入图片描述

5.7 archive

  • 作用:压缩
  • 常用参数
参数含义
path打包目录名称
dest声称打包文件名称
format打包格式
owner指定文件所属人
mode指定文件权限

输入命令 ansible westos -m archive -a 'path=/etc dest=/mnt/etc.tar.gz owner=zxk mode=755' 来打包;

在这里插入图片描述
查看效果:

在这里插入图片描述

5.8 unarchive

  • 功能:解压缩
  • 常用参数
参数含义
copy默认为 yes 从 ansible 主机复制文件到受控主机,设定为 no 从受控主机中寻找 src 源文件
remote_src功能同 copy 且相反,设定为 yes 表示包在受控主机,设定为 no表示包在ansible主机
src包路径,可以使ansible主机也可以使受控主机
dest受控主机目录
mode加压后文件权限,copy 必须是 yes ,否则改不了权限

用命令ansible westos -m unarchive -a 'src=/mnt/etc.tar.gz dest=/mnt copy=no' 来解压受控主机的文件;

在这里插入图片描述

查看效果:

在这里插入图片描述
在默认情况下当 copy=no 时,也就是从被控主机中寻找 src 源文件时,不能指定解压之后文件的权限;当 src 源文件来自 ansible 主机时,可以指定权限;
先生成一个压缩包,然后用命令 ansible westos -m unarchive -a 'src=/mnt/westos.tar.gz dest=/mnt mode=777 owner=zxk' 来解压;

在这里插入图片描述
在这里插入图片描述

效果查看:

在这里插入图片描述

5.9 hostname

  • 作用:管理主机名称
  • 常用参数
参数含义
name指定主机名称

修改主即名用命令 ansible 172.25.254.100 -m hostname -a 'name=westos.zxk' 来修改,用命令 ansible 172.25.254.100 -m shell -a 'hostname' 来查看;

在这里插入图片描述

5.10 cron

  • 作用:计划任务
  • 常用参数
参数含义
minute 分钟
hour小时
day
month
weekday
name任务名称
job任务脚本或命令
disabledyes 禁用计划任务,no 启动计划任务
stateabsent 删除计划任务

用命令 ansible westos -m cron -a "job=data name=westostest minute=*/2" 来设定定时任务;其中 job 表示到时间后执行的命令,name 表示此次任务的名称,minute 表示设定的分钟,不写则默认是 * ;

在这里插入图片描述

关闭任务:
用命令 ansible westos -m cron -a "job=data name=westostest disabled=yes" 来关闭任务,可以看到关闭之后在查看时,前面是用 # 注释掉的;

在这里插入图片描述
开启任务:
用命令 ansible westos -m cron -a "job=data name=westostest disabled=no" 来开启任务;开启之后前面的#就被去掉了;

在这里插入图片描述

删除任务:
用命令 ansible westos -m cron -a "job=data name=westostest state=absent"来删除任务;

在这里插入图片描述

5.11 yum_repository

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

用命令 ansible westos -m shell -a 'ls /etc/yum.repos.d/' 来查看软件仓库是否已经有编写的文件;
用命令 ansible westos -m yum_repository -a 'name=AppStream baseurl=http://172.25.254.39/RHEL8/AppStream description=westosAppStream gpgcheck=no file=westos' 来写入软件仓库的内容;

在这里插入图片描述
用命令 ansible westos -m shell -a 'cat /etc/yum.repos.d/westos.repo' 来查看写入文件的内容;

在这里插入图片描述
用命令 ansible westos -m yum_repository -a 'name=BaseOS baseurl=http://172.25.254.39/RHEL8/BaseOS description=westosBaseOS gpgcheck=no file=westos' 在写入一个仓库信息;

在这里插入图片描述
设置enabled=0 参数,表示不启用 BaseOs软件仓库;

在这里插入图片描述
设置 enabled=1 参数,表示启用BaseOs软件仓库;

在这里插入图片描述

用命令 ansible westos -m yum_repository -a 'name=BaseOS baseurl=http://172.25.254.39/RHEL8/BaseOS description=westosBaseOS gpgcheck=no file=westos state=absent' 删除 BaseOs 软件仓库;

在这里插入图片描述

5.12 dnf

  • 作用:管理系统中的dnf仓库及管理软件
  • 常用参数
参数含义
name指定包
state指定动作
present 安装
latest 更新
absent 删除
list列出指定信息,httpd、 installed、 all、available
disable_gpg_check禁用gpgkey检测
enablerepo指定安装包来源
disablerepo禁用安装包来源

用命令 ansible westos -m dnf -a 'name=vsftpd state=latest' 来安装 vsftpd 单个软件;

在这里插入图片描述

用命令ansible westos -m dnf -a 'name="httpd,dhcp-server" state=latest disable_gpg_check=yes' 来安装多个软件;
如图所示,当被控机的软件仓库搭建的有问题时,此时在安装软件时,会出现找不到可用的安装包的状况;

在这里插入图片描述

用命令 ansible westos -m dnf -a 'name="httpd,dhcp-server" state=absent' 来卸载已经安装的软件包;
从下图可知,当被控机中没有安装软件包时,在卸载时会提示什么都没有做;对于已经安装过对应软件包的被控机,会执行卸载动作,但是从安装和卸载的软件包中明显的可以发现没有卸载相关依赖性的软件包

在这里插入图片描述

用命令

先为 100 主机安装 httpd 软件,再次卸载用命令 ansible 172.25.254.100 -m dnf -a 'name="httpd" state=absent autoremove=yes 来卸载软件包并同时卸载依赖性;

在这里插入图片描述
在这里插入图片描述
用命令 ansible 172.25.254.100 -m dnf -a 'name="@Virtualization Tools" state=latest' 来为被控主机100安装组件;

在这里插入图片描述
也可以用网络源的方式来安装软件;
对于本地软件仓库的禁用,通常用于不同仓库中存在不同版本的情况下。

5.13 service

  • 作用:管理系统服务状态
  • 常用参数
参数含义
name指定服务名称
state指定对服务的动作,started、stoped、restarted、reloaded
enabled设定服务开机是否启动,yes开启启动,no开机不启动

用命令 ansible 172.25.254.100 -m service -a 'name="vsftpd" state=started' 来开启服务;

用命令 ansible 172.25.254.100 -m service -a 'name="vsftpd" state=restarted' 来重启服务;

用命令shell 的方式来查看服务的状态ansible 172.25.254.100 -m shell -a 'systemctl status vsftpd'
可以发现其已经开启,但是默认开启的服务没有设定开机自启;

在这里插入图片描述

用命令 ansible 172.25.254.100 -m service -a 'name="httpd" state=started enabled=yes' 来开启服务并设定开机自启;

在这里插入图片描述

有的服务不支持 reloaded

5.14 firewalld

以上服务在开启之后不一定可以直接使用,需要设定火墙策略才可以访问。

  • 常用参数
参数含义
zone火墙的域
service服务名称
permanent永久生效
state状态
enbaled 允许
disabled 拒绝
immediate立即生效

查看模块的帮助:

在这里插入图片描述

用命令 ansible 172.25.254.100 -m firewalld -a 'zone=public service=http permanent=yes state=enabled immediate=yes' 为刚才安装的 http服务设定火墙策略;

在这里插入图片描述

5.15 user

  • 作用:模块可以帮助我们管理远程主机上的用户,比如创建用户、修改用户、删除用户、为用户创建密钥对等操作;
  • 常用参数
参数含义
name必须参数,用于指定要操作的用户名称
group指定用户所在的基本组
gourps指定用户所在的附加组
append指定添加附加组默认值为no
shell指定用户的默认 shell
uid指定用户的 uid 号
comment指定用户的注释信息
state用于指定用户是否存在于远程主机
present 建立
absent 删除
remove当删除用户是删除用户家目录,默认值为no
password此参数用于指定用户的密码。但密码为明文,可以用openssl password -6 '密码’生成加密字符
generate_ssh_key生成sshkey

用命令 ansible westos -m user -a 'name=gzz state=present' 来新建用户 ;

用命令 ansible westos -m user -a 'name=gzz state=absent' 来删除用户 ;

在这里插入图片描述
用户虽然已经删除,但是并不会删除新建用户时所建立的用户家目录;

在这里插入图片描述

用命令 ansible westos -m user -a 'name=gzz state=present uid=6666' 来新建用户,并指定用户 id ;

在这里插入图片描述

用命令 ansible westos -m user -a 'name=gzz state=absent remove=yes' 来删除用户并删除用户的家目录 ;

在这里插入图片描述

用命令 ansible 172.25.254.100 -m user -a 'name=gzz state=present uid=6666 group=1001 comment="gzz user"' 来新建用户,并指定用户的组身份和用户说明;

在这里插入图片描述

在这里插入图片描述

用命令 ansible 172.25.254.100 -m user -a 'name=gzz state=present uid=6666 group=1001 comment="gzz user" shell=/bin/sh groups=dhcpd' 来更改用户所用 shell 和附加组的身份;

在这里插入图片描述

在这里插入图片描述

用命令 ansible 172.25.254.100 -m user -a 'name=gzz groups=apache append=yes' 来为用户添加附加组 ;

在这里插入图片描述
在这里插入图片描述

用命令 ansible 172.25.254.100 -m user -a 'name=gzz password=$6$S8p5vUiYhNxRnStf$H6RzQOm.T73evAQ7wcx9SY9bGV3wnRZs0BOx5Ph7gfiizr7hoxPlGhtYsEieWfl2ctHXiQvlaHTSQQ71gIARR.' 来修改用户的密码;
先用命令 openssl passwd -6 生成密码;

在这里插入图片描述
在这里插入图片描述
用命令 ansible westos -m user -a 'name=zzz generate_ssh_key=yes home=/home/www' 表示在新建用户时,生成密钥并指定用户的家目录为 www ;

在这里插入图片描述
在这里插入图片描述

5.16 group

  • 作用:group 模块可以帮助我们管理远程主机上的组。
  • 常用参数
参数含义
name必须参数,用于指定要操作的用户名称
state用于指定组的状态
present 建立
absent 删除
gid用于指定组的gid

用命令 ansible westos -m group -a 'name=wang state=present' 来创建组;

在这里插入图片描述
在这里插入图片描述

用命令 ansible westos -m group -a 'name=wang state=absentt' 来删除组;
用命令 ansible westos -m group -a 'name=wang state=present gid=7777' 指定组的 id 来建立组,当组已经存在时就是更改组的id 不存在时就是指定 id 建立组;

在这里插入图片描述

在这里插入图片描述

5.17 lineinfile

参数

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

用命令 ansible westos -m lineinfile -a 'path=/mnt/westos line="hello zxk" create=yes' 在被控主机中新建一个文件,并且指定文件名称;

在这里插入图片描述
在已经存在的文件中加入内容,用命令 ansible westos -m lineinfile -a 'path=/mnt/westos line="hello westos"' 来添加;

在这里插入图片描述在这里插入图片描述

加上 regexp 参数,表示使用匹配的方式替换文件内容,如果文件有多行时,只有文件中最后一个与匹配内容一致的才会被替换;但是当删除时,所有与匹配内容一致的,都会被删除;
用命令 ansible westos -m lineinfile -a 'path=/mnt/westos line="hello test1" regexp="test"' 来修改文件内容;
当只匹配到一行时会直接修改;

在这里插入图片描述
当匹配多余一行时,也就是重复匹配时;会默认更改最后匹配到的行内容;

在这里插入图片描述

删除时,用命令 ansible westos -m lineinfile -a 'path=/mnt/westos state=absent regexp="test"' ,如果匹配的多行的内容都会被删除;

在这里插入图片描述
加上 backrefs 参数,当内容无匹配规则时不对文件做任何更改,默认值为no;还可以向后引用 regexp 变量信息;
用命令 ansible westos -m lineinfile -a 'path=/mnt/westos line="hello kkk" regexp="test" 来测试当没有匹配规则时的情况;
可以看到当没有匹配规则时会默认添加内容;

在这里插入图片描述

当加上 backrefs 参数之后,此时没有匹配到内容不再做修改;

在这里插入图片描述

向后索引 regexp 的值,当写入 'path=/mnt/westos regexp="(h.{4}).*(w.{5})" line="\\1"' 表示regexp 的值是个变量,将匹配到的变量值第一个写入;
默认不会识别变量值;

在这里插入图片描述

加入 backrefs 参数之后,所有的变量值会向后延伸,便会采集到变量值;

在这里插入图片描述
参数 insertafter 可以将文本插入到 “指定的行” 之后,insertafter参数的值可以设置为 EOF 或者正则表达式;

在指定的关键字后面添加:

在这里插入图片描述
在最后一行添加:

在这里插入图片描述

参数 insertbefore可以将文本插入到 “指定的行” 之前,insertbefore参数的值可以设置为 BOF 或者正则表达式;

在指定的行之前添加:

在这里插入图片描述

在在第一行添加:

在这里插入图片描述

用参数 backup 在文件更改之前对文件进行备份;

在这里插入图片描述

在这里插入图片描述

5.18 replace

  • 作用:replace 模块可以根据我们指定的正则表达式替换文件中的字符串,文件中所有被匹配到的字符串都会被替换;
  • 常用参数
参数含义
path指定要操作的文件
regexp指定一个正则表达式,文件中与正则匹配的字符串将会被替换。
replace指定最终要替换成的字符串
backup是否在修改文件之前对文件进行备份,最好设置为yes

用命令 ansible westos -m replace -a 'path=/mnt/westos regexp="hello" replace="kkk" ' 来将单个字符做替换;

在这里插入图片描述

可以用参数 backup 来做备份替换;

在这里插入图片描述

在这里插入图片描述

5.19 setup

  • 作用:setup模块用于收集远程主机的一些基本信息
  • 常用参数
参数含义
filter用于进行条件过滤。如果设置,仅返回匹配过滤条件的信息

用命令 ansible westos -m setup 来采集受控主机的信息;
用命令 ansible westos -m setup | less 来将采集的信息分页浏览,在分页浏览中搜索需要查看的信息;

在这里插入图片描述

从受控主机中采集需要的信息;

在这里插入图片描述

在这里插入图片描述

5.20 debug

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

用命令 ansible westos -m debug -a 'msg="hello world"' 调试输出的信息;

在这里插入图片描述

用参数 verbosity 来控制显示的级别,数字越大,显示的信息越少;

在这里插入图片描述

参数 var 用于做变量的输出,不能单独用 debug 来做,要结合其他的方式来实现其效果;

现将其结合 playbook 来观察效果;
编辑一个 playbook 的剧本;

在这里插入图片描述

playbook 在执行的时候默认会执行 setup;
当文件内容书写正确时,此时在执行时会获得到变量的信息,如下图所示:

在这里插入图片描述
当书写的变量不能被识别时,会提示变量值不存在;

在这里插入图片描述
如果写入的是,msg 便会将其识别为字符串显示出来,效果如下图所示:

在这里插入图片描述

以上是关于Ansible 中常用模块的主要内容,如果未能解决你的问题,请参考以下文章

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

Ansible playbooks入门和编写规范Ansible Playbooks常用模块介绍常用模块集合

ansible使用笔记(二)常用命令使用及常用模块简介

Ansible命令应用之常用模块(持续更新中)

ansible常用命令及模块的使用方法

ansible plugins简介