RHCE-B9. 利用playbooke生成主机清单文件
Posted 白-胖-子
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RHCE-B9. 利用playbooke生成主机清单文件相关的知识,希望对你有一定的参考价值。
红帽RHCE考试下午-RHCE(RH294)
RH294任务概览
- 考试时间4个小时,6台虚拟机,15道题
- 原来通过脚本或者集群做的题现在都需要使用playbook实现
- 考试时大概有6台虚拟服务器,都已经做好了互相的免密
- 做题在ansible控制节点workstation做,但是需要去其他虚拟服务器进行验证
- 考试时需要将6台虚拟服务器在考试环境全部开启,物理机界面点击左侧按钮启动
- 考试时Ansible所有playbook都放在普通用户目录中且都以普通用户执行
- 注意:考试时一定注意要求将playbook放在指定用户的家目录中,用指定的用户登录做题!
- 注意:考试的判分方式通过普通用户远程执行指定目录下的playbook或者脚本,如果使用root做题,则没有权限就是零分
9. 利用playbooke生成主机清单文件
- 使用playbook在所有主机组生成指定格式的文件
任务要求
- 将一个初始模板文件从 http://172.25.250.250/ansible2.8/fifiles/hosts.j2 下载到 /home/student/ansible
- 完成该模板,以便用它生成以下文件:针对每个清单主机包含一行内容,其格式与 /etc/hosts 相同创建名为 /home/student/ansible/hosts.yml 的 playbook,
- 它将使用此模板在 dev 主机组中的主机上生成文件 /etc/myhosts。
- 该 playbook 运行后,dev 主机组中主机上的文件/etc/myhosts 应针对每个受管主机包含一行内容:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.24.1.6 servera.lab1.example.com servera
172.24.1.7 serverb.lab1.example.com serverb
172.24.1.8 serverc.lab1.example.com serverc
172.24.1.9 serverd.lab1.example.com serverd 172.24.1.10 bastion.lab1.example.com bastion
注意:主要是考察ansible内部变量的使用
准备个工作
- 我们没有 hosts.j2 模板,如果修改模板需要添加一下内容,考试也需要添加的
[student@workstation ansible]$ wget http://172.25.250.250/ansible2.8//hosts.j2
[student@workstation ansible]$ vim hosts.j2
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
## 考试的时候只有上面的内容,没有下面的内容
#考试需要添加一下内容
{% for host in groups.all %}
{{ hostvars[host].ansible_enp1s0.ipv4.address }}{{ hostvars[host].ansible_fqdn }} {{ hostvars[host].ansible_hostname }}
{% endfor %}
完成步骤
- 考试的时候先把模板文件下载下来,放到指定的目录中去
[student@workstation ansible]$ wget http://172.25.250.250/ansible2.8//hosts.j2
- 查看文件内容并发现规律
- 第一部分是主机的IP地址
hostvars[host].ansible_enp1s0.ipv4.address
- 第二部分是主机的完整域名
hostvars[host].ansible_fqdn
- 第三部分是主机的主机名
hostvars[host].ansible_hostname
- 我们写一个循环用来生成要求格式的内容,用到的都是setup变量,通过
ansible servera -m setup > setup.log
获取
{% for host in groups.all %} ## groups.all是ansible的内置变量
{{ hostvars[host].ansible_enp1s0.ipv4.address }} {{ hostvars[host].ansible_fqdn }} {{ hostvars[host].ansible_hostname }}
{% endfor %}
注意:在之前题目中安装过的role觉得目录中是存在类似模板文件见的,比如之前的apache角色,可以找到类似德模板文件进行参考
- 将写好的循环添加到下载的模板中去
[student@workstation ansible]$ vim hosts.j2
- 在/home/student/ansible目录下创建名为hosts.yml的playbook,
它将使用此模板在dev主机组中的主机上生成/etc/myhosts文件
[student@workstation ansible]$ vim hosts.yml
---
## 先执行空的play,用来获取所有主机的内容
- name: gather facts
hosts: all
## 使用template模块根据模板部署文件
- name: config myhosts
hosts: dev
tasks:
- template:
src: hosts.j2 ## 模板源文件和playbook在同一目录下,则可以直接写文件名
dest: /etc/myhosts
- 做完以后随便找台服务器登录上去确认一下,是否和题中要求的一样
考察的知识点
template 模板
- 模板是一个文本文件,可以做为生成文件的模版,并且模板文件中还可嵌套jinja2语法
- template中也可以使用流程控制 for 循环和 if 条件判断,实现动态生成文件功能
{% for i in EXPR %}
...
{% endfor %}
## 示例:
{% for i in range(1,10) %}
server_name web{{i}};
{% endfor %}
template 模块
- template使用了Jinjia2格式作为文件模版,进行文档内变量的替换的模块。它的每次使用都会被ansible标记为”changed”状态。
- 通过template模块,可以根据内置变量或者循环和判断的模板文件生成不同的目标文件。
#temlnginx2.yml
---
- hosts: websrvs
remote_user: root
vars:
nginx_vhosts:
- 81
- 82
- 83
tasks:
- name: template config
template: src=nginx.conf2.j2 dest=/data/nginx.conf
#templates/nginx.conf2.j2
{% for vhost in nginx_vhosts %}
server {
listen {{ vhost }}
}
{% endfor %}
ansible-playbook -C templnginx2.yml --limit 10.0.0.8
#生成的结果:
server {
listen 81
}
server {
listen 82
}
server {
listen 83
}
以上是关于RHCE-B9. 利用playbooke生成主机清单文件的主要内容,如果未能解决你的问题,请参考以下文章
RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告
RHCE-B10. 利用playbook在不同主机组修改文件内容
RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷
RHCE-B8. 利用playbook在指定主机组创建和使用逻辑卷