RHCE-B6. 创建和使用 apache 角色
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B6. 创建和使用 apache 角色相关的知识,希望对你有一定的参考价值。
红帽RHCE考试下午-RHCE(RH294)
RH294任务概览
- 考试时间4个小时,6台虚拟机,15道题
- 原来通过脚本或者集群做的题现在都需要使用playbook实现
- 考试时大概有6台虚拟服务器,都已经做好了互相的免密
- 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
- 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
- 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
- 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
- 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分
6. 创建和使用 apache 角色
- 根据下列要求,在/home/student/ansible/roles 中创建名为 http 的角色
- 按照下方所述,创建一个使用此角色的 playbook /home/student/ansible/newrole.yml:
- 该playbook 在webservers 主机组中的主机上运行
任务要求
- httpd 软件包已安装,设为在系统启动时启用并启动
- 防火墙已启用并正在运行,并使用允许访问Web 服务器的规则
- 模板文件 index.html.j2 已存在,用于创建具有以下输出的文件/var/www/html/index.html: Welcome to HOSTNAME on IPADDRESS
- 其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。
注意:
准备个工作
- 考试期间不需要做
完成步骤
- 首先使用ansible-galaxy生成角色
- 进入在/home/student/ansible/roles目录
- 使用ansible-galaxy创建生成名为http的角色模板
ansible-galaxy init
用来创建角色项目模板,其实就是生成了一堆目录核文件
[student@workstation ansible]$ cd roles/
[student@workstation roles]$ ansible-galaxy init http
- 这时候查看roles目录下应该已经生成好角色得目录了
- 根据题目要求编写任务得yml文件
- 编辑http角色中的任务目录中的主文件以适合题目的要求
[student@workstation roles]$ vim http/tasks/main.yml
---
# tasks file for http
- name: install http ## 按题要求,先安装稳定版得httpd
yum:
name: httpd
state: present
- name: config system service ## 按题要求,将httpd和firewall设为开机启动
service:
name: "{{ item }}" ## 写个变量循环
state: started
enabled: yes
loop: ## 定义变量列表,注意缩进
- httpd
- firewalld
## 定义防火墙策略,可以通过帮助去找呀ansible-doc -l | grep firewalld
- name: firewalld service ## 按题要求,设置防火墙策略
firewalld:
service: http
permanent: yes
immediate: yes ## 用来重新加载防火墙的,如果不重新加载则不生效啊
state: enabled
- name: user templates ## 按题要求,使用模板模块拷贝文件
template:
src: index.html.j2
dest: /var/www/html/index.html
owner: apache
group: apache
mode: '0644'
- 创建题中要求的模板文件
- 查找ansible内置变量
ansible servera -m setip > setup.info
vim setup.info
## hostname上面那个变量fqdn才是题中要求的完整域名
## IP有老多了,找到那个默认得IPv4带有真地址得变量名,而且是分段得两部分,注意点.
注意:通过导出的文件,可以找出内置变量的名
- 去新创建得角色目录中的模板目录中创建模板呀
- 编辑指定的模板文件内容
[student@workstation roles]$ vim /home/student/ansible/roles/http/templates/index.html.j2
Welcome to {{ ansible_facts.fqdn }} on {{ ansible_facts.default_ipv4.address }}
- 编写playbook并执行题中要求任务
- 创建一个使用http角色的playbook—/home/student/ansible/newrole.yml,该playbook在webservers主机组中的主机上执行
[student@workstation roles]$ vim /home/student/ansible/newrole.yml
---
- name: use http role
hosts: webservers
roles:
- http
[student@workstation ansible]$ ansible-playbook /home/student/ansible/newrole.yml ## 记得回到ansible目录下执行playbook
- 验证结果
[student@workstation ansible]$ curl http://serverc
Welcome to serverc.lab.example.com on 172.25.250.12
[student@workstation ansible]$ curl http://serverd
Welcome to serverd.lab.example.com on 172.25.250.13
考察的知识点
ansible-galaxy构建角色架构
- 用于初始化一个新角色的基本文件结构,节省创建不同的目录和main.yml的时间了。
ansible-galaxy init <rolename自定义的角色名>
- 通过执行init命令,可以在指定的目录中创建标准的角色目录层级和文件
roles目录结构
playbook1.yml
playbook2.yml
roles/
project1/
tasks/
files/
vars/
templates/
handlers/
default/
meta/
project2/
tasks/
files/
vars/
templates/
handlers/
default/
meta/
Roles各目录作用
- roles/project/ :项目名称,有以下子目录
files/ :
存放由copy或script模块等调用的文件
templates/:
template模块查找所需要模板文件的目录
tasks/:
定义task,role的基本元素,至少应该包含一个名为main.yml的文件;其它的文件需要在此文件中通过include进行包含
handlers/:
至少应该包含一个名为main.yml的文件;此目录下的其它的文件需要在此文件中通过include进行包含
vars/:
定义变量,至少应该包含一个名为main.yml的文件;此目录下的其它的变量文件需要在此文件中通过include进行包含
meta/:
定义当前角色的特殊设定及其依赖关系,至少应该包含一个名为main.yml的文件,其它文件需在此文件中通过include进行包含
default/:
设定默认变量时使用此目录中的main.yml文件,比vars的优先级低
Service 模块
- 功能:管理服务
ansible all -m service -a 'name=httpd state=started enabled=yes'
ansible all -m service -a 'name=httpd state=stopped'
ansible all -m service -a 'name=httpd state=reloaded'
ansible all -m shell -a "sed -i 's/^Listen 80/Listen 8080/' /etc/httpd/conf/httpd.conf"
ansible all -m service -a 'name=httpd state=restarted'
ansible Playbook中的循环迭代
- 迭代:当有需要重复性执行的任务时,可以使用迭代机制
- 对迭代项的引用,固定内置变量名为"item"
- 要在task中使用with_items给定要迭代的元素列表
---
- hosts: websrvs
remote_user: root
tasks:
- name: add several users
user: name={{ item }} state=present groups=wheel
with_items:
- testuser1
- testuser2
- testuser3
#上面语句的功能等同于下面的语句
- name: add several users
user: name=testuser1 state=present groups=wheel
- name: add several users
user: name=testuser2 state=present groups=wheel
- name: add several users
user: name=testuser3 state=present groups=wheel
注意: ansible2.5版本后,可以用loop代替with_items
#ansible-doc file
- name: Create two hard links
file:
src: '/tmp/{{ item.src }}'
dest: '{{ item.dest }}'
state: hard
loop:
- { src: x, dest: y }
- { src: m, dest: n }
template 模板
- 模板是一个文本文件,可以做为生成文件的模版,并且模板文件中还可嵌套jinja2语法
- template功能:可以根据和参考模块文件,动态生成相类似的配置文件
- template文件必须存放于templates目录下,且命名为 .j2 结尾
- yaml/yml 文件需和templates目录平级,目录结构如下示例:
./
├── temnginx.yml
└── templates
└── nginx.conf.j2
- 利用template 同步nginx配置文件
#准备templates/nginx.conf.j2文件
[root@ansible ~]#vim temnginx.yml
---
- hosts: websrvs
remote_user: root
tasks:
- name: template config to remote hosts
template: src=nginx.conf.j2 dest=/etc/nginx/nginx.conf
[root@ansible ~]#ansible-playbook temnginx.yml
以上是关于RHCE-B6. 创建和使用 apache 角色的主要内容,如果未能解决你的问题,请参考以下文章
RHCE-B7. 从 Ansible Galaxy 使用角色创建web负载均衡
RHCE-B5. 使用Ansible Galaxy 安装角色
RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷