2.6 lineinfile模块
lineinfile模块,确保"某一行文本"存在于指定的文件中,或者确保从文件中删除指定的"文本"(即确保指 定的文本不存在于文件中),还可以根据正则表达式,替换"某一行文本"。
path参数 :必须参数,指定要操作的文件。
line参数 : 使用此参数指定文本内容。
regexp参数 :使用正则表达式匹配对应的行,当替换文本时,如果有多行文本都能被匹配,则只 有最后面被匹配到的那行文本才会被替换,当删除文本时,如果有多行文本都能被匹配,这么这些 行都会被删除。
state参数:当想要删除对应的文本时,需要将state参数的值设置为absent,absent为缺席之意, 表示删除,state的默认值为present
backrefs参数:默认情况下,当根据正则替换文本时,即使regexp参数中的正则存在分组,在line 参数中也不能对正则中的分组进行引用,除非将backrefs参数的值设置为yes,backrefs=yes表示 开启后向引用,这样,line参数中就能对regexp参数中的分组进行后向引用了。backrefs=yes开启 后向引用功能。
另一个作用,使用正则表达式替换对应行时,如果正则没有匹配到任何的行,那么line对应的内容 会被插入到文本的末尾,不过,如果使用了backrefs=yes,情况就不一样了,当使用正则表达式替 换对应行,那么当正则没有匹配到任何的行时,则不会对文件进行任何操作,相当于保持原文件不 变
insertafter参数:借助insertafter参数可以将文本插入到“指定的行”之后,insertafter参数的值可 以设置为EOF或者正则表达式,EOF为End Of File之意,表示插入到文档的末尾,默认情况下 insertafter的值为EOF,如果将insertafter的值设置为正则表达式,表示将文本插入到匹配到正则 的行之后,如果正则没有匹配到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被 忽略。
insertbefore参数:借助insertbefore参数可以将文本插入到“指定的行”之前,insertbefore参数 的值可以设置为BOF或者正则表达式,BOF为Begin Of File之意,表示插入到文档的开头,如果将 insertbefore的值设置为正则表达式,表示将文本插入到匹配到正则的行之前,如果正则没有匹配 到任何行,则插入到文件末尾,当使用backrefs参数时,此参数会被忽略。
backup参数:是否在修改文件之前对文件进行备份。
create参数 :当要操作的文件并不存在时,是否创建对应的文件。
我们使用/testdir/test文件作为被操作的文件,test文件内容如下
1.插入内容。 判断文件中test text内容是否存在,则在文档尾插入该内容
#ansible test70 -m lineinfile -a 'path=/testdir/test line="test text"'
2.regexp支持正则符匹配可以将匹配的行进行替换,当匹配不到则在文档尾追加写入
#ansible test70 -m lineinfile -a 'path=/testdir/test regexp="^1" line="test text"
3.基于正则替换行,当没有匹配到指定行则不做任何更改
#ansible test70 -m lineinfile -a 'path=/testdir/test regexp="^line" line="test text" backrefs=yes '
4.匹配指定内容的行删除(若多行相同全部删除)
#ansible test70 -m lineinfile -a 'path=/testdir/test line="123" state=absent'
根据正则表达式删除对应行,如果有多行都满足正则表达式,那么所有匹配的行都会被删除
ansible test70 -m lineinfile -a 'path=/testdir/test regexp="^lineinfile" state=absent'
如果将backrefs设置为yes,表示开启支持后向引用,使用如下命令,可以将test示例文件中的"Hello ansible,Hiiii"替换成"Hiiii",如果不设置backrefs=yes,则不支持后向引用,那么"Hello ansible,Hiiii"将 被替换成"\2" ansible, (Hiiii) \1 \2 \3
ansible servera -m lineinfile -a 'path=/testdir/test regexp="ansible,(Hiiii)" line="\1" backrefs=yes'
2.7unarchive解包解压缩
参数:
copy:1、将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes
2、将远程主机上的某个压缩包解压缩到指定路径下,设置copy=no
remote_src:和copy功能一样且互斥,yes表示在远程主机,不在ansible主机,no表示文件在 ansible主机上
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路 径,则需要设置copy=no
dest:远程主机上的目标路径
mode:设置解压缩后的文件权限
2.8 Archive模块打包压缩
#ansible websrvs -m archive -a 'path=/var/log/ dest=/data/log.tar.bz2 format=bz2 owner=wang mode=0600'
3.计划任务
cron模块
backup:对远程主机上的原任务计划内容修改之前做备份
cron_file:如果指定该选项,则用该文件替换远程主机上的cron.d目录下的用户的任务计划
day:日(1-31,,/2,……)
hour:小时(0-23,,/2,……)
minute:分钟(0-59,,/2,……)
month:月(1-12,,/2,……)
weekday:周(0-7,*,……)
job:要执行的任务,依赖于state=present
name:该任务的描述
special_time:指定什么时候执行,参数:reboot,yearly(每年),annually,(每年相当于 yearly)monthly,weekly,daily,hourly
state:确认该任务计划是创建还是删除
user:以哪个用户的身份执行
#备份数据库脚本
[root@centos8 ~]#cat mysql_backup.sh mysqldump -A -F --single-transaction --master-data=2 -q -uroot |gzip > /data/mysql_date +%F_%T.sql.gz
#创建任务 30 2 * * 1-5
#禁用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=yes"
#启用计划任务
ansible websrvs -m cron -a "minute=*/5 job='/usr/sbin/ntpdate 172.20.0.1 &>/dev/null' name=Synctime disabled=no"
#删除任务
ansible websrvs -m cron -a "name='backup mysql' state=absent" ansible websrvs -m cron -a 'state=absent name=Synctime'
4.用户管理
4.1user模块
user模块实现用户账号管理。
常用选项:
name=:用户名
uid:用户的uid
group:所属组,即私有组
groups:附加组。
state:状态。
remove: yes no
password
示例:
1、创建用户tom,密码为123 首先可以使用python的crypt命令来生成一个密码, 因为 ansible user 的 password 参数需要接受加密后的值
2、删除用户,连同家目录一起
[root@master ~]# ansible webservers -m user -a 'name=tom state=absent remove=yes'
3、创建用户bob,指定附加组为rhce
[root@master ~]# ansible webservers -m user -a 'name=bob groups=rhce'
4、为bob用户生成密钥对
[root@master ~]# ansible webservers -m user -a 'name=bob generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa' [root@master ~]# ansible webservers -m shell -a 'ls -la ~bob/.ssh'
4.2group模块
选项:
name参数:必须参数,用于指定要操作的组名称。
state参数:用于指定组的状态,两个值可选,present,absent,默认为present,设置为absent 表示删除 组。
gid参数:用于指定组的gid。
system参数:系统组。 示例: 创建一个组rhce
[root@master ~]# ansible webservers -m group -a 'name=rhce'
5.软件包管理
5.1 yum_repository yum_repository 模块可以帮助我们管理远程主机上的 yum 仓库
常用选项
name参数:必须参数,用于指定要操作的唯一的仓库ID,也就是”.repo”配置文件中每个仓库对应 的”中括号”内的仓库ID。
baseurl参数:此参数用于设置 yum 仓库的 baseurl。
description参数:此参数用于设置仓库的注释信息,也就是”.repo”配置文件中每个仓库对应的” name字段”对应的内容。
file参数:此参数用于设置仓库的配置文件名称,即设置”.repo”配置文件的文件名前缀,在不使用 此参数的情况下,默认以 name 参数的仓库ID作为”.repo”配置文件的文件名前缀,同一个”.repo” 配置文件中 可以存在多个 yum 源。
enabled参数:此参数用于设置是否激活对应的 yum 源,此参数默认值为 yes,表示启用对应的 yum源,设置为 no 表示不启用对应的 yum 源。
gpgcheck参数:此参数用于设置是否开启 rpm 包验证功能,默认值为 no,表示不启用包验证, 设置为 yes 表示开启包验证功能。
gpgkey参数:当 gpgcheck 参数设置为 yes 时,需要使用此参数指定验证包所需的公钥。 state 参数:默认值为 present,当值设置为 absent 时,表示删除对应的 yum 源。
示例:注意环境默认的yum源http://content.example.com/rhel8.0/x86_64/dvd/AppStream
//为webservers的主机配置yum源,设置ID为AppStream
5.2yum/dnf模块
name参数:必须参数,用于指定需要管理的软件包,比如 nginx。
state参数:用于指定软件包的状态 ,默认值为。present,表示确保软件包已经安装,除了。 present,其他可用值有 installed、latest、absent、removed,其中 installed 与present 等效, latest 表示安装 yum 中最新的版本,absent 和 removed 等效,表示删除对应的软件包。
disable_gpg_check参数:用于禁用对 rpm 包的公钥 gpg 验证。默认值为 no,表示不禁用验证, 设置为 yes 表示禁用验证,即不验证包,直接安装。在对应的 yum 源没有开启 gpg 验证的情况 下,需要将此参数的值设置为 yes,否则会报错而无法进行安装。
enablerepo参数:用于指定安装软件包时临时启用的 yum 源。假如你想要从A源中安装软件,但 是你不确定A源是否启用了,你可以在安装软件包时将此参数的值设置为 yes,即使A源的设置是未 启用,也可以在安装软件包时临时启用A源。
disablerepo参数:用于指定安装软件包时临时禁用的 yum 源。某些场景下需要此参数,比如,当 多个 yum 源中同时存在要安装的软件包时,你可以使用此参数临时禁用某个源,这样设置后,在 安装软件包时则不会从对应的源中选择安装包。
enablerepo 参数和 disablerepo 参数可以同时使用。
在 ansible-demo3 主机上安装 telnet 时,确定多个源中都有 telnet,但是不想从 local 源中安装,所以 在安装时临时禁用 local 源。
#ansible all -m yum -a 'name=telnet disable_gpg_check=yes disablerepo=local'
在主机上安装 telnet 时不确定 local 源是否启用,使用 enablerepo=local确保临时启用 local 源。
#ansible all -m yum -a 'name=telnet disable_gpg_check=yes enablerepo=local'
5.3Service/systemd模块
name参数:此参数用于指定需要操作的服务名称,比如 nginx。
state参数:此参数用于指定服务的状态,比如,我们想要启动远程主机中的 nginx,则可以将 state 的值设置为 started;如果想要停止远程主机中的服务,则可以将 state 的值设置为 stopped。此参数的可用值有 started、stopped、restarted、reloaded。
enabled参数:此参数用于指定是否将服务设置为开机 启动项,设置为 yes 表示将对应服务设置为 开机启动,设置为 no 表示不会开机启动
arguments: 给命令提供一些选项
ansible all -m service -a "name=network state=restarted args=eth0"
runlevel : 运行等级
sleep: 如果运行看restarted 则stop and start 之间沉睡几秒中
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程 中根据该模式进行查找,如果匹配到,则认为该服务依然在运行
#ansible all -m systemd -a "name=nginx state=stopped enabled=no "
#ansible all -m service -a "name=httpd state=started enabled=yes"
验证服务启动
[root@master ~]#ansible webservers -m shell -a 'systemctl is-active httpd'
6.防火墙
6.1firewalld 模块
State 指防火墙策略 enable disable present absent
service 指定服务
immediate 立即启用
port 端口 port=80/tcp
permanent 永久生效
示例:
首先开启防火墙
[root@master ~]# ansible webservers -m service -a 'name=firewalld state=started enabled=true'
1、允许http服务
[root@master ~]# ansible webservers -m firewalld -a 'service=http permanent=true immediate=true state=enabled'
2、允许端口
[root@master ~]# ansible webservers -m firewalld -a 'port=80/tcp permanent=true immediate=true state=enabled'
3、富规则
[root@master ~]# ansible webservers -m firewalld -a 'rich_rule="rule family=ipv4 source address=192.168.150.0/24 service name=http accept" permanent=true immediate=true state=enabled'
4、端口转发
[root@master ~]# ansible webservers -m firewalld -a 'rich_rule="rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443" permanent=true immediate=true state=enabled'
5、masquerade
[root@master ~]# ansible webservers -m firewalld -a 'masquerade=yes
6.2 selinux模块
功能:管理远端主机的 SELINUX 防火墙;
参数
state Selinux模式:enforcing、permissive、disabled
policy targeted
1.设置 selinux 为 enforcing
[root@server ~]# ansible 192.168.20.23 -m selinux -a 'state=enforcing policy=targeted' [root@server ~]# grep "^SELINUX" /etc/selinux/config SELINUX=enforcing SELINUXTYPE=targeted
2.设置 selinux 为 disabled:
sefcontext模块
受控主机缺少依赖policycoreutils-python
7.配置网络
7.1nmcli使用模块
作为network系统角色的代替选择,红帽ansible引擎包含可支持系统上网络配置的一系列模块。nmcli 模块支持管理网络连接和设备。此模块支持配置网络接口组合和绑定,以及ipv4和ipv6寻址
下表列出nmcli模块的一些参数:
以下实例为网络连接和设备配置静态IP配置
7.2Hostname模块管理主机名(永久生效)
ansible node1 -m hostname -a “name=websrv”
ansible 192.168.100.18 -m hostname -a 'name=node18.magedu.com'
8.上传下载文件
8.1get_url 模块
该模块主要用于从http、ftp、https服务器上下载文件(类似于wget),主要有如下选项:
sha256sum:下载完成后进行sha256 check;
timeout:下载超时时间,默认10s
url:下载的URL
url_password、url_username:主要用于需要用户名密码进行验证的情况
owner: 指定属主
group: 指定属组
示例:
8.2uri模块 curl http://localhost -k -u tom:
如果远端是web服务器,可以利用ansible直接请求某个网页
常见参数有:
url= 指明请求的url的路径,如:http://10.1.32.68/test.jpg
user= 如果请求的url需要认证,则认证的用户名是什么
password= 如果请求的url需要认证,则认证的密码是什么
method= 指明请求的方法,如GET、POST…
body= 指明报文中实体部分的内容,一般是POST方法或PUT方法时用到
HEADER_ 自定义请求报文中的添加的首部 return_content: 是否将返回主体作为字典中的"content"值返回
validate_certs: 如果“否”,则不会验证 ssl 证书。这应该只设置为“否”使用个人控制的网站使用自签 名证书。
Force_basic_auth:
根据初始请求强制发送基本身份验证标头。Uri 模块使用的库仅在 webservice 以401状态响应初始请求 时发送身份验证信息。由于一些基本的认证服务没有正确地发送401,登录将失败
9.磁盘管理
9.1 parted、lvg、lvol、filesystem模块管理磁盘及文件系统
1、parted
示例:事先添加一块10G新磁盘
2、创建主分区
2 、lvg
示例:给以上分区创建卷组
2、在/dev/nvme0n2p1上创建一个具有物理扩展区大小的卷组16M
3、在/dev/nvme0n2p3和/dev/nvme0n2p4上创建卷组或调整卷组大小先创建两个分区
3 、lvol
示例:1、创建逻辑卷512M
2、对/dev/nvme0n2p3创建512M的逻辑卷
3、创建一个逻辑卷,其大小等于卷组中所有剩余空间的大小 -l 100%VG
4、将逻辑卷扩展到1024m
4 、filesystem
9.2 mount模块
配置挂载点
选项:
fstype:必选项,挂载文件的类型
path:必选项,挂载点
opts:传递给mount命令的参数
src:必选项,要挂载的文件系统
state:必选项present:只处理fstab中的配置absent
挂载点mounted
unmounted:卸载
示例:
1、挂载光盘到/mnt/dvd
2、挂载/dev/vg1/lv1到/tools
3、使用UUID挂载