逻辑卷相关模块:逻辑卷可以动态管理存储空间,可以对逻辑卷进行扩容或缩减。可以把硬盘或分区转换成物理卷PV,在把1到多个PV组合成卷组VG,然后在VG上划分逻辑卷LV,LV可以像普通分区一样,进行格式化、挂载。
关闭虚拟机Node1为其添加2块20G的硬盘
![fa45632eaa284a46825c40c1127629ab.png](https://i-blog.csdnimg.cn/blog_migrate/cb191e8c284e61987714652c6b8fe949.png)
![df77724fc5334c4e959973b53bf4c918.png](https://i-blog.csdnimg.cn/blog_migrate/e1b78a6af0803108b17039a9a17701a7.png)
lvg模块:创建、删除卷组,修改卷组大小。
常用选项:vg:定义卷组名(volume group)。pvs:由那些物理卷构成(physical volume)。
需要在test主机上安装lvm2软件包,test主机不能识别vgs和lvs等命令。
![4281ff998be14787abbbdaeb37758f9a.png](https://i-blog.csdnimg.cn/blog_migrate/dda360f26ff3f84cac28f4016fc12ab0.png)
![2d7a4f16213b4cf8884067f4073b54b8.png](https://i-blog.csdnimg.cn/blog_migrate/dcb377fcfee779f49b59e1dd3905aae7.png)
对/dev/sdb进行分区,
![13e734dca5544ab58f4be2fca05551d4.png](https://i-blog.csdnimg.cn/blog_migrate/8cd47ee45b434d24d1f15992ff89ab80.png)
![1e60c8ea02484bc3bde660f814abc361.png](https://i-blog.csdnimg.cn/blog_migrate/0ba3034319240ca2445252aa2738acc6.png)
![1644b6c6500e40d59948f2663c8bc7c1.png](https://i-blog.csdnimg.cn/blog_migrate/ae19dc99fa34a7c355387b7b23299f13.png)
查看lvg模块案例
![7b54233f1b834cdfab78927f41685e38.png](https://i-blog.csdnimg.cn/blog_migrate/22578c05e7e01e8a0b1ced084a90884b.png)
使用ansible创建卷组。ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1"
![237932215be64fcf8f28b64776515934.png](https://i-blog.csdnimg.cn/blog_migrate/940f5b005d8df53cf02ca06ea24746dc.png)
![44b6e20738cb468a95ced8ef093236db.png](https://i-blog.csdnimg.cn/blog_migrate/50336ffedcfa13665d91eb0b08acd8d7.png)
扩容卷组,卷组由PV构成,只要向卷组中加入新的PV即可实现扩容。
ansible test -m lvg -a "vg=myvg pvs=/dev/sdb1,/dev/sdb2"
![1986cd0703c24a97a627a0dc349563b6.png](https://i-blog.csdnimg.cn/blog_migrate/7fe005bab30fbee6d9f58d74203cbcf7.png)
![e33e1006a43a42608289f38673aecc52.png](https://i-blog.csdnimg.cn/blog_migrate/53faa889352934439c58f6755e134c70.png)
lvol模块:创建、删除逻辑卷,修改逻辑卷大小。
常用选项:vg:指定在那个卷组上创建逻辑卷。lv:创建的逻辑卷名(logical volume)。size:逻辑卷的大小,不写单位,默认以M为单位。
ansible test -m lvol -a "vg=myvg lv=mylv size=2G"
![421d5bde0aa844d3902ed783c1e99889.png](https://i-blog.csdnimg.cn/blog_migrate/7f4a8623124d8093cb8fa930807c44dc.png)
查看test主机
![831dabb5192c4e1a8663d2fabb54472d.png](https://i-blog.csdnimg.cn/blog_migrate/009ba86e4fd96000165e84efe3f46ef6.png)
逻辑卷mylv扩容至4GB
ansible test -m lvol -a "vg=myvg lv=mylv size=4G"
![826bfe7fac484360ae3a76f68b9b6ef6.png](https://i-blog.csdnimg.cn/blog_migrate/624bee51ea3d4806944c3bf659acc9ce.png)
![e9108c523e6b447f9fd2ab2b5ed2a905.png](https://i-blog.csdnimg.cn/blog_migrate/7b001d8fdf58f9b1ca0e372cddf7ee29.png)
filesystem模块:用于格式化,创建文件系统。
常用选项:fstype:指定文件系统类型。dev:指定要格式化的设备,可以是分区,可以是逻辑卷。xfs:大文件。ext4:小文件
ansible test -m filesystem -a "dev=/dev/myvg/mylv fstype=xfs"
![7d7de26cec614ce59b22320844c733ab.png](https://i-blog.csdnimg.cn/blog_migrate/e09084120076b748e4f814cbb233aeda.png)
查看格式化结果。
![3657dcb702db4ae6ac32d6eda129ef80.png](https://i-blog.csdnimg.cn/blog_migrate/9216b74b4055da8b79ed6778e4fea5df.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](https://i-blog.csdnimg.cn/blog_migrate/cc65e80e2ce3c81b27f01d4c05561985.png)
查看挂载点
![54464f3d28db423e919fb1f50ab9209a.png](https://i-blog.csdnimg.cn/blog_migrate/25f840ff7c540b3f4aac0fc70cde2fe1.png)
/etc/fatab文件中已经被写入
![d0bde78cd30f4b88845d2c6102cf9afd.png](https://i-blog.csdnimg.cn/blog_migrate/491ee9288c17183520ae309e043b6b11.png)
扩容该挂载点,因为该挂载点的文件系统类型为xfs,所以需要使用resizefs命令通知挂载点扩容到逻辑卷的大小。如果不加resizefs,只会扩容逻辑卷,挂载点并没有扩容。
ansible test -m lvol -a "vg=myvg lv=mylv size=6G resizefs=yes"
![e40bdfefa1364301a3f1ee580bf24a52.png](https://i-blog.csdnimg.cn/blog_migrate/0f4e9ceb81287936446e7854799cacd2.png)
此时不仅逻辑卷扩容了,该挂载点也扩容了
![a6fc1a54141d4bf6b389252daa94de2d.png](https://i-blog.csdnimg.cn/blog_migrate/b0dba18e2ba82a775a9676d911392968.png)
![9e019cc62eb04565a707be35e867cef9.png](https://i-blog.csdnimg.cn/blog_migrate/80ec5217c3eb6680c21ea5f4bfc58d79.png)
卸载该挂载点,unmounted临时取消挂载点
![fa653fca1e5347669e9109614506ed2e.png](https://i-blog.csdnimg.cn/blog_migrate/fc91153bf9a85689f0df5abb8a4ee52f.png)
![48e93fb843084792b92db3fee85e7c9d.png](https://i-blog.csdnimg.cn/blog_migrate/4443f0346b8c533003a9418ebe1cbfdc.png)
但/etc/fstab文件中还有该挂载点的数据
![8009d216c05c4a43aa2d1592270bc7f7.png](https://i-blog.csdnimg.cn/blog_migrate/23f6df33aec4a0d0541388ae0aef1fa8.png)
使用absent永久卸载该挂载点
![43ec1f2d8f124fbe851954fbc1400b29.png](https://i-blog.csdnimg.cn/blog_migrate/2fb6d67aaf8fdbe15b202a3a426d6282.png)
此时不仅/data目录没有了,/etc/fstab中该挂载点的内容也没有了
![6621b570ecbd487d912958933411c589.png](https://i-blog.csdnimg.cn/blog_migrate/80762c7cbfd0cf70943cf2b4eeabf7b9.png)
删除逻辑卷,需要加上force强制删除。
ansible test -m lvol -a "vg=myvg lv=mylv state=absent force=yes"
![a4f9bbe6634449d3b18832f284f53ba3.png](https://i-blog.csdnimg.cn/blog_migrate/f52a2c6c96fb80c7e3b67e3f7b10acfa.png)
![41272973432942859899fe2f2ebbb619.png](https://i-blog.csdnimg.cn/blog_migrate/94c09becf3c033c95e6ebde1aded002b.png)
删除卷组,当卷组中还有逻辑卷需要加force才能强制删除,如果没有逻辑卷就不需要加force也能删除卷组。 ansible test -m lvg -a "vg=myvg state=absent"
![aaaa36ce8b82406d85f072dfa9bdc300.png](https://i-blog.csdnimg.cn/blog_migrate/32183a1b3cd09dc9a9b4032c2977dbaf.png)
![1ba83143bb064d42a5cfd5c1b8bd1520.png](https://i-blog.csdnimg.cn/blog_migrate/ecc3edac32dfbe7e3ddfc64c064fb267.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](https://i-blog.csdnimg.cn/blog_migrate/23b760ba6e063060121948c915d15db0.png)
![551578ea4196417b9edd32b4e78a7ba3.png](https://i-blog.csdnimg.cn/blog_migrate/28a0b846fbe7770f4ecb3db78c79968b.png)
编写playbook:一个剧本playbook,可以包含多个play。每个paly用于在指定的主机上,通过模块和参数执行相应的任务,每个play可以包含多个任务,任务由模块和参数构成。
编辑yaml能够ping所有主机。相当于:ansible all -m ping
![94e78f67214e4db78d3c928d902021f3.png](https://i-blog.csdnimg.cn/blog_migrate/e082773a228d3cf639c1b122d99ede91.png)
![ac2d8154ffdd4192b60771127f4c2ba1.png](https://i-blog.csdnimg.cn/blog_migrate/93116e2939cb1d96d4dd61404e1bdf24.png)
执行该剧本。 ansible-playbook test.yml
![cb9c4551ea834fe28b31e5c37ba3d025.png](https://i-blog.csdnimg.cn/blog_migrate/c48960b2606ecfce00995c7d8e7cba5d.png)
在test组的主机和Node2上创建/tmp/demo目录,权限为0755,将控制端/etc/hosts拷贝到目标主机的/tmp/demo中。
![4624345ec4ca4bb9a9fb344434855de1.png](https://i-blog.csdnimg.cn/blog_migrate/42695740bee47ed99a4795d1996a6b81.png)
![6fbb0cae5d1a49cd815fd9e3f28ffc18.png](https://i-blog.csdnimg.cn/blog_migrate/c89eeafc4e93956f69e14785f4fe3010.png)
执行该剧本
![e5dcfe12dadb4753b485e4618d61eed5.png](https://i-blog.csdnimg.cn/blog_migrate/e26d2d259e6cb9fa0b1f10625753a774.png)
查看test和Node2
![877807392c4547b7a33e4adbcd6a99f1.png](https://i-blog.csdnimg.cn/blog_migrate/48a4bcaaae59246317713586c57356bd.png)
![d8ae0798edb64fd9ad7b6451404e349c.png](https://i-blog.csdnimg.cn/blog_migrate/911713cd6fa4ffa55249ad065683bd1a.png)
不同的主机需要不同的play。在test组中的主机上创建用户bob,附件组是adm;在Node2主机上创建/tmp/hi.txt文件,其中的内容为Hello World。
![e20f958ed9de48e192ce490165f24242.png](https://i-blog.csdnimg.cn/blog_migrate/9f792a8fb86eb68e3567a8f126ae18aa.png)
![eeb0ef28721c4ab691ef2a9b4d304a26.png](https://i-blog.csdnimg.cn/blog_migrate/9d77cef329c13e5a5b81458ebb391932.png)
![e808530aa9b745518f21a51b72f02a34.png](https://i-blog.csdnimg.cn/blog_migrate/e858bde8ac688f88b4c6a696df2e45ca.png)
查看结果
![857dfe5ac47943beb4debb1b3ffb8280.png](https://i-blog.csdnimg.cn/blog_migrate/3f14e746411dd09f1ffa7fbc64594a52.png)
![f8dd69f3efe949709efe649867266bec.png](https://i-blog.csdnimg.cn/blog_migrate/df5ac042571bfd509f692a7946282f48.png)
当使用content时,“ | ”符号表示为多行书写。
![193ed06a753445669ddf2e74e3ffed68.png](https://i-blog.csdnimg.cn/blog_migrate/adc957ed9e21f53166ef72a80715297d.png)
![c1548f7774b54d7da08e97618bb09540.png](https://i-blog.csdnimg.cn/blog_migrate/03dc95b2cae18178fab8dee8ecbf8c4c.png)
“ > ” 表示一行书写。
![c44dbff9fff44707a61bc9ef93bee3d4.png](https://i-blog.csdnimg.cn/blog_migrate/8eb872fd083ba27c91616d67386fc887.png)
![45799493b7e44d29a182ec6fe6b17370.png](https://i-blog.csdnimg.cn/blog_migrate/1e46c3a8e930343b57b091d239144b40.png)
在test组中的主机上创建jieke用户,它的uid是1040,主组为daemon,密码为123。password中花括号开头要加双引号。
![2a8fa8eb4e4a46f5ba6250eb749ddd89.png](https://i-blog.csdnimg.cn/blog_migrate/edd5f15f9e0b88380082fc36a986d81c.png)
![b4e9d30942af4468a248136a1661c751.png](https://i-blog.csdnimg.cn/blog_migrate/49fa77d01807e0255852e52b2bf32930.png)
查看用户。
![baf187f433b0460da1bcb4e25abe1c1f.png](https://i-blog.csdnimg.cn/blog_migrate/4fb26e205fab1c0ccc72e6c6e50e1e45.png)
![dff52ccf76c94f12bbe3b7397e5179ab.png](https://i-blog.csdnimg.cn/blog_migrate/6f3a304531e0909352c82c5bc9c7fb5d.png)
删除用户
![59aef044906c457289d5409867eb1365.png](https://i-blog.csdnimg.cn/blog_migrate/ab754ac0781c12891fa19f4cf91b5a5d.png)
![f7d106cbdc504e0b95cd28f093d065c7.png](https://i-blog.csdnimg.cn/blog_migrate/121e6e4bfede6cef2acf2c19a23ffe48.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](https://i-blog.csdnimg.cn/blog_migrate/f56c4ffcae24c2097100d54079a8cdb0.png)
![f22120cd55bc4daa812441f4e943ea0a.png](https://i-blog.csdnimg.cn/blog_migrate/77f1c050068616a1fb6ce20affbb5051.png)
![c523142f10bc446698d69a75c26e9ee7.png](https://i-blog.csdnimg.cn/blog_migrate/8c9497445026cb3159cb0acc15fbc2bb.png)
继续编辑disk.yml对/dev/sdc进行分区,创建一个新的5GB主分区。
![021db769fed24a25a65441a78d165a1f.png](https://i-blog.csdnimg.cn/blog_migrate/51ebff0b9fcd9de5a9b05f7db65763dc.png)
![a6ffb7e372444f85a67f144074a1e5d4.png](https://i-blog.csdnimg.cn/blog_migrate/d3f08ea9a6df4e4280edf09da1b9eafc.png)
继续编辑disk.yml,创建名为my_vg的卷组它由上面创建的sdc1和sdc2构成。
![1b6b9242256a45de9c9eb488c29cf4a5.png](https://i-blog.csdnimg.cn/blog_migrate/6ce03f857f20020859ac030d697415db.png)
![2c89b2df5ee445f98a599c2ebe4e1394.png](https://i-blog.csdnimg.cn/blog_migrate/e6db5a95cc25a1bbdce1c2e2066c27eb.png)
继续编辑disk.yml,在my_vg卷组上创建名为my_lv的逻辑卷大小为1G
![d545781ceb9a432e8a35cad839f4e661.png](https://i-blog.csdnimg.cn/blog_migrate/882b81493a89dc8920cb6067568df4df.png)
![4c912b22ff1c4401a3e0ee8cc7fb2358.png](https://i-blog.csdnimg.cn/blog_migrate/648bbab2c18a130e71452520a1e845f6.png)
继续编辑disk.yml,对my_lv逻辑卷进行格式化。
![d7bb23c2f346442db479dca922d522a9.png](https://i-blog.csdnimg.cn/blog_migrate/d77c63de0ca8f40ccec6d8153d3c94b6.png)
![aefb8f33fc7c40c6ae28049c3798c037.png](https://i-blog.csdnimg.cn/blog_migrate/9268731630439d6c371ecfe7741ab88d.png)
继续编辑disk.yml,挂载该逻辑卷。
![c852f76adb6e44c99414ae0cc4817c41.png](https://i-blog.csdnimg.cn/blog_migrate/6e37f63ea1574cd7bcbdf35ef4671c5a.png)
![a7a15fce2d7848a4854f34c61cd23597.png](https://i-blog.csdnimg.cn/blog_migrate/e5b4ee79f0286d38cfbd21b133bc8b25.png)
在test组中的主机上安装httpd、php、php-mysqlnd软件包
![c4497102cc024d60b159d627ec4c89f1.png](https://i-blog.csdnimg.cn/blog_migrate/c7d9578ac52925dc355419f63ac656c2.png)
也可以写成下面的模式
![fdc1d113adfd41ab815c7eb36f400a83.png](https://i-blog.csdnimg.cn/blog_migrate/bae0dd273083d5b9639a62fc1203d3d4.png)
![d019e760c4f6401b83e1ec63572a0252.png](https://i-blog.csdnimg.cn/blog_migrate/d7447edd4bcbf04fa5b12b30b9f13fec.png)
![a1bfda557acf489eb79b6cf34cb9fa70.png](https://i-blog.csdnimg.cn/blog_migrate/f2b7bc14d8f961335f28b3652492b48d.png)
当想要安装图形化界面需要安装软件包组。查看所有的组: LANG=C yum grouplist。加LANG=C为中文。yum groupinstall "Minimal install":为下载最小化操作系统软件包组。
![0e0b0c2920b44dcb8f91f8d4f328e61b.png](https://i-blog.csdnimg.cn/blog_migrate/99ee85d8c72f3836a4496b010746d3c2.png)
当想要安装gcc、Java等开发工具时,安装组包就能把这些开发工具都能安装。使用剧本安装开发工具包。需要加个@符号告诉剧本要安装组
![fffbbcc1dd144f71a85b8fcd229972d8.png](https://i-blog.csdnimg.cn/blog_migrate/01bfea7db9fbdd1c88770295c62303ae.png)
![991b8d7c73e54cbea8d4456f22db5000.png](https://i-blog.csdnimg.cn/blog_migrate/8314be7ceacd5cae1ea829889bbf4833.png)
升级软件包:让yum源的光盘升级(换最新版本的系统),然后在本机输入yum update就能够升级已经安装的软件包了。
通过ansible更新,“ * ”表示已经安装的所有软件包
![047d10e9381049ed86c5396b045cffe1.png](https://i-blog.csdnimg.cn/blog_migrate/755a1cd1529500ea6e139a07ea9b24d7.png)
————————————————————
ansible变量:
facts变量:是ansible自带的预定义变量,用于描述被控制端软硬件信息。facts变量通过setup模块获得。ansible test -m setup: 查看test组中主机的的facts变量。
![8bb999cb3b064006868fba19362cc36e.png](https://i-blog.csdnimg.cn/blog_migrate/cb930f489d9613bb16f2bfee91dd5fc5.png)
使用filter选项查看主机地址的信息。 ansible test -m setup -a "filter=ansible_all_ipv4_addresses"
![eab9546f520f4cf89797b2fcf5fd3c43.png](https://i-blog.csdnimg.cn/blog_migrate/d6f45ef1ecb4e7cf4f9d6d675a15a159.png)
常用的facts变量:ansible_all_ipv4_addresses:所有的IPV4地址。ansible_bios_version:BIOS版本信息。ansible_memtotal_mb:总内存大小。ansible_hostname:主机名。
使用grep在全部变量中搜索。-A3:表示显示往下三行。
![906828fae0de46c2a7e017204adec380.png](https://i-blog.csdnimg.cn/blog_migrate/2cd32ddb8b796e8a12f0fa590fb69dbd.png)
debug模块:显示变量信息。相当于shell的echo。
常用选项:msg:输出变量等信息。
在playbook中变量在{{ }}中显示。
![b5a6158744244c5bb8dcb6dbd022a89b.png](https://i-blog.csdnimg.cn/blog_migrate/525674569d66521da64f4fa00bdd9ccb.png)
![36b3938f52044e34b470cfe8a4fea67e.png](https://i-blog.csdnimg.cn/blog_migrate/46d81aa313e6e5baf3c705ec1f44666a.png)
自定义变量:可以方便playbook重用,比如装包的playbook,包名使用变量,多次执行playbook,只要改变变量名即可,不用编写新的playbook。
ansible支持10种以上的变量定义方式,常用的变量来源如下:inventory变量,变量来自于主机清单文件。facts变量。playbook变量,变量在playbook中定义。变量文件,专门创建用于保存变量的文件,推荐变量写入单独的文件。
inventory变量,比如当在test中主机创建一个nb账户,在webservers中主机创建xixi账户。
![c79f7c3ce3e84f78a87dba4f23ef78f5.png](https://i-blog.csdnimg.cn/blog_migrate/d108f3397274dc203535b41853dd7e71.png)
这样写是能成功创建账户但要编写两个剧本太过麻烦。因为要在test和webservers主机上都创建一个账户,可以定义一个相同的变量,但在不同主机上识别该变量会得到不同的内容,就实现了使用一个任务就能执行之前两个的任务。
![ecd99e1d328a4196a4386a0e79393f96.png](https://i-blog.csdnimg.cn/blog_migrate/f33d36270c06b68118a391ccd6725fa2.png)
在主机清单hosts中定义变量
![22a6a2703bda471d8564bef2b05433d3.png](https://i-blog.csdnimg.cn/blog_migrate/27f7f21cb6ac8af3ed89b6000ad98515.png)
执行该剧本
![3b35ac8412a949149cfcd94f2b4f6005.png](https://i-blog.csdnimg.cn/blog_migrate/b4cdc9fd6ba6ed482724c9b782a16ce2.png)
查看账户
![6a9074566b1649d7a326374b7a0a1e83.png](https://i-blog.csdnimg.cn/blog_migrate/f37025eb2e144267d5f0599c42363fa1.png)
![985b8daf1866415c8f1f59337058d6f1.png](https://i-blog.csdnimg.cn/blog_migrate/a9139cde31bec758329e3128ce20251a.png)
![ee286637b5004f3993482e4192ba0c38.png](https://i-blog.csdnimg.cn/blog_migrate/25463906e5f7257bf08ecdae5b39163e.png)
在playbook中定义变量
在test组中的主机上创建用户lisi设置密码为123456
![8df350daf85540b3ad1404f4adace62e.png](https://i-blog.csdnimg.cn/blog_migrate/69f645f3ca33cf5d0a6aa0fbed615477.png)
使用自定义变量实现。因为密码原本就在花括号内,所以不需要再加花括号。用户名可加可不加引号,密码必须加引号。密码加了引号就是字符串,否则就是数字。密码本身为字符串。
![76791a7cf62647479b2e0104c4679d39.png](https://i-blog.csdnimg.cn/blog_migrate/bc9b9a839ca7e0052f376643ae572477.png)
![769deac12c874f2c97ae3abc77e86387.png](https://i-blog.csdnimg.cn/blog_migrate/09721644cc715c3f7b50f6bda52589f2.png)
把变量定义在文件中。
创建自定义变量文件
![1639ef53b9a7431188630e1412c3320a.png](https://i-blog.csdnimg.cn/blog_migrate/d7773668a350722a0c73d38be74c4ed9.png)
![39524f903ae645a897402b156cb7d1e1.png](https://i-blog.csdnimg.cn/blog_migrate/db2eb4a962ecee99dbab69f8c02ded96.png)
vars_files:指定自定义变量的文件,用于声明变量文件
![c0634785beb2480882055dddc1154212.png](https://i-blog.csdnimg.cn/blog_migrate/ac8ae6fd3b58a7ccdef9e76bb2b55522.png)
![c4e8558980964646a4c877dcc15b0220.png](https://i-blog.csdnimg.cn/blog_migrate/8f00e0eced5284611b9dd8ac4f09a24c.png)
补充模块
firewalld模块:用于配置防火墙的模块。
常用选项:port:声明端口。permanent:永久生效,但不会立即生效。immediate:立即生效,临时生效。state:enabled:放行,disabled:拒绝。
防火墙一般默认拒绝,需要明确写入允许的服务,
配置test中主机的http服务,可以在域名模块中安装firewalld软件包,但不能在service中的httpd任务中添加开启firewalld服务,playbook会把httpd,firewalld 当成一个整体,需要另起一个任务。
![](https://i-blog.csdnimg.cn/blog_migrate/ef66676bd398ed4bd4389fc6f7ca007e.png)
![a2d9a3590dd9490e85a55dd6ec7338c9.png](https://i-blog.csdnimg.cn/blog_migrate/f61ba9591ae1bb7eb8d1c26ff77d58fd.png)
开启firewalld服务
![69dd04726bf14cf79eb1d852a81f7abf.png](https://i-blog.csdnimg.cn/blog_migrate/39676ade6bcfb4f0bffcca4f3c5c4d8e.png)
此时访问test中的Node1主机就不能访问http服务了
![aec20a2e63ea4eed9a986a860362f99d.png](https://i-blog.csdnimg.cn/blog_migrate/1a9b5a58c5431fad35629fa9d3e28cf3.png)
在/etc/services文件中列出来服务和端口的对应关系。
![](https://i-blog.csdnimg.cn/blog_migrate/5c96b915b3112b732f2d8accb31670c1.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24c2b3f6dd3dc32a84a410f0c3518c86.png)
查看firewalld模块,既能使用service服务器的名称,也能使用port端口号定义服务器
![](https://i-blog.csdnimg.cn/blog_migrate/e68aab2276eabd8b56d7e26941eb4482.png)
编辑firewall.yml文件,允许http服务
![](https://i-blog.csdnimg.cn/blog_migrate/da8bd946812f0baf6565b2bba36d788c.png)
此时就能访问Node1主机
![](https://i-blog.csdnimg.cn/blog_migrate/82439d1ac234e1f2e5ade86cf2003b52.png)
查看test主机的防火墙规则
![](https://i-blog.csdnimg.cn/blog_migrate/0d10e3581886995e9c9fc4f9b317ec8b.png)
常用选项:src:要上传的文件。dest:目标文件路径。
将index.html文件拷贝到test主机上
![](https://i-blog.csdnimg.cn/blog_migrate/41492b976d9ffe136bbdb7d6591dab30.png)
![](https://i-blog.csdnimg.cn/blog_migrate/568eeafcc8d64ed56a612b638c0c7382.png)
使用copy模块上传,执行剧本此时访问就不是显示变量的值。
![](https://i-blog.csdnimg.cn/blog_migrate/c43fc2d403b4282053db847c1bf0b979.png)
![](https://i-blog.csdnimg.cn/blog_migrate/24b8fc9dc7fd0522b53d8d6b627c82bc.png)
使用template模块上传,此时就会显示变量的值
![](https://i-blog.csdnimg.cn/blog_migrate/08be616539ee221b7bb16e11223a13bb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9ff8c53135beb7787837d27495f9b004.png)
错误处理:当playbook中包含很多任务时,当某一个任务遇到错误,它将崩溃,终止执行,不会执行下面的任务。
如在test上主机上开启mysqld服务(没有下载),然后创建/tmp/server.txt文件
![](https://i-blog.csdnimg.cn/blog_migrate/f8145bdda30055ecfd7409540a88cf5b.png)
因为没有下载mysqld所以就执行失败
![](https://i-blog.csdnimg.cn/blog_migrate/88cf95dec23bde879fac469276aff09a.png)
此时test的主机也没有创建文件
![](https://i-blog.csdnimg.cn/blog_migrate/ed3968dc66fb5f6edb9ac9d9ed99876c.png)
ignore_errors:可以指定某一个任务如果出现错误则忽略它。放置位置和任务平级,不能在模块的参数中。可以放在name下面模块上面。
![](https://i-blog.csdnimg.cn/blog_migrate/a7c3ff06e339b2b8acb573bf18f89bb5.png)
此时当任务一出现了错误也能执行任务2创建文件
![](https://i-blog.csdnimg.cn/blog_migrate/147ca46adcb5a458d0405628e0701dd9.png)
当放置在和剧本play平级(在tasks上面),就会不管下面任务中有几个任务失败都忽略。
![](https://i-blog.csdnimg.cn/blog_migrate/5926452e7d35e8ba4645bb0e19036c5d.png)
触发执行任务:通过handlers定义触发执行的任务,handlers中定义的任务,不是一定会执行的,在tasks中定义的任务,通过notify关键通知handlers中的那个任务要执行,只有tasks中的任务状态是changed才会进行通知。和tasks同级。
下载test中主机的httpd.conf 文件。flat:表示只下载文件。
![](https://i-blog.csdnimg.cn/blog_migrate/50fca42b9c6840063dc507f4ac83781e.png)
只有文件没有目录。
![](https://i-blog.csdnimg.cn/blog_migrate/e4141c48bd0e65681124b4f91ad0d7f9.png)
将httpd.conf中的Listen监听80改成变量
![](https://i-blog.csdnimg.cn/blog_migrate/cab9c6733bdd35558300a4e15114b5ee.png)
将修改的httpd.conf文件传递到test上主机,并开启服务
![](https://i-blog.csdnimg.cn/blog_migrate/c9fefb6d342f85e968db1223e5d3c505.png)
运行剧本
![](https://i-blog.csdnimg.cn/blog_migrate/182d197a27629e6862e24cf271b8c87b.png)
此时上传成功了httpd.conf文件
![](https://i-blog.csdnimg.cn/blog_migrate/1824196deb5e1d17834fceddff8dd5ad.png)
但每次执行脚本时都执行重启http服务
![](https://i-blog.csdnimg.cn/blog_migrate/5eaad808450978fc11e9cd2efb246dd3.png)
设置触发任务只有当上传文件成功时才重启任务,上传成功后就不需要再重启任务了。notify:通知handlers任务中指定任务的服务要执行,notify和任务同级。当上传文件执行为黄色状态(change)就执行重新加载。当上传文件执行完为绿色状态(OK表示已经达到期望)则不执行重新加载。
![](https://i-blog.csdnimg.cn/blog_migrate/98223648a0b07fee6791a60e795a00ec.png)
![](https://i-blog.csdnimg.cn/blog_migrate/064c229a1ffe68a42a19678c48905f9b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/04d90dd0f874219ab4b2835e87a53a2b.png)
当在执行一次,就不会再执行重新加载了。
![](https://i-blog.csdnimg.cn/blog_migrate/a8f8a655241ab8a42e4110947c794d5d.png)
when条件:只有满足某一条件时,才执行任务。(等同于shell的if)
常用的操作符:==:相等。!=:不等。>:大于。<:小于。<=:小于等于。>=:大于等于。符号两边的空格可有可无。
多个条件可以使用and或or进行连接。
当test上主机的内存等于2G则下载mariadb-server软件包。when后面可以直接跟变量,变量不用加大括号。
查看内存变量
![](https://i-blog.csdnimg.cn/blog_migrate/a755a006a2f26dba59654669b3b27bd0.png)
![](https://i-blog.csdnimg.cn/blog_migrate/31d295e5bb24abaccd80a82af6eea17b.png)
因为内存不满足大于2G的条件就不执行该任务,跳过该任务。
![](https://i-blog.csdnimg.cn/blog_migrate/b11886f2ff0c868e641a2122cc16833d.png)
如果test上的主机的系统为RedHat并且为8版本则上传文件到/etc/motd中。
![](https://i-blog.csdnimg.cn/blog_migrate/a7be3cb1bbf0e01b76943340a8378c0d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/7b3baf3fac2356732aa4fa47b5ece007.png)
查看系统版本变量
![](https://i-blog.csdnimg.cn/blog_migrate/0b2e1e10332088fe969fbe2169b457e8.png)
编写脚本
![](https://i-blog.csdnimg.cn/blog_migrate/79aaf002dfa2af723c435082cc4d719e.png)
when的格式太长也可以使用 > 符号。合并为一行。
![](https://i-blog.csdnimg.cn/blog_migrate/e3c9836ab6f9764b463e3185d7b588bc.png)
执行脚本
![](https://i-blog.csdnimg.cn/blog_migrate/4ed6a6c9d5267e7f94b2eebc8ef38845.png)
查看
![](https://i-blog.csdnimg.cn/blog_migrate/98578abfd9a453b1bd0f3701532f2aba.png)
登录ssh
![](https://i-blog.csdnimg.cn/blog_migrate/ddd51d24b17e8cbafa5d960173505aac.png)