ansible (第三天)

news2024/11/15 21:03:08

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挂载

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/150419.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

测牛学堂:软件测试python基础学习之数据类型详解(一)

python数据类型详解 为什么需要数据类型呢? 我们人脑可以轻松的区别不同类型的数据,比如看到1你就知道是数字,但是计算机做不到。 计算机工作的过程就是完成不同的类型的计算,例如做数学运算,做文件存储,逻…

【技术分享】Windows平台低延迟RTMP、RTSP播放器接口设计探讨

背景我们看过了太多介绍RTSP、RTMP播放相关的技术资料,大多接口设计简约,延迟和扩展能力也受到一定的局限,好多开发者希望我们能从接口设计的角度,大概介绍下大牛直播SDK关于RTMP、RTSP播放器开发设计,本文以Windows平…

redis 运维讲解02

一、数据持久化 1、为什么要持久化 redis 重启后,redis 存在内存数据中数据丢失,不管之前是多少G数据,秒丢,而且无法恢复,数据在内存中 [root86-5-master ~]# redis-cli -p 6379 127.0.0.1:6379> MSET k1 v1 k2…

浏览器相关知识

本文主要进行浏览器相关知识的整理总结。 一、浏览器的存储 浏览器的存储包括cookie,session,LocalStorage,sessionStorage,indexedDB。 作用cookiesessionsessionStorageLocalStorageindexedDB储存时间设置或不设置默认30分钟仅…

就只有这么简单?全自动加药装置远程维护解决方案

一、行业背景说起工业生产,给人们的普遍印象都是浓烟,废水,环境污染。尤其是石油、化工、发电厂等一些具有大型设备的地方,确实常常都会有浓烟和污水产出,让人看了恨不得离得越远越好!但是随着现代科技的发…

java和vue开发的电子书系统自动检测敏感词小说网站

简介 电子书系统,注册用户上传txt,系统自动检测敏感词汇并且自动生成章节。管理员审核电子书,管理电子书分类和用户,评论等。注册用户可以搜索浏览电子书,在线阅读和下载电子书。 演示视频:https://www.b…

Java设计模式-单例模式Singleton

介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。 比如 Hibernate 的 SessionFactory,它充当数据存储源的代理&#xff0…

系分 - 案例分析 - 系统规划

个人总结,仅供参考,欢迎加好友一起讨论 文章目录系分 - 案例分析 - 系统规划典型例题 1题目描述参考答案典型例题 2题目描述参考答案典型例题 3题目描述参考答案系分 - 案例分析 - 系统规划 典型例题 1 题目描述 某软件开发企业受对外贸易公司委托开发…

STM32F429连接USB飞行摇杆

本文介绍如何使用stm32连接usb接口的飞行摇杆。开发环境硬件: STM32F429IGT6开发板,USB接口的飞行摇杆。软件:STM32CubeIDE 1.11仿真器:stlink参考书:《圈圈教你玩USB》USB设备描述符一个USB设备只有一个设备描述符。USB主机通过不…

springboot3.0+GraalVM搭建云原生环境

1.首先下载安装GraalVM 选择java17.windows(amd64),最好选择VPN下载 下载完成以后解压,如图 然后配置环境变量 配置GRAALVM_HOME,如图 然后在PATH里面添加 %GRAALVM_HOME%\bin 配置完成以后,在cmd里面执行java -version,可以看到jdk已经是…

Apache Shiro教程(2)

Shiro实战教程 1、权限的管理 1.1、什么是权限管理 1、基本上涉及到用户参与的系统都需要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资…

【 uniapp - 黑马优购 | 加入购物车】如何配置 vuex、加入购物车功能并持久化

个人名片: 🐼作者简介:一名大二在校生,讨厌编程🎋 🐻‍❄️个人主页🥇:小新爱学习. 🐼个人WeChat:hmmwx53 🕊️系列专栏:&#x1f5bc…

ABP VNext 的日志机制 + SeriLog

** ABP VNext 的日志机制 ** 正用ABP VNext做个系统,由于框架默认带来日志处理机制,开发阶段基本能用,也一直没有去动它,快要上线了,思考了一下正式环境的日志管理流程,由于系统不大,预计访问…

第一章.机器学习基本概念

第一章.机器学习基本概念 1.1 第一章.机器学习基本概念 机器学习的本质就是:寻找一个函数。 1.不同种类的函数 1).Regression:The function outputs a scalar 说明:根据今天的PM2.5的一些参数来预测明天PM2.5值 2).Classification:Given option(classes…

STL vector 模拟实现

vector 概述 vector 的数据结构安排及操作方式,与原生数组十分相似,两者唯一的差别在于空间运用的灵活性。原生数组是静态空间,一旦配置了就不能改变大小;vector 是动态空间,可以在插入过程中动态调整空间大小。vecto…

Pivoting跳板攻击

跳板攻击(Pivoting)是Meterpreter提供的一种攻击方法,允许从Meterpreter终端攻击网络中的其他系统。假如攻击者成功的入侵了一台主机,他就可以任意的利用这台机器作为跳板攻击网络中的其他系统,或者访问由于路由问题而…

【ROS】tf2_geometry_msgs 出现 No module named ‘PyKDL‘

参考文章: PyCharm单独安装PyKDL 如何在基于python3的conda虚拟环境中从头编译PyKDL 1. 问题描述 import PyKDL ModuleNotFoundError: No module named PyKDL这是由于使用的环境中不存在 PyKDL 导致的,实际上 PyKDL 在装 ROS 的时候是一起装上了&#x…

基于Springboot搭建java项目(十八)——Java线程池原理和运用

​ 在上一篇博客中有说到线程的基本原理和用法,其实Java中开辟出了一种管理线程的概念,这个概念叫做线程池,线程池的好处,就是可以方便的管理线程,也可以减少内存的消耗。那么,我们应该如何创建一个线程池&…

JAVASE 基础知识点回顾

1.关键字Static static 有三个特点,这边先阐述一下,后面代码也会展示 static 可以修饰方法(静态方法)、成员变量(静态变量),修饰不了类请注意!随着类的加载而加载,优先于对象存在,说人话就是不new 对象也…

电机专用SVPWM算法实现

SH33F2811包含三相电机的空间矢量脉宽调制(Space Vector Pulse Width Modulation,SVPWM)算法,对应于交流感应电机或永磁同步电机中的三相电压源逆变器的功率器件的一种特殊的开关触发顺序和脉宽大小的组合。这种开关触发顺序和组合…