0、创建新的虚拟机,使用镜像RHEL8.5,要求/boot目录为512N,/home目录为1Gb,交换空间为2Gb,其他空间给)目录。
1、将该主机作为 Ansible 控制节点,克隆该虚拟机,将克隆的虚拟机作为受控节点,Ansible 仓库路径为 http://47.108.86.156/rhel8/ansible29/ansible-2.9-for-rhel-8-x86_64-rpms/
2、在控制节点上创建角色exam,该角色将在受控节点上完成以下任务∶
2.1,创建本地共享目录/home/materials,其所属组为sysadms, sysadms组成员对目录有修改目录里文件内容、长列表查看内容和进入该目录的权限,除此之外其它用户没有任何权限。
2.2.将系统光盘挂在载/mnt目录下,并且开机自动挂载,将控制节点本地的 rpm. repo 文件作为受控节点的yum源配置文件内容,该仓库无需开后gpg检查,配置完成后,安装httpd软件包,后动该服务并让该服务开机自启动。
2.3,创建一个sysadms组,创建两个用户 natasha和 harry 以该组为附属组,创建用户sarah,并且 sarah使用非交互式shell,该用户也不属于sysadms组,三个用户的密码都是compedel。
2.4.在根目录下创建一个目录test,在该目录中每个用户创建的文件只能自己有权限删除,其他用户没有权限删除,但是该目录对于hehe用户用所有的权限,该目录当中有一个可执行程序configtest.sh,该文件是系统/usr/bin/touch。
可执行程序的副本,该程序任何人都可以执行,但是每个人通过该程序创建的文件所有者都为redhat。
2.5、给受控节点添加sata接口、大小为10Gb大小和nvme接口、大小为20Gb大小的两块磁盘,完成以下需求∶
〉使用这两块磁盘创建卷组名称为testgroup 的卷组,使用该卷组创建testlv名称的逻辑卷,该逻辑卷大小为25Gb,并将该逻辑卷格式化为xfs格式,开机自动挂载到/exam目录。
〉使用testgroup卷组创建swaplv逻辑卷,大小为1Gb,作为交换空间并开机自动启用。
解题
0、创建新的虚拟机,使用镜像RHEL8.5,要求/boot目录为512N,/home 目录为 1Gb,交换空间为26b,其他空间给╱目录。
1、将该主机作为 Ansible控制节点,克隆该虚拟机,将克隆的虚拟机作为受控节点,Ansible 仓库路怪为 httpd://47.108.86.156/rhel8/ansible29/ansible-2.9-for-rhel-8-x86_64-rpms/
先挂载仓库下载dnf ,再挂载ansible仓库下载ansible
[root@localhost ansible]# yum install dnf
[root@localhost ansible]# dnf install ansible
2、在控制节点上创建角色exam,该角色将在受控节点上完成以下任务:
[root@localhost ansible]# ansible-galaxy init exam //创建exam角色
2.1,创建本地共享目录/home/materials,其所属组为sysadms, sysadms组成员对目录有修改目录里文件内容、长列表查看内容和进入该目录的权限,除此之外其它用户没有任何权限。
- name: exam #创建组
group:
name: sysadms
state: present #创建
- name: file #设置组权限
file:
group: sysadms
path: /home/materials
mode: '2770'
state: directory
2.2.将系统光盘挂在载/mnt目录下,并且开机自动挂载,将控制节点本地的rpm.repo文件作为受控节点的 yum源配置文件内容,该仓库无需开启gpg检查,配置完成后,安装httpd软件包,后动该服务并让该服务开机自启动。
- name: mount and turn on auto mount
mount:
src: /dev/sr0 #挂载设备
path: /mnt #挂载点
fstype: iso9660 #文件系统类型
state: present
- name: install yum repo
copy:
src: /dev/yum.repos.d/rpm.repo
dest: /etc/yum.repos.d/
- name: httpd installd #安装httpd软件包
yum:
name: httpd
state: latest #最新版本
- name: start httpd service
service:
name: httpd
enabled: true #开机自启动
state: started
2.3,创建一个sysadms组,创建两个用户 natasha和 harry 以该组为附属组,创建用户 sarah,并且 sarah使用非交互式shell,该用户也不属于sysadms组,三个用户的密码都是compede
- name: create group sysadms #创建sysadms组
group:
name: sysadms
state: present
- name: create user natesha and harry #创建两个用户,为sysadms组附属组并设置密码
user:
name: "{{item.user}}"
group: sysadms
password: "{{'compedel'}}"
loop:
- {user: natasha}
- {user: harry} //会出现警告,但不是错误,不要紧
- name: create user sarah #创建用户 sarah,并且 sarah使用非交互式shell,该用户也不属于sysadms组,并设置密码
user:
name: sarah
shell: /user/bin/false
password: "{{'compedel'}}"
2.4,在根目录下创建一个目录 test,在该目录中每个用户创建的文件只能自己有权限删除,其他用户没有权限删除,但是该目录对于hehe用户用所有的权限,该目录当中有一个可执行程序configtest.sh ,该文件是系统/usr/bin/touch 可执行程序的副本,该程序任何人都可以执行,但是每个人通过该程序创建的文件所有者都为redhat。
- name: create directory test #创建目录test并设置权限
file:
path: /test
state: directory
mode: '1777'
- name: set permissions #设置hehe用户的权限
acl:
path: /test
entity: hehe
etype: user
permissions: rwx
state: present
- name: user hehe #创建用户hehe
user:
name: hehe
- name: owner #创建所有者
user:
name: redhat
- name: configtest.sh
copy:
src: /usr/bin/touch
dest: /test/configtest.sh
owner: redhat
mode: '4777'
copy模块的作用就是拷贝文件,将ansible主机上的文件拷贝到远程主机中。
src参数 :用于指定需要copy的文件或目录
dest参数 :用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数
content参数 :当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
force参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup参数 : 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner参数 : 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group参数 : 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode参数 : 指定文件拷贝到远程主机后的权限,如果你想将权限设置为"rw-r--r--",则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
2.5、给受控节点添加sata接口、大小为10Gb大小和nvme接口、大小为20Gb大小的两块磁盘,完成以下需求∶
注意:在虚拟机在关机状态下设置
〉使用这两块磁盘创建卷组名称为testgroup 的卷组,使用该卷组创建testlv 名称的逻辑卷,该运辑卷大小为25Gb,并将该逻辑卷格式化为xfs格式,开机自动挂载到/exam目录。
- name: create lvg testgroup #使用这两块磁盘创建卷组名称为testgroup
lvg:
vg: testgroup
pvs: /dev/nvme0n2,/dev/sda
state: present #可不写,默认是present
- name: create lvol testlv #使用testgroup卷组创建testlv名称的逻辑卷,并设置大小
lvol:
vg: testgroup
lv: testlv
size: 25G
state: present #可不写,默认是present
- name: filesystem xfs #逻辑卷格式化为xfs
filesystem:
fstype: xfs
dev: /dev/mapper/testgroup-testlv
- name: mkdir /exam
file:
path: /exam
state: directory
- name: mount #自动挂载到/exam目录
mount:
src: /dev/mapper/testgroup-testlv
path: /exam
fstype: xfs
state: present
〉使用testgroup卷组创建swaplv逻辑卷,大小为 1Gb,作为交换空间并开机自动后用。
- name: create lvol swaplv #使用testgroup卷组创建testlv名称的逻辑卷,并设置大小
lvol:
vg: testgroup
lv: swaplv
size: 1G
- name: filesystem swap #逻辑卷格式化为swap
filesystem:
fstype: swap
dev: /dev/mapper/testgroup-swaplv
- name: mount
mount:
src: /dev/mapper/testgroup-swaplv
path: /exam
fstypy: swap
state: present
lvg模块 创建卷组
vg 定义卷组名
state {present 创建,absent 删除}
pvs 指定物理卷
pesize 定义pe大小
lvol模块 创建逻辑卷
lv 定义逻辑卷名
size 定义逻辑卷大小
vg 空间来自哪个卷组
state{present 创建,absent 删除}
force=yes 强制执行
filesystem模块
• 用于格式化,也就是创建文件系统
• 常用选项:
– fstype:指定文件系统类型
– dev:指定要格式化的设备,可以是分区,可以是逻辑卷
mount模块
• 用于挂载文件系统
• 常用选项:
– path:挂载点。如果挂载点不存在,自动创建。
– src:待挂载的设备
– fstype:文件系统类型,
– state:mounted表示永久挂载 ,设备将被主动安装,并在fstab中适当配置。如果挂载点不存在,则将创建挂载点。
unmounted 设备将卸载而不更改fstab。
present仅指定设备将在fstab中配置﹐不会触发或要求挂载。
absent表示设备支架的条目将从fstab中删除还将卸载设备并删除挂载点。
remounted指定当您想强制刷新挂载本身时,设备将被重新安装。
看案例:
运行playbook:
验证语法是否有误: ansible-playbook --syntax-check playbook的名称
运行playbook: ansible-playbook playbook的名称