ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RHCE-B12. 利用playbook生成所有清单主机指定硬件信息报告

2021-10-12 14:31:30  阅读:211  来源: 互联网

标签:hwreport setup filter ansible B12 playbook txt root RHCE


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

RH294任务概览

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

12. 利用playbook生成所有清单主机指定硬件信息报告

  • 创建一个名为 /home/student/ansible/hwreport.yml 的 playbook,
  • 它将在所有受管节点上生成含有以下信息的输出文件 /root/hwreport.txt:

任务要求

  • 输出文件 /root/hwreport.txt
  1. hostname: inventoryhostname
  2. mem: memory_in_MB
  3. bios: BIOS_version
  4. vda: disk_vda_size
  5. vdb: disk_vdb_size
  • 输出文件中的每一行含有一个 key=value 对。
  • playbook 应当从 http://content.example.com/fifiles/hwreport.empty 下载文件,并将它保存为/root/hwreport.txt
  • 使用正确的值修改 /root/hwreport.txt
  • 如果硬件项不存在,相关的值应设为NONE

注意:

准备个工作

  • 考试期间不需要做
  • ##这个 hwreport.empty 文件我们没有可以自己定义一个
hostname: inventoryhostname 
mem: memory_in_MB
biso: BIOS_version 
asize: disk_vda_size 
bsize: disk_vdb_size
  • 也可以通过playbook创建,就当练习了
vim hwreport_empty.yml
---
- name: Create empty file  
   hosts: dev  
       tasks:          
           - name: Create file            
              copy:                    
                  content: "hostname: inventoryhostname\nmem: memory_in_MB\nbiso: BIOS_version\nasize: disk_vda_size\nbsize: disk_vdb_size\n"
                  dest: /webdev/hwreport.empty
                  setype: httpd_sys_content_t
  • 要求将这个模板文件下载到各个主机上面去,并且模板中内容中的值要显示各个主机中的不同相关内容

完成步骤

  • 考试的时候先试试能不能下载
    wget http://content.example.com/fifiles/hwreport.empty
  • 写playbook
  1. 先用get_url模块进行下载
  2. 再用replace模块将下载到的文件进行内容的替换
    注意:通过ansible servera -m debug -a 'msg="{{ hostvars}}"'显示主机inventoryhostname信息查找对应变量名
    注意:通过ansible servera -m setup >setup.info"'显示主机硬件信息信息查找对应变量名
    注意:通过 if 条件判断,is是一个测试关键词,相当于判断是否存在,defined是ansible里的测试符号
[student@workstation ansible]$ vim hwreport.yml
---
- name: Get hwreport info 
  hosts: all
  tasks:
    - name: Create report file 
      get_url:
        url: http://content.example.com/files/hwreport.empty 
        dest: /root/hwreport.txt
    - name: Get inventory_hostname 
      replace:
        path: /root/hwreport.txt 
        regexp: 'inventoryhostname'
        replace: '{{ inventory_hostname }}'
    - name: Get memory total size 
      replace:
        path: /root/hwreport.txt 
        regexp: 'memory_in_MB'
        replace: "{{ ansible_memtotal_mb | string}}" ## 内存大小是个数值,替换成字符串进行输出
    - name: Get bios version 
      replace:
        path: /root/hwreport.txt 
        regexp: 'BIOS_version'
        replace: "{{ ansible_bios_version }}"
    - name: Get disk vda size 
      replace:
        path: /root/hwreport.txt 
        regexp: 'disk_vda_size'
        replace: "{{ ansible_devices.vda.size if ansible_devices.vda is defined else 'NONE' }}" ## 对变量是否存在进行条件判断
    - name: Get disk vdb size 
      replace:
      path: /root/hwreport.txt 
      regexp: 'disk_vdb_size'
      replace: "{{ ansible_devices.vdb.size if ansible_devices.vdb is defined else 'NONE' }}"
[student@workstation ansible]$ ansible-playbook hwreport.yml
  • 验证
    for i in server{a..d} bastion;do ssh@$i "cat /root/hwreport.txt";done
    ansible all -m shell -a "cat /root/hwreport.txt"

  • 有时间的话再挨个登陆上去测试一下子

#验证
[root@bastion ~]# cat /root/hwreport.txt
hostname: bastion
mem: 821
bios: 1.11.1-4.module+el8.1.0+4066+0f1aadab 
vda: 10.00 GB
vdb: NONE 
[root@serverb ~]# cat hwreport.txt 
hostname: serverb
mem: 821
bios: 1.11.1-4.module+el8.1.0+4066+0f1aadab 
vda: 10.00 GB
vdb: 5.00 GB

考察的知识点

ansible get_url模块

  • 功能: 用于将文件从http、https或ftp下载到被管理机节点上
url: 下载文件的URL,支持HTTP,HTTPS或FTP协议
dest: 下载到目标路径(绝对路径),如果目标是一个目录,就用服务器上面文件的名称,如果目标设置了名称就用目标设置的名称
owner: 指定属主
group: 指定属组
mode: 指定权限
force: 如果yes,dest不是目录,将每次下载文件,如果内容改变,替换文件。如果否,则只有在目标不存在时才会下载该文件
checksum: 对目标文件在下载后计算摘要,以确保其完整性
##示例: checksum="sha256:D98291AC[...]B6DC7B97",
checksum="sha256:http://example.com/path/sha256sum.txt"
url_username: 用于HTTP基本认证的用户名。 对于允许空密码的站点,此参数可以不使用`url_password'
url_password: 用于HTTP基本认证的密码。 如果未指定`url_username'参数,则不会使用`url_password'参数
validate_certs: 如果“no”,SSL证书将不会被验证。 适用于自签名证书在私有网站上使用
timeout: URL请求的超时时间,秒为单位

ansible replace模块

  • 该模块有点类似于sed命令,主要也是基于正则进行匹配和替换,可以灵活的修改文件中的内容
• path:必须参数,指定要修改的文件,2.3版本之前,这个参数叫dest、destfile、name;现在这三个名称是path参数的别名
• regexp:必须参数,查找的内容,指定一个正则表达式,可以是python正则
• replace:替换后的内容,替换regexp参数匹配到的字符串,
• owner:结果文件或目录的所属用户名,相当于chown命令修改
• group:结果文件或目录的所属组名,相当于chown命令修改
• mode:结果文件或目录的权限,与chmod命令不一致的是,replace模块的mode参数需要添加前导零,以便ansible的YAML解析器知道它是八进制;1.8版本后可以设置为符号模式(u+rwx或u=rw),2.6版本后可以是特殊字符串(preserve),当设置为’preserve’时,文件将被赋予与源文件相同的权限。
• others:可以指定file模块的所有参数
• encoding:用于读取和写入文件的字符编码
• before:如果指定,则仅替换/删除此匹配之前的内容,可以和after参数结合使用
• after:如果指定,则仅替换/删除此匹配之后的内容,可以和before参数结合使用
• attributes:结果文件或目录的特殊属性,相当chattr,默认使用=运算符,指定文件或目录的某项属性
• backup:修改源文件前创建一个包含时间戳信息的备份文件

Ansible Setup 模块

  • 功能: setup 模块来收集主机的系统信息,这些 facts 信息可以直接以变量的形式使用
ansible all -m setup > setup.info
ansible all -m setup -a "filter=ansible_nodename"
ansible all -m setup -a "filter=ansible_hostname"
ansible all -m setup -a "filter=ansible_domain"
ansible all -m setup -a "filter=ansible_memtotal_mb"
ansible all -m setup -a "filter=ansible_memory_mb"
ansible all -m setup -a "filter=ansible_memfree_mb"
ansible all -m setup -a "filter=ansible_os_family"
ansible all -m setup -a "filter=ansible_distribution_major_version"
ansible all -m setup -a "filter=ansible_distribution_version"
ansible all -m setup -a "filter=ansible_processor_vcpus"
ansible all -m setup -a "filter=ansible_all_ipv4_addresses"
ansible all -m setup -a "filter=ansible_architecture"
ansible all -m setup -a "filter=ansible_uptime_seconds"
ansible all -m setup -a "filter=ansible_processor*"
ansible all -m setup -a 'filter=ansible_env'

Ansible 变量引用

  • Ansible 使用 “{{ var }}” 来引用变量. 如果一个值以 “{” 开头, YAML 将认为它是一个字典, 所以我们必须像这样引用它
    foo: "{{ variable }}"

标签:hwreport,setup,filter,ansible,B12,playbook,txt,root,RHCE
来源: https://blog.csdn.net/timonium/article/details/120722692

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有