RHCE-B6. 创建和使用 apache 角色

Posted 白-胖-子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B6. 创建和使用 apache 角色相关的知识,希望对你有一定的参考价值。

红帽RHCE考试下午-RHCE(RH294)

RH294任务概览

  • 考试时间4个小时,6台虚拟机,15道题
  • 原来通过脚本或者集群做的题现在都需要使用playbook实现
  • 考试时大概有6台虚拟服务器,都已经做好了互相的免密
  • 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
  • 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
  • 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
  1. 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
  2. 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分

6. 创建和使用 apache 角色

  • 根据下列要求,在/home/student/ansible/roles 中创建名为 http 的角色
  • 按照下方所述,创建一个使用此角色的 playbook /home/student/ansible/newrole.yml:
  • 该playbook 在webservers 主机组中的主机上运行

任务要求

  1. httpd 软件包已安装,设为在系统启动时启用并启动
  2. 防火墙已启用并正在运行,并使用允许访问Web 服务器的规则
  3. 模板文件 index.html.j2 已存在,用于创建具有以下输出的文件/var/www/html/index.html: Welcome to HOSTNAME on IPADDRESS
  4. 其中,HOSTNAME 是受管节点的完全限定域名,IPADDRESS 则是受管节点的 IP 地址。
    注意:

准备个工作

  • 考试期间不需要做

完成步骤

  1. 首先使用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目录下应该已经生成好角色得目录了
  1. 根据题目要求编写任务得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'
  1. 创建题中要求的模板文件
  • 查找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 }} 
  1. 编写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-B2. 创建和运行 Ansible 临时命令

RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷

RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷

RHCE-B13. 创建Ansible密码库,使用文件内密码加密yml