wordpress 导入失败,广东seo排名,网站优化宝,wordpress08影视站本章主要介绍Ansible中最常见模块的使用
shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a 模块的参数 对被管理机器执行不同的操作#xff0c;只需要调用不同的模块…本章主要介绍Ansible中最常见模块的使用
shell模块文件管理模块软件包管理模块服务管理模块磁盘管理模块用户管理模块防火墙管理模块 ansible的基本用法如下。 ansible 机器名 -m 模块x -a 模块的参数 对被管理机器执行不同的操作只需要调用不同的模块就可以了。 ansible中内置了很多的模块,可以通过ansible-doc -l查看系统中所有的模块。 [blabnode01 ~]$ ansible-doc -l
a10_server Manage A10 Ne.
a10_server_axapi3 Manage A10 Ne.
a10_service_group Manage A10 Ne.按【Enter】键会一行一行地往下显示按空格键会一页一页地往下显示按【q】键退出。 不同的模块有不同的参数如果要查看某个模块的参数可以通过如下语法来查看。 ansible-doc 模块名 ansible中有很多模块每个模块也有很多参数我们是不可能把所有的模块、每个模块的所有参数都掌握的。所以下面我们只讲解最常见的模块及这些模块中最常见的参数的使用方法。 1.shell模块 shell模块可以在远端执行操作系统命令具体用法如下 ansible 主机组 -m shell -a 系统命令 1在node02上执行hostname命令命令如下。
[blabnode01 ~]$ ansible node02 -m shell -a hostname
node02 | CHANGED | rc0
node02
[blabnode01 ~]$ 这里rc0的意思是执行此命令之后的返回值为0rc的意思是returm code(返回值)为0说明正确执行了,非零说明没有正确执行。 2在 node02上执行一个错误的命令命令如下。
[blabnode01 ~]$ ansible node02 -m shell -a hostnamexxx
node02 | FAILED | rc127
/bin/sh: hostnamexxx: 未找到命令non-zero return code
[blabnode01 ~]$ 这里rc127的意思是执行此命令之后的返回值为127非零说明没有正确执行。 2.文件管理的file模块 file模块用于创建和删除文件/目录修改文件/目录属性其常见的参数包括以下几个 path用于指定文件/目录的路径此选项可以用name或dest替代。 state指定行为。 touch创建文件。 directory创建目录。 file对已存文件进行修改。 absent删除。 link软链接。 hard硬链接。 其他参数:owner指定所有者group指定所属组mode指定权限setype指定上下文。
1在node02上创建一个文件/opt/hosts并设置所有者为root所属组为tom权限为444命令如下。
[blabnode01 ~]$ ansible node02 -m file -a path/opt/hosts ownerroot grouptom mode444 statetouch
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,dest: /opt/hosts,gid: 1002,group: tom,mode: 0444,owner: root,secontext: unconfined_u:object_r:usr_t:s0,size: 0,state: file,uid: 0
}
[blabnode01 ~]$ 需要注意的是此处用path指定的文件替换成name也是可以的即name/opt/hosts。 查看文件的属性,命令如下。 [blabnode01 ~]$ ansible node02 -m shell -a ls -l /opt/hosts
node02 | CHANGED | rc0
-r--r--r--. 1 root tom 0 12月 15 11:53 /opt/hosts
[blabnode01 ~]$ 2为/opt/hosts创建一个软链接/opt/hosts123命令如下。 [blabnode01 ~]$ ansible node02 -m file -a src/opt/hosts dest/opt/hosts123 statelink
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,dest: /opt/hosts123,gid: 0,group: root,mode: 0777,owner: root,secontext: unconfined_u:object_r:usr_t:s0,size: 10,src: /opt/hosts,state: link,uid: 0
}
[blabnode01 ~]$ 验证命令如下 [blabnode01 ~]$ ansible node02 -m shell -a ls -l /opt
node02 | CHANGED | rc0
总用量 0
-r--r--r--. 1 root tom 0 12月 15 11:53 hosts
lrwxrwxrwx. 1 root root 10 12月 15 11:54 hosts123 - /opt/hosts
[blabnode01 ~]$ 3删除/opt/hosts123命令如下 [blabnode01 ~]$ ansible node02 -m file -a name/opt/hosts123 stateabsent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,path: /opt/hosts123,state: absent
}
[blabnode01 ~]$ 4创建目录/op/xx上下文设置为default_t命令如下。
[blabnode01 ~]$ ansible node02 -m file -a name/opt/xx statedirectory setypedefault_t
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,gid: 0,group: root,mode: 0755,owner: root,path: /opt/xx,secontext: unconfined_u:object_r:default_t:s0,size: 6,state: directory,uid: 0
}
[blabnode01 ~]$ 验证
[blabnode01 ~]$ ansible node02 -m shell -a ls -dZ /opt/xx
node02 | CHANGED | rc0
unconfined_u:object_r:default_t:s0 /opt/xx
[blabnode01 ~]$ 5把/opt/hosts的权限改成000所有者改成tom所属组改成users
[blabnode01 ~]$ ansible node02 -m file -a name/opt/hosts ownertom groupusers mode000
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,gid: 100,group: users,mode: 0000,owner: tom,path: /opt/hosts,secontext: unconfined_u:object_r:usr_t:s0,size: 0,state: file,uid: 1002
}
[blabnode01 ~]$ 验证
[blabnode01 ~]$ ansible node02 -m shell -a ls -l /opt/hosts
node02 | CHANGED | rc0
----------. 1 tom users 0 12月 15 11:53 /opt/hosts
[blabnode01 ~]$ 注意指定文件使用name或path都是可以的
6清空node02 上/opt中所有的内容命令如下。
[blabnode01 ~]$ ansible node02 -m shell -a rm -rf /opt/*
[WARNING]: Consider using the file module with stateabsent rather than running
rm. If you need to use command because file is insufficient you can add
warn: false to this command task or set command_warningsFalse in
ansible.cfg to get rid of this message.
node02 | CHANGED | rc0 [blabnode01 ~]$ 上面的WARNING可以忽略不管如果不想显示此消息则在ansible.cfg的[defaults]字段下添加 command warningsFalse即可。 验证
[blabnode01 ~]$ ansible node02 -m shell -a ls /opt/
node02 | CHANGED | rc0 [blabnode01 ~]$ 3.copy和fetch模块 copy用于把本地的文件拷贝到被管理机器语法如下。 ansible 主机组 -m copy -a src/path1/file1 destpath2/ 作用是把本地的/path1/file1拷贝到目的主机的/path2中。 copy模块常见的参数包括以下几个: src源文件dest目的地即拷贝到哪里owner所有者group所属组mode权限
1.copy模块
1把本地的文件/etc/ansible/hosts拷贝到目标机器的/opt目录中并设置权限为000,所有者为tom,命令如下。
[blabnode01 ~]$ ansible node02 -m copy -a src/etc/ansible/hosts mode000 ownertom dest/opt
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,checksum: da996f1a52dbae3b6b43a6c50d761e4ed5ec9a9f,dest: /opt/hosts,gid: 0,group: root,md5sum: 1564b951dc7c8511c6f9ee842653c541,mode: 0000,owner: tom,secontext: system_u:object_r:usr_t:s0,size: 1016,src: /home/blab/.ansible/tmp/ansible-tmp-1702614292.969332-5748-241468010987805/source,state: file,uid: 1002
}
[blabnode01 ~]$ 验证 [blabnode01 ~]$ ansible node02 -m shell -a ls -l /opt/hosts
node02 | CHANGED | rc0
----------. 1 tom root 1016 12月 15 12:24 /opt/hosts
[blabnode01 ~]$ copy模块也可以利用content参数往某个文件中写内容如果此文件不存在则会创建出来。 2在被管理机器的/opt目录中创建11.txt内容为123123命令如下。
[blabnode01 ~]$ ansible node02 -m copy -a content123123 dest/opt/11.txt
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,checksum: 601f1889667efaebb33b8c12572835da3f027f78,dest: /opt/11.txt,gid: 0,group: root,md5sum: 4297f44b13955235245b2497399d7a93,mode: 0644,owner: root,secontext: system_u:object_r:usr_t:s0,size: 6,src: /home/blab/.ansible/tmp/ansible-tmp-1702614452.0289679-5825-32381171106061/source,state: file,uid: 0
}
[blabnode01 ~]$ 验证/opt/11.txt的内容 [blabnode01 ~]$ ansible node02 -m shell -a cat /opt/11.txt
node02 | CHANGED | rc0
123123
[blabnode01 ~]$ 2.fetch模块 1fetch用于把文件从被管理机器拷贝到本机当前目录中,命令如下。 [blabnode01 ~]$ ansible node02 -m fetch -a src/opt/hosts dest./
node02 | CHANGED {changed: true,checksum: da996f1a52dbae3b6b43a6c50d761e4ed5ec9a9f,dest: /home/blab/node02/opt/hosts,md5sum: 1564b951dc7c8511c6f9ee842653c541,remote_checksum: da996f1a52dbae3b6b43a6c50d761e4ed5ec9a9f,remote_md5sum: null
}
[blabnode01 ~]$
2查看
[blabnode01 ~]$ tree node02
node02
└── opt└── hosts1 directory, 1 file
[blabnode01 ~]$ 4.yum_repository模块 利用yum_repository设置yum 源一个标准的repo配置文件如下所示。 [rootnode01 ~]# cat /etc/yum.repos.d/aa.repo
[aa]
nameaa
baseurlfile:///mnt/AppStream
enabled1
gpgcheck0[bb]
namebb
baseurl///mnt/BaseOS
enabled1
gpgcheck0
[rootnode01 ~]# 其中文中的名称用于区分不同的yum 源。这里参数的含义如下。 name此 yum 源的描述信息baseurl用于指定yum源的具体地址‘enabled用于指定是否启用次yum源gpgcheck用于指定在安装软件包是是否要进行数字签名的验证一般设置为0即可gpgkey在gpgcheck设置为1的情况下用于指定公钥的位置对于yum_repository模块来说常见的参数包括以下几个 1namerepo配置文件里 [] 中的名称。 2descriptionrepo配置文件里name字段的描述信息。 3baseurl :用于指定yum源的位置。 4enabled :是否启用源值为true 或false。 5gpgcheck:是否启用数字签名验证值为true或falsc。(6 gpgkey:用于指定公钥的位置。 1给node02配置yum源地址是ftp://192.168.182.200/dvd/AppStream所需要的密钥文件为ftp://192.168.8.11/dvd/RPM-GPG-KEY-redhat-release命令如下。
[blabnode01 ~]$ ansible node02 -m yum_repository -a nameapp descriptionthis is appstream baseurlftp://192.168.182.200/dvd/AppStream gpgcheckyes gpgkeyftp://192.168.182.200/dvd/RPM-GPG-KEY-redhat-release
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,repo: app,state: present
}
[blabnode01 ~]$ 执行之后的效果如下 [blabnode01 ~]$ ansible node02 -m shell -a ls /etc/yum.repos.d
node02 | CHANGED | rc0
aa.repo
app.repo
redhat.repo
[blabnode01 ~]$
[blabnode01 ~]$ ansible node02 -m shell -a cat /etc/yum.repos.d/app.repo
node02 | CHANGED | rc0
[app]
baseurl ftp://192.168.182.200/dvd/AppStream
gpgcheck 1
gpgkey ftp://192.168.182.200/dvd/RPM-GPG-KEY-redhat-release
name this is appstream
[blabnode01 ~]$ 给node02配置第二个yum源地址是 ftp://192.168.182.200/dvd/BaseOS所需要的密钥文件为fip://192.168.182.200/dvd/RPM-GPG-KEY-redhat-release命令如下。 [blabnode01 ~]$ ansible node02 -m yum_repository -a namebaseos descriptionthis is baseos baseurlftp://192.168.182.200/dvd/BaseOS gpgcheckyes gpgkeyftp://192.168.182.200/dvd/RPM-GPG-KEY-redhat-release
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,repo: baseos,state: present
}
[blabnode01 ~]$ 1.使用yum模块管理软件包
yum模块常见的参数包括以下几个
name用于指定软件包的名称state此参数的值如下 ①present或installed用于安装软件包没有指定state时的默认值就是installed。 ②absent或removed用于卸载软件包。 ③latest用于更新。 注意yum模块可以用package模块替代用于在 Ubuntu等其他系统上管理软件包。
练习1在node02上安装vsftpd命令如下。
[blabnode01 ~]$ ansible node02 -m yum -a namevsftpd stateinstalled
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: ,rc: 0,results: [Installed: vsftpd-3.0.3-34.el8.x86_64]
}
[blabnode01 ~]$ 验证 [blabnode01 ~]$ ansible node02 -m shell -a rpm -qa | grep vsftpd
[WARNING]: Consider using the yum, dnf or zypper module rather than running
rpm. If you need to use command because yum, dnf or zypper is insufficient
you can add warn: false to this command task or set command_warningsFalse
in ansible.cfg to get rid of this message.
node02 | CHANGED | rc0
vsftpd-3.0.3-34.el8.x86_64
[blabnode01 ~]$ 练习2在server2上卸载vsftpd命令如下。 [blabnode01 ~]$ ansible node02 -m yum -a namevsftpd stateabsent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: ,rc: 0,results: [Removed: vsftpd-3.0.3-34.el8.x86_64]
}
[blabnode01 ~]$ 如果本机没有安装vsftpd下面的命令就是安装如果已经安装则更新到最新版。 [blabnode01 ~]$ ansible node02 -m yum -a namevsftpd statelatest如果要安装组或模块需要在组名或模块名前加这个模块要使用引号引起来。 练习3安装 RPM开发工具,命令如下。
[blabnode01 ~]$ ansible node02 -m yum -a name开发工具 stateinstalled
node02 | SUCCESS {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: false,msg: Nothing to do,rc: 0,results: [Group development installed.]
}
[blabnode01 ~]$ 5.使用service 模块管理任务 可以通过systemctl对服务进行启动、重启、关闭等操作在ansible中可以调用service模块来实现对服务的管理service模块常见的参数包括以下几个。 name指定对哪个服务进行管理enabled用于设置此服务是否开机自动启动值为yes或no默认值为空state用于启动或关闭服务其值包括startedstoppedrestarted等 首先判断node02上的vsftpd是否启动命令如下。 [blabnode01 ~]$ ansible node02 -m shell -a systemctl is-active vsftpd
node02 | FAILED | rc3
inactivenon-zero return code
[blabnode01 ~]$ 这里返回值为3(rc3)说明node02上的vsftpd没有启动。 练习1启动vsftpd并设置开机自动启动命令如下。
[blabnode01 ~]$ ansible node02 -m service -a namevsftpd statestarted enabledyes验证
[blabnode01 ~]$ ansible node02 -m shell -a systemctl is-active vsftpd
node02 | CHANGED | rc0
active
[blabnode01 ~]$ 或者到 node02上验证,命令如下 [rootnode02 ~]# systemctl is-active vsftpd
active
[rootnode02 ~]# 6.使用parted模块对硬盘分区 在 ansible中如果对分区进行管理使用的是parted模块parted模块常见的参数包括以下几个。 device指定是哪块磁盘number第几个分区part_start指的是从硬盘的什么位置开始划分不写默认为从头开始0%part_end指的是到硬盘的什么位置作为分区的结束点state用于指定操作present是创建absent是删除 自行在node02上新添加一块类型为SCSI、大小为20G的硬盘命令如下。 练习1在server2上对/devIsdb创建一个大小为2GiB的分区/dev/sdb1命令如下。
[blabnode01 ~]$ ansible node02 -m parted -a device/dev/sda number1 part_end2GiB statepresent 此例是对/dev/sdb创建第一个分区因为从硬盘头开始所以不需要指定part_start此分区到2GB位置结束。 [blabnode01 ~]$ ansible node02 -m shell -a lsblk
node02 | CHANGED | rc0
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
nvme0n1 259:0 0 30G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 29G 0 part ├─rhel-root 253:0 0 26G 0 lvm /└─rhel-swap 253:1 0 3G 0 lvm [SWAP]
[blabnode01 ~]$ 练习2在server2上对/dev/sdb创建一个大小为2GB的分区/dev/sdb2命令如下。
[blabnode01 ~]$ ansible node02 -m parted -a device/dev/sda number2 part_start2GiB part_end4GiB statepresent此例是对/dev/sdb创建第二个分区从2GiB位置开始到4GiB位置结束。 在node02上查看分区命令如下。 [blabnode01 ~]$ ansible node02 -m shell -a lsblk
node02 | CHANGED | rc0
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
nvme0n1 259:0 0 30G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 29G 0 part ├─rhel-root 253:0 0 26G 0 lvm /└─rhel-swap 253:1 0 3G 0 lvm [SWAP]
[blabnode01 ~]$ 练习3删除node02上的/dev/sda2命令如下。
[blabnode01 ~]$ ansible node02 -m parted -a device/dev/sda number2 stateabsent
验证
[blabnode01 ~]$ ansible node02 -m shell -a lsblk
node02 | CHANGED | rc0
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
nvme0n1 259:0 0 30G 0 disk
├─nvme0n1p1 259:1 0 1G 0 part /boot
└─nvme0n1p2 259:2 0 29G 0 part ├─rhel-root 253:0 0 26G 0 lvm /└─rhel-swap 253:1 0 3G 0 lvm [SWAP]
[blabnode01 ~]$ 可以看到/dev/sda2已经被删除了。 请自行创建出/dev/sda2和/dev/sda3备用命令如下。 [blabnode01 ~]$ ansible node02 -m shell -a lsblk
node02 | CHANGED | rc0
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 7.使用filesystem模块格式化 分区创建好之后需要对分区进行格式化操作格式化的模块为filesystemfilesystem 模块常见的参数包括以下几个 1dev用于指定对哪个设备进行格式化。 2fstype用于指定用什么文件系统进行格式化。 3force是否强制格式化默认为no。 练习1把 node02上的/dev/sda3格式化为XFS文件系统命令如下。
[blabnode01 ~]$ ansible node02 -m filesystem -a dev/dev/sda3 fstypexfs
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true
}
[blabnode01 ~]$ 如果想重新格式化需要加上 force选项命令如下。 [blabnode01 ~]$ ansible node02 -m filesystem -a dev/dev/sda3 fstypexfs forceyes
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true
}
[blabnode01 ~]$ 8.使用mount 模块挂载文件系统 格式化之后就需要挂载分区挂载用的是mount模块mount模块常见的参数包括以下几个 src用于指定挂载哪个设备path用于指定挂载点fstype用于指定挂载问年间系统这个选项一定要指定opts用于指定挂载选项如果不指定则为defaultstate此参数的值如下 ①mounted挂载的同时也会写入/etc/fstab。 ②present只是写入/etc/fstab但当前并没有挂载。 ③unmounted只卸载并不会把条目从/etc/fstab中删除。 ④absent卸载并从/etc/fstab中删除。 练习1把node02上的/dev/sda3挂载到/123目录上挂载选项为只读命令如下。
[blabnode01 ~]$ ansible node02 -m shell -a mkdir /123
[blabnode01 ~]$ ansible node02 -m mount -a src/dev/sda3 path/123 statemounted fstypexfs optsdefaults,ro
node02 | 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
}
[blabnode01 ~]$ 这里指定了挂载选项为defaults,ro多个选项用逗号隔开。 验证 [blabnode01 ~]$ ansible node02 -m shell -a df -Th | grep sda3
node02 | CHANGED | rc0
/dev/sda3 xfs 2.0G 256K 2.0G 1% /123
[blabnode01 ~]$ 因为挂载时state的值是mounted所以不仅把/dev/sda3挂载了也写人/etc/fstab了。 练习2在node02上卸载并从/etc/fstab中删除/dev/sda3命令如下。 [blabnode01 ~]$ ansible node02 -m mount -a src/dev/sda3 path/123 stateabsent
node02 | 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
}
[blabnode01 ~]$ 注意如果卸载path是一定要指定的src指定不指定都无所谓。 9.使用lvg模块对卷组进行管理 使用lvg模块管理卷组此模块常见的参数包括以下几个 pvs用于指定物理卷如果有多个PV则用逗号隔开不需要提前创建PV此命令会自动创建PVvg用以指定卷组的名称pesize用于指定PE的大小state此参数的值如下present :用于创建卷组默认。absent :用于删除卷组。
练习1在node02上创建名称为vg0的卷组所使用的分区为/dev/sda1和/dev/sda2/pesize指定为16M。
1先确认node02上不存在任何PV 和VG,命令如下 这里之前实验存在一个不用管。 [blabnode01 ~]$ ansible node02 -m shell -a vgs
node02 | CHANGED | rc0 VG #PV #LV #SN Attr VSize VFreerhel 1 2 0 wz--n- 29.00g 0
[blabnode01 ~]$ 2开始创建vg0命令如下 [blabnode01 ~]$ ansible node02 -m lvg -a pvs/dev/sda1,/dev/sda2 vgvg0 pesize16 statepresent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true
}
[blabnode01 ~]$ 这里如果不指定pesize选项则默认为4。 验证 [blabnode01 ~]$ ansible node02 -m shell -a vgs
node02 | CHANGED | rc0 VG #PV #LV #SN Attr VSize VFree rhel 1 2 0 wz--n- 29.00g 0 vg0 2 0 0 wz--n- 3.97g 3.97g
[blabnode01 ~]$ 练习2删除卷组 vg0命令如下。 [blabnode01 ~]$ ansible node02 -m lvg -a vgvg0 pesize16 stateabsent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true
}
[blabnode01 ~]$ 验证 [blabnode01 ~]$ ansible node02 -m shell -a vgs
node02 | CHANGED | rc0 VG #PV #LV #SN Attr VSize VFreerhel 1 2 0 wz--n- 29.00g 0
[blabnode01 ~]$ 可以看到vg0已经没有了。 请使用ansible node02 -m lvg -a pvsldev/sda1,/dev/sda2 vg-vg0 pesize16 state-present命令再次把vg0创建出来。 10.使用lvol模块管理逻辑卷 卷组创建好之后就要创建逻辑卷了管理逻辑卷的模块是Ivollvol模块常见的参数包含以下几个 vg用于指定在哪个卷组上划分逻辑卷lv用于指定逻辑卷的名称size用于指定逻辑卷的大小state此参数的值如下present :用于创建逻辑卷。absent :用于删除逻辑卷。
练习1在node02的卷组 vg0上创建大小为1G、名称为lv0的逻辑卷。
1先判断node02上是否存在逻辑卷命令如下。 [blabnode01 ~]$ ansible node02 -m shell -a lvs
node02 | CHANGED | rc0 [blabnode01 ~]$ 2可以看到不存在任何逻辑卷。下面开始创建逻辑卷命令如下。 [blabnode01 ~]$ ansible node02 -m lvol -a vgvg0 lvlv0 size1G
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg:
}
[blabnode01 ~]$ 3验证 [blabnode01 ~]$ ansible node02 -m shell -a lvs
node02 | CHANGED | rc0 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert lv0 vg0 -wi-a----- 1.00g
[blabnode01 ~]$ 可以看到,此逻辑卷已经创建出来了。 练习2在node2上删除逻辑卷/dev/vg0/lv0命令如下。 [blabnode01 ~]$ ansible node02 -m lvol -a vgvg0 lvlv0 stateabsent forceyes
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true
}
[blabnode01 ~]$ 11.使用firewalld模块管理防火墙 在ansible中可以通过firewalld模块对防火墙进行管理firewalld模块常见的参数包括以下几个 service开放某个服务port开放某个端口用法为port80/tcppermanentyes设置永久生效不存在默认值immediateyes设置当前生效默认为不生效state此参数如下 ①enabled用于创建规则。 ②disabled用于删除规则。 rich_rule富规则 练习1在node2上开放服务http命令如下。 [blabnode01 ~]$ ansible node02 -m firewalld -a servicehttp immediateyes permanentyes stateenabled
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: Permanent and Non-Permanent(immediate) operation, Changed service http to enabled
}
[blabnode01 ~]$ 2验证 [blabnode01 ~]$ ansible node02 -m shell -a firewall-cmd --list-all
node02 | CHANGED | rc0
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client http ssh //可以看到已经添加http服务ports: protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules:
[blabnode01 ~]$ 练习2在node02上配置防火墙,允许tcp端口808通过命令如下。 [blabnode01 ~]$ ansible node02 -m firewalld -aport808/tcp immediateyes permanentyes stateenabled
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: Permanent and Non-Permanent(immediate) operation, Changed port 808/tcp to enabled
}
[blabnode01 ~]$ 验证 [blabnode01 ~]$ ansible node02 -m shell -a firewall-cmd --list-all
node02 | CHANGED | rc0
public (active)target: defaulticmp-block-inversion: nointerfaces: ens160sources: services: cockpit dhcpv6-client http sshports: 808/tcp //可以看到端口已经添加protocols: forward: nomasquerade: noforward-ports: source-ports: icmp-blocks: rich rules:
[blabnode01 ~]$ 练习3在node02上配置防火墙删除开放的端口808和服务http命令如下。 [blabnode01 ~]$ ansible node02 -m firewalld -a port808/tcp immediateyes permanentyes statedisabled
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: Permanent and Non-Permanent(immediate) operation, Changed port 808/tcp to disabled
}
[blabnode01 ~]$ 12.替换模块replace 平时写shell脚本时要替换文件的内容可以直接使用vim或sed命令来进行替换操作。在 ansible中也有相关的替换模块:replace和 lineinfile这里先讲replace模块的使用。 replace模块常见的参数包括以下几个 path指明编辑的文件regexp正则表达式指定要替换的字符replace替换后的字符 练习1把node02 上 /opt/aa.txt中开头为aa那行的内容替换为xx666。 1在node02的lopt目录中创建aa.txt内容如下。 [rootnode02 ~]# cat /opt/aa.txt
aa111
bb222
[rootnode02 ~]# 2在ansible主机上执行replace模块命令如下。 [blabnode01 ~]$ ansible node02 -m replace -a path/opt/aa.txt regexpaa111 replacexx666
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: 1 replacements made
}
[blabnode01 ~]$ 这里的意思是把node02 上/opt/aa.txt这个文件中aa111的字符替换成xx666。记 住,这里只是对regexp表示的字符进行替换替换之后的内容如下。 [blabnode01 ~]$ ansible node02 -m shell -a cat /opt/aa.txt
node02 | CHANGED | rc0
xx666
bb222
[blabnode01 ~]$ 可以看到,只是把原来的字符aa替换成replace后面的内容了并不是把这行内容替换掉。如果想把整行内容进行替换需要在regexp后面表示出来整行内容。 练习2把 node02上 /opt/aa.txt中开头为bb那行的内容替换为xx666命令如下。 [blabnode01 ~]$ ansible node02 -m replace -a path/opt/aa.txt regexp^bb. replacexx666
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,msg: 1 replacements made
}
[blabnode01 ~]$ 这里path指明了要替换的文件regexp的写法是^bb.比上面的例子中多了.意思是开头是bb及后续所有的字符这就表示以bb开头的那一整行内容)替换成xx666运行结果如下。 [blabnode01 ~]$ ansible node02 -m shell -a cat /opt/aa.txt
node02 | CHANGED | rc0
xx666
xx666
[blabnode01 ~]$ 13.替换模块lineinfile lineinfile模块的用法与replace基本一致也是用于替换的常见的参数包括以下几个 1path指明编辑的文件。 2regexp正则表达式。 3line替换后的字符。 练习1把node02 上/opt/bb.txt中开头为aa111那行的内容替换为xx666。 1在node02上创建文件/opt/bb.txt内容如下。 [rootnode02 ~]# cat /opt/bb.txt
aa111
bb222
[rootnode02 ~]# 2在ansible主机上执行lineinfile模块,命令如下。 [blabnode01 ~]$ ansible node02 -m lineinfile -a path/opt/bb.txt regexp^aa linexx666
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},backup: ,changed: true,msg: line replaced
}
[blabnode01 ~]$ 这里的意思是把path所指定的文件/opt/bb.txtregexp后面跟的^aa即以aa开头的行 (需要注意的是这里和 replace模块有区别)替换成xx666运行结果如下。 [blabnode01 ~]$ ansible node02 -m shell -a cat /opt/bb.txt
node02 | CHANGED | rc0
xx666
bb222
[blabnode01 ~]$ 总结replace是对字符进行替换lineinfile是对行进行替换如果replace想对行进行替换,在regexp后面必须写上正则表达式来表示一整行内容。 14.打印模块debug debug模块一般用于打印提示信息类似于shell 中的echo命令其他语言如Python等中的print其常见的参数包括以下几个 msg后面跟具体内容var后面跟变量
注意var 和 msg 不可以同时使用
练习在server2上打印“111”命令如下。
[blabnode01 ~]$ ansible node02 -m debug -a msghello luo
node02 | SUCCESS {msg: hello luo
}
[blabnode01 ~]$ 15.使用script模块在远端执行脚本 如果在本地写了一个脚本想在所有被管理节点上执行没有必要事先把脚本分发到被管理机器上使用script模块即可快速实现。 1先写一个简单的脚本test1.sh 用于显示主机名内容如下。
[blabnode01 ~]$ cat test1.sh
#!/bin/bash
hostname
[blabnode01 ~]$ chmod x test1.sh
[blabnode01 ~]$ 2下面在db1主机组上执行命令如下。
[blabnode01 ~]$ ansible db1 -m script -a ./test1.sh
node02 | CHANGED {changed: true,rc: 0,stderr: Shared connection to node02 closed.\r\n,stderr_lines: [Shared connection to node02 closed.],stdout: node02\r\n,stdout_lines: [node02]
}这样本地脚本直接在所有被管理主机上执行了。 16.使用group模块对组进行管理 如果对系统的组进行管理那么可以使用group模块。group模块常见的参数包括以下几个 name指定组名state此三处的值如下 ①present用于创建组。 ②absent用于删除组。 下面在node02上创建组 group1。 1先判断node02上是否存在group1命令如下。
[rootnode02 ~]# grep group1 /etc/group
[rootnode02 ~]#
2没有任何输出说明node02上是没有group1这个组的。下面创建组group1命令如下。
[blabnode01 ~]$ ansible node02 -m group -a namegroup1 statepresent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,gid: 1003,name: group1,state: present,system: false
}
[blabnode01 ~]$
3然后切换到node02上进行验证命令如下。
[rootnode02 ~]# grep group1 /etc/group
group1:x:1003:
[rootnode02 ~]# 4删除这个组命令如下。
[blabnode01 ~]$ ansible node02 -m group -a namegroup1 stateabsent
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,name: group1,state: absent
}
[blabnode01 ~]$ 17.使用user模块对用户进行管理 对用户的管理可以使用user模块对于user模块来说常见的参数包括以下几个 name指定用户名comment指定注释信息group指定用户的主组groups指定用户的附属组password指定密码但是必须对密码进行加密state此参数值如下 ①present用于创建用户。 ②absent用于删除用户。
1下面创建一个用户lisi
[blabnode01 ~]$ ansible node02 -m user -a namelisi grouproot password123456 statepresent
[WARNING]: The input password appears not to have been hashed. The password
argument must be encrypted for this module to work properly.
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,comment: ,create_home: true,group: 0,home: /home/lisi,name: lisi,password: NOT_LOGGING_PASSWORD,shell: /bin/bash,state: present,system: false,uid: 1003
}
[blabnode01 ~]$ 到node02 上验证因为root用su命令切换到任何用户都不需要密码所以这里先切换到 lduan用户然后再切换到lisi用户测试密码是不是正确。 [rootnode02 ~]# su - lisi
[lisinode02 ~]$ exit
注销
[rootnode02 ~]# 2下面把lisi用户删除命令如下。 [blabnode01 ~]$ ansible node02 -m user -a namelisi stateabsent removeyes
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,force: false,name: lisi,remove: false,state: absent
}
[blabnode01 ~]$ 这里removeyes的意思类似于userdel 中的-r选项删除用户的同时把家目录也删除。 18.使用get url模块下载文件 如果想从服务器上下载到被管理机器上需要使用到get_url模块。get_url模块常见的参数包括以下几个 url指定文件的URL连接dest指定存储在哪里 例如现在要把ftp://ftp.rhce.cc/auto/web.tar.gz下载到server2的/opt目录中命令如下。 [blabnode01 ~]$ ansible node02 -m get_url -a urlftp://ftp.rhce.cc/auto/web.tar.gz dest/opt/
node02 | CHANGED {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: true,checksum_dest: null,checksum_src: 0453d8c9e9ce9bda838b659b901b74a2e709fb15,dest: /opt/web.tar.gz,elapsed: 1,gid: 0,group: root,md5sum: 41c019324f7b8160ce6944102a755de8,mode: 0644,msg: OK (1406 bytes),owner: root,secontext: system_u:object_r:usr_t:s0,size: 1406,src: /home/blab/.ansible/tmp/ansible-tmp-1702885918.9421644-8590-163172471685725/tmpy3h7y39h,state: file,status_code: null,uid: 0,url: ftp://ftp.rhce.cc/auto/web.tar.gz
}
[blabnode01 ~]$ 然后到node02上验证命令如下。 [rootnode02 ~]# ls /opt/
11.txt aa.txt bb.txt hosts web.tar.gz
[rootnode02 ~]# 可以看到已经把文件下载下来了。 19.使用setup模块获取被管理主机信息 如果想获取被管理主机的系统信息可以使用setup模块。下面获取node02上的信息命令如下。 [blabnode01 ~]$ ansible node02 -m setupsetup中所获取的变量叫作fact变量这里都是以key:value的格式输出大致结构如下。 1 键 1 : 值 2 键 2 :{ 3 子键 a : 值 a 4 子键 b : 值 b 5 ... 6 } 如果想获取“键1”的值,可以通过参数“filter键”或“filter键.子键”来过滤。例如 要获取server2上所在机器BIOS的版本可以通过键值ansible_bios_version来获取命令如下。 [blabnode01 ~]$ ansible node02 -m setup -a filteransible_bios_version
node02 | SUCCESS {ansible_facts: {ansible_bios_version: 6.00,discovered_interpreter_python: /usr/libexec/platform-python},changed: false
}
[blabnode01 ~]$ 如果想获取node02上ipv4的所有信息可以通过键值ansible default ipv4来获取命令如下。 [blabnode01 ~]$ ansible node02 -m setup -a filteransible_default_ipv4
node02 | SUCCESS {ansible_facts: {ansible_default_ipv4: {address: 192.168.182.193,alias: ens160,broadcast: 192.168.182.255,gateway: 192.168.182.2,interface: ens160,macaddress: 00:0c:29:ba:79:52,mtu: 1500,netmask: 255.255.255.0,network: 192.168.182.0,type: ether},discovered_interpreter_python: /usr/libexec/platform-python},changed: false
}
[blabnode01 ~]$ 如果仅仅想获取IP地址信息其他网络信息不需要可以通过 ansible_default_ipv4的子键来获取命令如下。 [blabnode01 ~]$ ansible node02 -m setup -a filteransible_default_ipvs.address
node02 | SUCCESS {ansible_facts: {discovered_interpreter_python: /usr/libexec/platform-python},changed: false
}
[blabnode01 ~]$ 不过在命令行中如果filter含有子键结果是不会显示的所以上面的命令没有看到IP.不过如果把这个键写入playbook是会显示值的关于 playbook后面会讲。