ansible-2

本文详细介绍了LinuxVolumeManager(LVM)的逻辑卷和卷组管理,包括如何使用ansible自动化任务,如创建、扩容、格式化和挂载逻辑卷,以及配置防火墙和模板文件。还涉及错误处理、when条件和playbook的使用方法。
摘要由CSDN通过智能技术生成
逻辑卷相关模块:逻辑卷可以动态管理存储空间,可以对逻辑卷进行扩容或缩减。可以把硬盘或分区转换成物理卷PV,在把1到多个PV组合成卷组VG,然后在VG上划分逻辑卷LV,LV可以像普通分区一样,进行格式化、挂载。
关闭虚拟机Node1为其添加2块20G的硬盘
fa45632eaa284a46825c40c1127629ab.png
df77724fc5334c4e959973b53bf4c918.png
lvg模块:创建、删除卷组,修改卷组大小。
常用选项:vg:定义卷组名(volume group)。pvs:由那些物理卷构成(physical volume)。
需要在test主机上安装lvm2软件包,test主机不能识别vgs和lvs等命令。
4281ff998be14787abbbdaeb37758f9a.png
2d7a4f16213b4cf8884067f4073b54b8.png
对/dev/sdb进行分区,
13e734dca5544ab58f4be2fca05551d4.png
1e60c8ea02484bc3bde660f814abc361.png
1644b6c6500e40d59948f2663c8bc7c1.png
查看lvg模块案例
7b54233f1b834cdfab78927f41685e38.png
使用ansible创建卷组。ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"
237932215be64fcf8f28b64776515934.png
44b6e20738cb468a95ced8ef093236db.png
扩容卷组,卷组由PV构成,只要向卷组中加入新的PV即可实现扩容。
ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"
1986cd0703c24a97a627a0dc349563b6.png
e33e1006a43a42608289f38673aecc52.png
lvol模块:创建、删除逻辑卷,修改逻辑卷大小。
常用选项:vg:指定在那个卷组上创建逻辑卷。lv:创建的逻辑卷名(logical volume)。size:逻辑卷的大小,不写单位,默认以M为单位。
ansible test -m lvol -a "vg=myvg lv=mylv size=2G"
421d5bde0aa844d3902ed783c1e99889.png
查看test主机
831dabb5192c4e1a8663d2fabb54472d.png
逻辑卷mylv扩容至4GB
ansible test -m lvol -a "vg=myvg lv=mylv size=4G"
826bfe7fac484360ae3a76f68b9b6ef6.png
e9108c523e6b447f9fd2ab2b5ed2a905.png
filesystem模块:用于格式化,创建文件系统。
常用选项:fstype:指定文件系统类型。dev:指定要格式化的设备,可以是分区,可以是逻辑卷。xfs:大文件。ext4:小文件
ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs"
7d7de26cec614ce59b22320844c733ab.png
查看格式化结果。
3657dcb702db4ae6ac32d6eda129ef80.png
mount模块:用于挂载文件系统。
常用选项:path:挂载点,如果挂载点不存在,自动创建。src:待挂载的设备。fstype:文件系统类型。state:mounted,表示永久挂载(写到/etc/fstab文件中),unmounted表示临时卸载该挂载点,absent表示永久卸载该挂载点。pots:挂载选项(ro,noauto)。
挂载/dev/myvg/mylv逻辑卷到/data目录(没有事先创建该目录)并写入到/etc/fstab文件
ansible test -m mount -a "path=/data src=/dev/myvg/mylv state=mounted fstype=xfs"
441e2c8c553c4e6fa4a8700e60b15ff0.png
查看挂载点
54464f3d28db423e919fb1f50ab9209a.png
/etc/fatab文件中已经被写入
d0bde78cd30f4b88845d2c6102cf9afd.png
扩容该挂载点,因为该挂载点的文件系统类型为xfs,所以需要使用resizefs命令通知挂载点扩容到逻辑卷的大小。如果不加resizefs,只会扩容逻辑卷,挂载点并没有扩容。
 ansible test -m lvol -a "vg=myvg lv=mylv size=6G resizefs=yes"
e40bdfefa1364301a3f1ee580bf24a52.png
此时不仅逻辑卷扩容了,该挂载点也扩容了
a6fc1a54141d4bf6b389252daa94de2d.png
9e019cc62eb04565a707be35e867cef9.png
卸载该挂载点,unmounted临时取消挂载点
fa653fca1e5347669e9109614506ed2e.png
48e93fb843084792b92db3fee85e7c9d.png
但/etc/fstab文件中还有该挂载点的数据
8009d216c05c4a43aa2d1592270bc7f7.png
使用absent永久卸载该挂载点
43ec1f2d8f124fbe851954fbc1400b29.png
此时不仅/data目录没有了,/etc/fstab中该挂载点的内容也没有了
6621b570ecbd487d912958933411c589.png
删除逻辑卷,需要加上force强制删除。
ansible test -m lvol -a "vg=myvg lv=mylv state=absent force=yes"
a4f9bbe6634449d3b18832f284f53ba3.png
41272973432942859899fe2f2ebbb619.png
删除卷组,当卷组中还有逻辑卷需要加force才能强制删除,如果没有逻辑卷就不需要加force也能删除卷组。 ansible test -m lvg -a "vg=myvg state=absent"
aaaa36ce8b82406d85f072dfa9bdc300.png
1ba83143bb064d42a5cfd5c1b8bd1520.png
Playbook剧本:常用于复杂任务的管理,以及管理经常要完成的任务。通过模块和它的参数,在特定主机上执行任务。playbook是一个文件,该文件中需要通过yaml格式进行书写。
YAML:YAML Ain't Markup Language:YAML不是一个标记语言。
yaml语法规范:1、yaml文件的文件名一般以yml或yaml作为扩展名。
2、文件一般以---作为第一行,不是必须的但是常用。
3、键值对使用冒号:表示,冒号后面必须有空格。
4、数组使用-表示,-后面必须有空格。
5、相同的层级必须有相同的缩进,如果缩进不对,则有语法错误,每一级缩进建议2个空格。
6、全文不能使用tab,必须使用空格。
配置vim适用yaml语法,编辑~/.vimrc,让vim如显示行号set nu,能够永久执行,此时打开另一个文件就能显示该文件的行号。
set ai:设置自动缩进,回车光标不在行首。set et:将tab键转换成相应个数的空格。set ts=2:设置按tab键为缩进两个空格。
7a0baeecdf384a68b47e1d6b5073fa98.png
551578ea4196417b9edd32b4e78a7ba3.png
编写playbook:一个剧本playbook,可以包含多个play。每个paly用于在指定的主机上,通过模块和参数执行相应的任务,每个play可以包含多个任务,任务由模块和参数构成。
编辑yaml能够ping所有主机。相当于:ansible all -m ping
94e78f67214e4db78d3c928d902021f3.png
ac2d8154ffdd4192b60771127f4c2ba1.png
执行该剧本。 ansible-playbook test.yml
cb9c4551ea834fe28b31e5c37ba3d025.png
在test组的主机和Node2上创建/tmp/demo目录,权限为0755,将控制端/etc/hosts拷贝到目标主机的/tmp/demo中。
4624345ec4ca4bb9a9fb344434855de1.png
6fbb0cae5d1a49cd815fd9e3f28ffc18.png
执行该剧本
e5dcfe12dadb4753b485e4618d61eed5.png
查看test和Node2
877807392c4547b7a33e4adbcd6a99f1.png
d8ae0798edb64fd9ad7b6451404e349c.png
不同的主机需要不同的play。在test组中的主机上创建用户bob,附件组是adm;在Node2主机上创建/tmp/hi.txt文件,其中的内容为Hello World。
e20f958ed9de48e192ce490165f24242.png
eeb0ef28721c4ab691ef2a9b4d304a26.png
e808530aa9b745518f21a51b72f02a34.png
查看结果
857dfe5ac47943beb4debb1b3ffb8280.png
f8dd69f3efe949709efe649867266bec.png
当使用content时,“ | ”符号表示为多行书写。
193ed06a753445669ddf2e74e3ffed68.png
c1548f7774b54d7da08e97618bb09540.png
“  > ” 表示一行书写。
c44dbff9fff44707a61bc9ef93bee3d4.png
45799493b7e44d29a182ec6fe6b17370.png
在test组中的主机上创建jieke用户,它的uid是1040,主组为daemon,密码为123。password中花括号开头要加双引号。
2a8fa8eb4e4a46f5ba6250eb749ddd89.png
b4e9d30942af4468a248136a1661c751.png
查看用户。
baf187f433b0460da1bcb4e25abe1c1f.png
dff52ccf76c94f12bbe3b7397e5179ab.png
删除用户
59aef044906c457289d5409867eb1365.png
f7d106cbdc504e0b95cd28f093d065c7.png
硬盘管理:常见的分区表类型有:MBR(主引导记录)、GPT(GUID分区表)。MBR最大支持4个主分区,多三个主分区加一个扩展分区。GPT最多支持128个主分区。支持大硬盘。
parted模块:用于硬盘分区管理。
常用选项:device:待分区的设备。number:分区编号。state:present表示创建,absent表示删除。part_state:分区是起始位置,不写表示从头开始。part_end:表示分区的结束位置,不写表示到结尾。
在test组中的主机上,对/dev/sdc进行分区创建一个1GB的主分区。
KB/MB/GB/TP等是1000进制,而KiB/MiB/GiB/TiB等是1024进制。
af346800a3c940a88d6bcc23765f7073.png
f22120cd55bc4daa812441f4e943ea0a.png
c523142f10bc446698d69a75c26e9ee7.png
继续编辑disk.yml对/dev/sdc进行分区,创建一个新的5GB主分区。
021db769fed24a25a65441a78d165a1f.png
a6ffb7e372444f85a67f144074a1e5d4.png
继续编辑disk.yml,创建名为my_vg的卷组它由上面创建的sdc1和sdc2构成。
1b6b9242256a45de9c9eb488c29cf4a5.png
2c89b2df5ee445f98a599c2ebe4e1394.png
继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷大小为1G
d545781ceb9a432e8a35cad839f4e661.png
4c912b22ff1c4401a3e0ee8cc7fb2358.png
继续编辑disk.yml,对my_lv逻辑卷进行格式化。
d7bb23c2f346442db479dca922d522a9.png
aefb8f33fc7c40c6ae28049c3798c037.png
继续编辑disk.yml,挂载该逻辑卷。
c852f76adb6e44c99414ae0cc4817c41.png
a7a15fce2d7848a4854f34c61cd23597.png
在test组中的主机上安装httpd、php、php-mysqlnd软件包
c4497102cc024d60b159d627ec4c89f1.png
也可以写成下面的模式
fdc1d113adfd41ab815c7eb36f400a83.png
d019e760c4f6401b83e1ec63572a0252.png
a1bfda557acf489eb79b6cf34cb9fa70.png
当想要安装图形化界面需要安装软件包组。查看所有的组: LANG=C yum grouplist。加LANG=C为中文。yum groupinstall "Minimal install":为下载最小化操作系统软件包组。
0e0b0c2920b44dcb8f91f8d4f328e61b.png
当想要安装gcc、Java等开发工具时,安装组包就能把这些开发工具都能安装。使用剧本安装开发工具包。需要加个@符号告诉剧本要安装组
fffbbcc1dd144f71a85b8fcd229972d8.png
991b8d7c73e54cbea8d4456f22db5000.png
升级软件包:让yum源的光盘升级(换最新版本的系统),然后在本机输入yum update就能够升级已经安装的软件包了。
通过ansible更新,“ * ”表示已经安装的所有软件包
047d10e9381049ed86c5396b045cffe1.png
————————————————————
ansible变量
facts变量:是ansible自带的预定义变量,用于描述被控制端软硬件信息。facts变量通过setup模块获得。ansible test -m setup: 查看test组中主机的的facts变量。
8bb999cb3b064006868fba19362cc36e.png
使用filter选项查看主机地址的信息。 ansible test -m setup -a "filter=ansible_all_ipv4_addresses"
eab9546f520f4cf89797b2fcf5fd3c43.png
常用的facts变量:ansible_all_ipv4_addresses:所有的IPV4地址。ansible_bios_version:BIOS版本信息。ansible_memtotal_mb:总内存大小。ansible_hostname:主机名。
使用grep在全部变量中搜索。-A3:表示显示往下三行。
906828fae0de46c2a7e017204adec380.png
debug模块:显示变量信息。相当于shell的echo。
常用选项:msg:输出变量等信息。
在playbook中变量在{{ }}中显示。
b5a6158744244c5bb8dcb6dbd022a89b.png
36b3938f52044e34b470cfe8a4fea67e.png
自定义变量:可以方便playbook重用,比如装包的playbook,包名使用变量,多次执行playbook,只要改变变量名即可,不用编写新的playbook。
ansible支持10种以上的变量定义方式,常用的变量来源如下:inventory变量,变量来自于主机清单文件。facts变量。playbook变量,变量在playbook中定义。变量文件,专门创建用于保存变量的文件,推荐变量写入单独的文件。
inventory变量,比如当在test中主机创建一个nb账户,在webservers中主机创建xixi账户。
c79f7c3ce3e84f78a87dba4f23ef78f5.png
这样写是能成功创建账户但要编写两个剧本太过麻烦。因为要在test和webservers主机上都创建一个账户,可以定义一个相同的变量,但在不同主机上识别该变量会得到不同的内容,就实现了使用一个任务就能执行之前两个的任务。
ecd99e1d328a4196a4386a0e79393f96.png
在主机清单hosts中定义变量
22a6a2703bda471d8564bef2b05433d3.png
执行该剧本
3b35ac8412a949149cfcd94f2b4f6005.png
查看账户
6a9074566b1649d7a326374b7a0a1e83.png
985b8daf1866415c8f1f59337058d6f1.png
ee286637b5004f3993482e4192ba0c38.png
在playbook中定义变量
在test组中的主机上创建用户lisi设置密码为123456
8df350daf85540b3ad1404f4adace62e.png
使用自定义变量实现。因为密码原本就在花括号内,所以不需要再加花括号。用户名可加可不加引号,密码必须加引号。密码加了引号就是字符串,否则就是数字。密码本身为字符串。
76791a7cf62647479b2e0104c4679d39.png
769deac12c874f2c97ae3abc77e86387.png
把变量定义在文件中。
创建自定义变量文件
1639ef53b9a7431188630e1412c3320a.png
39524f903ae645a897402b156cb7d1e1.png
vars_files:指定自定义变量的文件,用于声明变量文件
c0634785beb2480882055dddc1154212.png
c4e8558980964646a4c877dcc15b0220.png
补充模块
firewalld模块:用于配置防火墙的模块。
常用选项:port:声明端口。permanent:永久生效,但不会立即生效。immediate:立即生效,临时生效。state:enabled:放行,disabled:拒绝。
防火墙一般默认拒绝,需要明确写入允许的服务,
配置test中主机的http服务,可以在域名模块中安装firewalld软件包,但不能在service中的httpd任务中添加开启firewalld服务,playbook会把httpd,firewalld 当成一个整体,需要另起一个任务。
a2d9a3590dd9490e85a55dd6ec7338c9.png
开启firewalld服务
69dd04726bf14cf79eb1d852a81f7abf.png
此时访问test中的Node1主机就不能访问http服务了
aec20a2e63ea4eed9a986a860362f99d.png
在/etc/services文件中列出来服务和端口的对应关系。
查看firewalld模块,既能使用service服务器的名称,也能使用port端口号定义服务器
编辑firewall.yml文件,允许http服务
此时就能访问Node1主机
查看test主机的防火墙规则
template模块:copy模块可以上传文件,但文件内容固定,template模块可以上传具有特定格式的文件(如文件中包含变量),当远程主机接收到文件之后文件中的变量将会变成具体的值
常用选项:src:要上传的文件。dest:目标文件路径。
将index.html文件拷贝到test主机上
使用copy模块上传,执行剧本此时访问就不是显示变量的值。
使用template模块上传,此时就会显示变量的值
错误处理:当playbook中包含很多任务时,当某一个任务遇到错误,它将崩溃,终止执行,不会执行下面的任务。
如在test上主机上开启mysqld服务(没有下载),然后创建/tmp/server.txt文件
因为没有下载mysqld所以就执行失败
此时test的主机也没有创建文件
ignore_errors:可以指定某一个任务如果出现错误则忽略它。放置位置和任务平级,不能在模块的参数中。可以放在name下面模块上面。
此时当任务一出现了错误也能执行任务2创建文件
当放置在和剧本play平级(在tasks上面),就会不管下面任务中有几个任务失败都忽略。
触发执行任务:通过handlers定义触发执行的任务,handlers中定义的任务,不是一定会执行的,在tasks中定义的任务,通过notify关键通知handlers中的那个任务要执行,只有tasks中的任务状态是changed才会进行通知。和tasks同级。
下载test中主机的httpd.conf 文件。flat:表示只下载文件。
只有文件没有目录。
将httpd.conf中的Listen监听80改成变量
将修改的httpd.conf文件传递到test上主机,并开启服务
运行剧本
此时上传成功了httpd.conf文件
但每次执行脚本时都执行重启http服务
设置触发任务只有当上传文件成功时才重启任务,上传成功后就不需要再重启任务了。notify:通知handlers任务中指定任务的服务要执行,notify和任务同级。当上传文件执行为黄色状态(change)就执行重新加载。当上传文件执行完为绿色状态(OK表示已经达到期望)则不执行重新加载。
当在执行一次,就不会再执行重新加载了。
when条件:只有满足某一条件时,才执行任务。(等同于shell的if)
常用的操作符:==:相等。!=:不等。>:大于。<:小于。<=:小于等于。>=:大于等于。符号两边的空格可有可无。
多个条件可以使用and或or进行连接。
当test上主机的内存等于2G则下载mariadb-server软件包。when后面可以直接跟变量,变量不用加大括号。
查看内存变量
因为内存不满足大于2G的条件就不执行该任务,跳过该任务。
如果test上的主机的系统为RedHat并且为8版本则上传文件到/etc/motd中。
查看系统版本变量
编写脚本
when的格式太长也可以使用 > 符号。合并为一行。
执行脚本
查看
登录ssh
  • 23
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值