ansible (第三天)

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文件内容如下

ansible (第三天)_第1张图片

 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:设置解压缩后的文件权限

ansible (第三天)_第2张图片

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 (第三天)_第3张图片

 #禁用计划任务

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 参数需要接受加密后的值

ansible (第三天)_第4张图片

 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

ansible (第三天)_第5张图片

 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:

ansible (第三天)_第6张图片

 sefcontext模块

受控主机缺少依赖policycoreutils-python

ansible (第三天)_第7张图片

 7.配置网络

7.1nmcli使用模块

作为network系统角色的代替选择,红帽ansible引擎包含可支持系统上网络配置的一系列模块。nmcli 模块支持管理网络连接和设备。此模块支持配置网络接口组合和绑定,以及ipv4和ipv6寻址

下表列出nmcli模块的一些参数:

ansible (第三天)_第8张图片

 以下实例为网络连接和设备配置静态IP配置

ansible (第三天)_第9张图片

 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: 指定属组

示例:

ansible (第三天)_第10张图片

 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,登录将失败

ansible (第三天)_第11张图片

 9.磁盘管理

9.1 parted、lvg、lvol、filesystem模块管理磁盘及文件系统

1、parted

示例:事先添加一块10G新磁盘

 2、创建主分区

ansible (第三天)_第12张图片

 2 、lvg

示例:给以上分区创建卷组

ansible (第三天)_第13张图片

 2、在/dev/nvme0n2p1上创建一个具有物理扩展区大小的卷组16M

ansible (第三天)_第14张图片

3、在/dev/nvme0n2p3和/dev/nvme0n2p4上创建卷组或调整卷组大小先创建两个分区

ansible (第三天)_第15张图片

 3 、lvol

示例:1、创建逻辑卷512M

ansible (第三天)_第16张图片

 2、对/dev/nvme0n2p3创建512M的逻辑卷

ansible (第三天)_第17张图片

 3、创建一个逻辑卷,其大小等于卷组中所有剩余空间的大小 -l 100%VG

ansible (第三天)_第18张图片

 4、将逻辑卷扩展到1024m

ansible (第三天)_第19张图片

 4 、filesystem

ansible (第三天)_第20张图片

 ansible (第三天)_第21张图片

 9.2 mount模块

配置挂载点

选项:

fstype:必选项,挂载文件的类型

path:必选项,挂载点

opts:传递给mount命令的参数

src:必选项,要挂载的文件系统

state:必选项present:只处理fstab中的配置absent

挂载点mounted

unmounted:卸载

 示例:

1、挂载光盘到/mnt/dvd

ansible (第三天)_第22张图片

 2、挂载/dev/vg1/lv1到/tools

ansible (第三天)_第23张图片

 3、使用UUID挂载

ansible (第三天)_第24张图片

 

你可能感兴趣的:(ansible,服务器,javascript)