可以通过systemctl对服务进行启动、重启、关闭等操作,在ansible中可以调用service模块来实现对服务的管理,service模块常见的参数包括以下几个。
(1)name :指定对哪个服务进行管理。
(2)enabled :用于设置此服务是否开机自动启动,值为yes或no,默认值为空。
(3)state:用于启动或关闭服务,其值包括started、stopped、restarted等。
首先判断rh2上的vsftpd是否启动,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "systemctl is-active vsftpd"
rh2 | FAILED | rc=3 >>
inactivenon-zero return code
这里返回值为3(rc=3),说明rh2上的vsftpd没有启动。
启动vsftpd并设置开机自动启动,命令如下。
[blab@rh1 ~]$ ansible rh2 -m yum -a "name=vsftpd state=latest"
rh2 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"msg": "Nothing to do",
"rc": 0,
"results": []
}
到rh2验证命令如下
[root@rh2 blab]# systemctl is-enabled vsftpd
在 ansible中如果对分区进行管理,使用的是parted模块,parted模块常见的参数包括以下几个。
1)device:指的是哪块磁盘。
(2)number:第几个分区。
(3)part_start:指的是从硬盘的什么位置开始划分,不写默认为从头开始(0%)。
(4)part_end:指的是到硬盘的什么位置作为分区的结束点。
(5)state:用于指定操作,present是创建,absent是删除。
自行在rh2上新添加一块类型为SCSI、大小为20G的硬盘,命令如下。
[root@rh2 blab]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 10.2G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel_rh2-root 253:0 0 18G 0 lvm /
└─rhel_rh2-swap 253:1 0 1G 0 lvm [SWAP]
在rh2上对/devIsdb创建一个大小为2GB的分区/dev/sda1,命令如下
[blab@rh1 ~]$ ansible rh2 -m parted -a "device=/dev/sda number=1 part_end=2GiB state=present"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"disk": {
此例是对/dev/sdb创建第一个分区,因为从硬盘头开始,所以不需要指定part_start,此分区到2GB位置结束。
[blab@rh1 ~]$ ansible rh2 -m shell -a "lsblk"
rh2 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 2G 0 part
sr0 11:0 1 10.2G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel_rh2-root 253:0 0 18G 0 lvm /
└─rhel_rh2-swap 253:1 0 1G 0 lvm [SWAP]
在rh2上对/dev/sdb创建一个大小为2GB的分区/dev/sda2,命令如下。
[blab@rh1 ~]$ ansible rh2 -m parted -a "device=/dev/sda number=2 part_start=2GiB part_end=4GiB \
> state=present"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"disk": {
"dev": "/dev/sda",
"logical_block": 512,
"model": "VMware, VMware Virtual S",
"physical_block": 512,
"size": 20971520.0,
"table": "msdos",
此例是对/dev/sdb创建第二个分区,从2GiB位置开始,到4GiB位置结束。
在rh2上查看分区,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "lsblk"
rh2 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 2G 0 part
└─sda2 8:2 0 2G 0 part
sr0 11:0 1 10.2G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel_rh2-root 253:0 0 18G 0 lvm /
└─rhel_rh2-swap 253:1 0 1G 0 lvm [SWAP]
删除server2上的/dev/sdb2,命令如下。
[blab@rh1 ~]$ ansible rh2 -m parted -a "device=/dev/sda number=2 state=absent"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"disk": {
"dev": "/dev/sda",
"logical_block": 512,
"model": "VMware, VMware Virtual S",
"physical_block": 512,
"size": 20971520.0,
验证,命令如下
[blab@rh1 ~]$ ansible rh2 -m shell -a "lsblk"
rh2 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 2G 0 part
sr0 11:0 1 10.2G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel_rh2-root 253:0 0 18G 0 lvm /
└─rhel_rh2-swap 253:1 0 1G 0 lvm [SWAP]
可以看到,/dev/sda2已经被删除了。
请自行创建出/dev/sda2和/dev/sda3备用。
[blab@rh1 ~]$ ansible rh2 -m shell -a "lsblk"
rh2 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 2G 0 part
├─sda2 8:2 0 2G 0 part
└─sda3 8:3 0 2G 0 part
sr0 11:0 1 10.2G 0 rom /mnt
nvme0n1 259:0 0 20G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 19G 0 part
├─rhel_rh2-root 253:0 0 18G 0 lvm /
└─rhel_rh2-swap 253:1 0 1G 0 lvm [SWAP]
分区创建好之后,需要对分区进行格式化操作,格式化的模块为filesystem,filesystem模块常见的参数包括以下几个。
(1)dev:用于指定对哪个设备进行格式化。
(2)fstype:用于指定用什么文件系统进行格式化。
(3)force:是否强制格式化,默认为no。
把 rh2上的/dev/sda3格式化为XFS文件系统,命令如下。
[blab@rh1 ~]$ ansible rh2 -m filesystem -a "dev=/dev/sda3 fstype=xfs"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true
}
如果想重新格式化,需要加上 force选项,命令如下。
[blab@rh1 ~]$ ansible rh2 -m filesystem -a "dev=/dev/sda3 fstype=xfs force=yes"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true
}
格式化之后就需要挂载分区,挂载用的是mount模块,mount模块常见的参数包括以下
几个。
(1)src:用于指定挂载哪个设备。
(2)path:用于指定挂载点。
(3)fstype:用于指定挂载的文件系统,这个选项一定要指定。
(4)opts:用于指定挂载选项,如果不指定则为defaults。
(5)state:此参数的值如下。
①mounted:挂载的同时,也会写入/etc/fstab。
②present:只是写入/etc/fstab,但当前并没有挂载。
③unmounted:只卸载,并不会把条目从/etc/fstab中删除。
④absent:卸载并从/etc/fstab中删除。
把rh2上的/dev/sda3挂载到/123目录上,挂载选项为只读,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a 'mkdir /123'
[WARNING]: Consider using the file module with state=directory rather than running 'mkdir'. If you
need to use command because file is insufficient you can add 'warn: false' to this command task or set
'command_warnings=False' in ansible.cfg to get rid of this message.
rh2 | CHANGED | rc=0 >>
[blab@rh1 ~]$ ansible rh2 -m mount -a "src=/dev/sda3 path=/123 state=mounted fstype=xfs opts=defaults,ro"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"fstype": "xfs",
"name": "/123",
"opts": "defaults,ro",
"passno": "0",
"src": "/dev/sda3"
}
这里指定了挂载选项为defaults,ro,多个选项用逗号隔开。
验证,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "df -Th | grep sda3"
rh2 | CHANGED | rc=0 >>
/dev/sda3 xfs 2.0G 256K 2.0G 1% /123
因为挂载时state的值是mounted,所以不仅把/dev/sdb3挂载了,也写人/etc/fstab了。
在rh2上卸载并从/etc/fstab中删除/dev/sda3,命令如下。
[blab@rh1 ~]$ ansible rh2 -m mount -a "src=/dev/sda3 path=/123 state=absent"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"name": "/123",
"opts": "defaults",
"passno": "0",
"src": "/dev/sda3"
}
使用lvg模块管理卷组,此模块常见的参数包括以下几个。
(1)pvs:用于指定物理卷,如果有多个PV则用逗号隔开,不需要提前创建PV,此命令会自动创建PV。
(2)vg:用于指定卷组的名称。
(3)pesize:用于指定PE的大小。
(4)state:此参数的值如下。present :用于创建卷组,默认。absent :用于删除卷组。
在rh2上创建名称为vg0的卷组,所使用的分区为/dev/sda1和/dev/sda2/pesize指定为16M。
先确认rh2上不存在任何PV 和VG,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "vgs"
rh2 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
rhel_rh2 1 2 0 wz--n- <19.00g 0
开始创建vg0,命令如下。
[blab@rh1 ~]$ ansible rh2 -m lvg -a "pvs=/dev/sda1,/dev/sda2 vg=vg0 pesize=16 state=present"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true
}
这里如果不指定pesize选项,则默认为4。
验证,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "vgs"
rh2 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
rhel_rh2 1 2 0 wz--n- <19.00g 0
vg0 2 0 0 wz--n- <3.97g <3.97g
删除卷组 vg0,命令如下。
[blab@rh1 ~]$ ansible rh2 -m lvg -a "vg=vg0 pesize=16 state=absent"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true
}
验证,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "vgs"
rh2 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
rhel_rh2 1 2 0 wz--n- <19.00g 0
可以看到,vg0已经没有了。
请使用命令再次把vg0创建出来。
卷组创建好之后就要创建逻辑卷了,管理逻辑卷的模块是Ivol,lvol模块常见的参数包含
以下几个。
(1)vg:用于指定在哪个卷组上划分逻辑卷。
(2)lv:用于指定逻辑卷的名称。
(3)size:用于指定逻辑卷的大小。
(4)state:此参数的值如下。present :用于创建逻辑卷。absent :用于删除逻辑卷。
在rh2的卷组 vg0上,创建大小为1G、名称为lv0的逻辑卷。
先判断rh2上是否存在逻辑卷,命令如下。
[blab@rh1 ~]$ ansible rh2 -m shell -a "lvs"
rh2 | CHANGED | rc=0 >>
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel_rh2 -wi-ao---- <18.00g
swap rhel_rh2 -wi-ao---- 1.00g
可以看到,不存在任何逻辑卷。下面开始创建逻辑卷,命令如下 。
[blab@rh1 ~]$ ansible rh2 -m lvol -a "vg=vg0 lv=lv0 size=1G"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true,
"msg": ""
}
验证,命令如下
[blab@rh1 ~]$ ansible rh2 -m shell -a "lvs"
rh2 | CHANGED | rc=0 >>
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rhel_rh2 -wi-ao---- <18.00g
swap rhel_rh2 -wi-ao---- 1.00g
lv0 vg0 -wi-a----- 1.00g
可以看到,此逻辑卷已经创建出来了。
在 rh2上删除逻辑卷/dev/vg0/lv0,命令如下。
[blab@rh1 ~]$ ansible rh2 -m lvol -a "vg=vg0 lv=lv0 state=absent force=yes"
rh2 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": true
}