题目描述
按照下方所述,创建一个名为 /home/greg/ansible/webcontent.yml 的 playbook :
- 该
playbook在dev主机组中的受管节点上运行 - 创建符合下列要求的目录
/webdev:
- 所有者为
webdev组; - 具有常规权限:
owner=read+write+execute,group=read+write+execute,other=read+execute; - 具有特殊权限:设置组
ID; - 用符号链接将
/var/www/html/webdev链接到/webdev; - 创建文件
/webdev/index.html, 其中包含如下所示的单行文件:Development; - 在
dev主机组中主机上浏览此目录(例如http://172.25.250.9/webdev/)将生成以下输出:
Development
详细解析
按照题目要求,首先创建并编辑如下 playbook:
vim /home/greg/ansible/webcontent.yml
接着,开始编写 playbook.
由于题目要求我们要求我们创建 webdev 目录并且还要可以通过网络访问此目录,于是,我们首先要调用 yum 模块进行 Apache 服务器的安装;之后,还要调用 firewalld 模块设置防火墙以允许对 http 服务的访问;接着就需要调用 service 模块重启 Apache 和防火墙,并将这两个服务设置为开机自启动;最后,根据题目要求,我们需要调用 file 模块设置 webdev 目录以及其中的文件的所属组、权限和符号链接。同时,这里需要注意的一点是,由于在 RHCE8 的考试环境中,SELinux 是强制开启的,又由于我们需要访问的 web 文件其实是一个 .html 格式的静态文件,因此,这里我们将使用 file 模块下的 setype 参数,将 webdev 目录以及其中的 index.html 文件的 SELinux 上下文设置为 httpd_sys_content_t 即可。
所需编写的 playbook 全文如下(# 号后面的是注释,仅用于辅助理解,正式考试时不需要写):
---
- name:
hosts: dev
tasks:
- name:
service:
name: firewalld
state: restarted #make firewall running.
- name:
yum:
name: httpd
state: present
- name:
firewalld:
service: http #not httpd.
state: enabled
permanent: yes
immediate: yes
- name:
service:
name: "{{ item }}"
state: restarted
loop:
- httpd
- firewalld
- name:
file:
path: /webdev
group: webdev
mode: "2775" #'2' is Set Group ID
state: directory
setype: httpd_sys_content_t
- name:
file:
src: /webdev
dest: /var/www/html/webdev
state: link
- name:
copy:
content: "Development"
dest: /webdev/index.html #If this file is not exit, the 'content' will create it.
setype: httpd_sys_content_t
接着,运行 playbook:
ansible-playbook /home/greg/ansible/webcontent.yml
最后,使用 curl 命令访问题目指定的链接 http://172.25.250.9/webdev/, 如果能返回 Development 就没有问题。