逻辑卷相关模块:逻辑卷可以动态管理存储空间,可以对逻辑卷进行扩容或缩减。可以把硬盘或分区转换成物理卷PV,在把1到多个PV组合成卷组VG,然后在VG上划分逻辑卷LV,LV可以像普通分区一样,进行格式化、挂载。
关闭虚拟机Node1为其添加2块20G的硬盘


lvg模块:创建、删除卷组,修改卷组大小。
常用选项:vg:定义卷组名(volume group)。pvs:由那些物理卷构成(physical volume)。
需要在test主机上安装lvm2软件包,test主机不能识别vgs和lvs等命令。


对/dev/sdb进行分区,



查看lvg模块案例

使用ansible创建卷组。ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"


扩容卷组,卷组由PV构成,只要向卷组中加入新的PV即可实现扩容。
ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"


lvol模块:创建、删除逻辑卷,修改逻辑卷大小。
常用选项:vg:指定在那个卷组上创建逻辑卷。lv:创建的逻辑卷名(logical volume)。size:逻辑卷的大小,不写单位,默认以M为单位。
ansible test -m lvol -a "vg=myvg lv=mylv size=2G"

查看test主机

逻辑卷mylv扩容至4GB
ansible test -m lvol -a "vg=myvg lv=mylv size=4G"


filesystem模块:用于格式化,创建文件系统。
常用选项:fstype:指定文件系统类型。dev:指定要格式化的设备,可以是分区,可以是逻辑卷。xfs:大文件。ext4:小文件
ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs"

查看格式化结果。

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"

查看挂载点

/etc/fatab文件中已经被写入

扩容该挂载点,因为该挂载点的文件系统类型为xfs,所以需要使用resizefs命令通知挂载点扩容到逻辑卷的大小。如果不加resizefs,只会扩容逻辑卷,挂载点并没有扩容。
ansible test -m lvol -a "vg=myvg lv=mylv size=6G resizefs=yes"

此时不仅逻辑卷扩容了,该挂载点也扩容了


卸载该挂载点,unmounted临时取消挂载点


但/etc/fstab文件中还有该挂载点的数据

使用absent永久卸载该挂载点

此时不仅/data目录没有了,/etc/fstab中该挂载点的内容也没有了

删除逻辑卷,需要加上force强制删除。
ansible test -m lvol -a "vg=myvg lv=mylv state=absent force=yes"


删除卷组,当卷组中还有逻辑卷需要加force才能强制删除,如果没有逻辑卷就不需要加force也能删除卷组。 ansible test -m lvg -a "vg=myvg state=absent"


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键为缩进两个空格。


编写playbook:一个剧本playbook,可以包含多个play。每个paly用于在指定的主机上,通过模块和参数执行相应的任务,每个play可以包含多个任务,任务由模块和参数构成。
编辑yaml能够ping所有主机。相当于:ansible all -m ping


执行该剧本。 ansible-playbook test.yml

在test组的主机和Node2上创建/tmp/demo目录,权限为0755,将控制端/etc/hosts拷贝到目标主机的/tmp/demo中。


执行该剧本

查看test和Node2


不同的主机需要不同的play。在test组中的主机上创建用户bob,附件组是adm;在Node2主机上创建/tmp/hi.txt文件,其中的内容为Hello World。



查看结果


当使用content时,“ | ”符号表示为多行书写。


“ > ” 表示一行书写。


在test组中的主机上创建jieke用户,它的uid是1040,主组为daemon,密码为123。password中花括号开头要加双引号。


查看用户。


删除用户


硬盘管理:常见的分区表类型有: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进制。



继续编辑disk.yml对/dev/sdc进行分区,创建一个新的5GB主分区。


继续编辑disk.yml,创建名为my_vg的卷组它由上面创建的sdc1和sdc2构成。


继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷大小为1G


继续编辑disk.yml,对my_lv逻辑卷进行格式化。


继续编辑disk.yml,挂载该逻辑卷。


在test组中的主机上安装httpd、php、php-mysqlnd软件包

也可以写成下面的模式



当想要安装图形化界面需要安装软件包组。查看所有的组: LANG=C yum grouplist。加LANG=C为中文。yum groupinstall "Minimal install":为下载最小化操作系统软件包组。

当想要安装gcc、Java等开发工具时,安装组包就能把这些开发工具都能安装。使用剧本安装开发工具包。需要加个@符号告诉剧本要安装组


升级软件包:让yum源的光盘升级(换最新版本的系统),然后在本机输入yum update就能够升级已经安装的软件包了。
通过ansible更新,“ * ”表示已经安装的所有软件包

————————————————————
ansible变量:
facts变量:是ansible自带的预定义变量,用于描述被控制端软硬件信息。facts变量通过setup模块获得。ansible test -m setup: 查看test组中主机的的facts变量。

使用filter选项查看主机地址的信息。 ansible test -m setup -a "filter=ansible_all_ipv4_addresses"

常用的facts变量:ansible_all_ipv4_addresses:所有的IPV4地址。ansible_bios_version:BIOS版本信息。ansible_memtotal_mb:总内存大小。ansible_hostname:主机名。
使用grep在全部变量中搜索。-A3:表示显示往下三行。

debug模块:显示变量信息。相当于shell的echo。
常用选项:msg:输出变量等信息。
在playbook中变量在{{ }}中显示。


自定义变量:可以方便playbook重用,比如装包的playbook,包名使用变量,多次执行playbook,只要改变变量名即可,不用编写新的playbook。
ansible支持10种以上的变量定义方式,常用的变量来源如下:inventory变量,变量来自于主机清单文件。facts变量。playbook变量,变量在playbook中定义。变量文件,专门创建用于保存变量的文件,推荐变量写入单独的文件。
inventory变量,比如当在test中主机创建一个nb账户,在webservers中主机创建xixi账户。

这样写是能成功创建账户但要编写两个剧本太过麻烦。因为要在test和webservers主机上都创建一个账户,可以定义一个相同的变量,但在不同主机上识别该变量会得到不同的内容,就实现了使用一个任务就能执行之前两个的任务。

在主机清单hosts中定义变量

执行该剧本

查看账户



在playbook中定义变量
在test组中的主机上创建用户lisi设置密码为123456

使用自定义变量实现。因为密码原本就在花括号内,所以不需要再加花括号。用户名可加可不加引号,密码必须加引号。密码加了引号就是字符串,否则就是数字。密码本身为字符串。


把变量定义在文件中。
创建自定义变量文件


vars_files:指定自定义变量的文件,用于声明变量文件


补充模块
firewalld模块:用于配置防火墙的模块。
常用选项:port:声明端口。permanent:永久生效,但不会立即生效。immediate:立即生效,临时生效。state:enabled:放行,disabled:拒绝。
防火墙一般默认拒绝,需要明确写入允许的服务,
配置test中主机的http服务,可以在域名模块中安装firewalld软件包,但不能在service中的httpd任务中添加开启firewalld服务,playbook会把httpd,firewalld 当成一个整体,需要另起一个任务。


开启firewalld服务

此时访问test中的Node1主机就不能访问http服务了

在/etc/services文件中列出来服务和端口的对应关系。


查看firewalld模块,既能使用service服务器的名称,也能使用port端口号定义服务器

编辑firewall.yml文件,允许http服务

此时就能访问Node1主机

查看test主机的防火墙规则

常用选项: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
