RHCE考试真题

01. 安装和配置 ansible 环境

1)安装所需软件包 2)在/home/alice/ansible/inventory 文件中设置主机清单,要求: node1 属于 test01 主机组 node2 属于 test02 主机组 node3 和 node4 属于 web 主机组 node5 属于 test05 主机组 web 组属于 webtest 主机组 3)在/home/alice/ansible 目录中创建 ansible.cfg,满足以下需求: 主机清单文件为/home/alice/ansible/inventory playbook 中角色位置为/home/alice/ansible/roles
yum install -y ansible
mkdir ansible
cd ansible
vim inventory
    [test01]
    node1
    [test02]
    node2
    [web]
    node3
    node4
    [test05]
    node5
    [webtest:children]
    web
vim ansible.cfg
    [defaults]
    inventory      = ./inventory
    remote_user   = alice
    roles_path    = ./roles
    [privilege_escalation]
    become=True
    become_method=sudo
    become_user=root
    become_ask_pass=False
#测试ansible all -m ping

02. 创建和运行 Ansible 临时命令

编写脚本/home/alice/ansible/adhoc.sh,用来为所有受管机配置 2 个 yum 仓库。 仓库 1: 名称为 BASE,描述为 software base URL 为 http://study.lab0.example.com/rhel8/BaseOS GPG 签名启用 GPG 密钥 URL 为 http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release 仓库为启用状态 仓库 2: 名称为 STREAM,描述为 software stream URL 为 http://study.lab0.example.com/rhel8/AppStream GPG 签名启用 GPG 密钥 URL 为 http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release 仓库为启用状态
vim adhoc.sh
    ansible all -m yum_repository -a "name=BASE description='software base' baseurl=http://study.lab0.example.com/rhel8/BaseOS gpgcheck=1 gpgkey=http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release enabled=1"
    ansible all -m yum_repository -a "name=STREAM description='software stream' baseurl=http://study.lab0.example.com/rhel8/AppStream gpgcheck=1 gpgkey=http://study.lab0.example.com/rhel8/RPM-GPG-KEY-redhat-release enabled=1"

03. 编写剧本远程安装软件

创建名为/home/alice/ansible/tools.yml 的 playbook,能够实现以下目的: 1)将 php 和 tftp 软件包安装到 test01、test02 和 web 主机组中的主机上 2)将 RPM Development Tools 软件包组安装到 test01 主机组中的主机上 3)将 test01 主机组中的主机上所有软件包升级到最新版本
---
- hosts: test01,test02,web
  tasks:
    - yum:
        name: php,tftp
- hosts: test01
  tasks:
    - yum:
        name: "@RPM Development Tools"
    - yum:
        name: "*"
        state: latest

04. 配置计划任务

编写剧本/home/alice/ansible/jihua.yml 1)在 test02 组中的被管理主机运行 2)为用户 alice 创建计划任务: alice 用户每隔 5 分钟执行 echo "hello tarena"
---
- hosts: test02
  tasks:
    - cron:
        minute: "*/5"
        user: alice
        job: echo "hello tarena"

05.安装并使用系统角色(selinux)

安装系统角色,创建 playbook /home/alice/ansible/selinux.yml 要求满足如下条件: 1) 在所有被管理主机运行 2) 使用 selinux 角色 3) 使用角色配置强制状态运行 SElinux

---
- hosts: all
  vars:
    selinux_policy: targeted
    selinux_state: enforcing
  roles:
    - role: selinux
      become: true

06. 安装并使用系统角色(timesync)

安装 RHEL 角色软件包,并创建剧本/home/alice/ansible/timesync.yml,满足以下要求: 1)在 test01 组中的被管理主机运行 2)使用 timesync 角色 3)配置该角色,使用时间服务器 172.25.254.250,并启用 iburst 参数
---
- hosts: test01
  vars:
    timesync_ntp_servers:
      - hostname: 172.25.254.250
        iburst: yes
  roles:
    - timesync

07. 通过 galaxy 安装角色

创建剧本/home/alice/ansible/roles/down.yml,用来从以下 URL 下载角色, 并安装到/home/alice/ansible/roles 目录下: http://study.lab0.example.com/roles/haproxy.tar 此角色名为 haproxy http://study.lab0.example.com/roles/myphp.tar 此角色名为 myphp
---
- src: http://study.lab0.example.com/roles/haproxy.tar
  name: haproxy
- src: http://study.lab0.example.com/roles/myphp.tar
  name: myphp

08. 创建及使用自定义角色

根据下列要求,在/home/alice/ansible/roles 中创建名为 httpd 的角色: 1)安装 httpd 软件,并能够开机自动运行 2)开启防火墙,并允许 httpd 通过 3)使用模板 index.html.j2,用来创建/var/www/html/index.html 网页, 内容如下(HOSTNAME 是受管理节点的完全域名,IPADDRESS 是 IP 地址): Welcome to HOSTNAME on IPADDRESS 然后创建剧本 /home/alice/ansible/myrole.yml,为 webtest 主机组启用 httpd 角色。
#1.先生成httpd角色 ansible-galaxy init roles/httpd
---
- hosts: webtest
  roles:
    - httpd
#在httpd角色中template下创建相应的文件这里是index.html.j2
Welcome to {{ansible_fqdn}} on {{ansible_eth0.ipv4.address}}
#在httpd角色中tasks main.yml中写
---
- yum:
    name: httpd
- service:
    name: httpd
    state: started
    enabled: 1
- firewalld:
    service: http
    permanent: yes
    immediate: yes
    state: enabled
- template:
    src: index.html.j2
    dest: /var/www/html/index.html

09. 使用之前通过 galaxy 下载的角色

创建剧本/home/alice/ansible/web.yml,满足下列需求: 1)该剧本中包含一个 play,可以在 test05 主机组运行 haproxy 角色 (此角色已经配置好网站的负载均衡服务) 2)多次访问 http://node5.lab0.example.com 可以输出不同主机的欢迎页面 3)该剧本中包含另一个 play,可以在 webtest 主机组运行 myphp 角色 (此角色已经配置好网站的 php 页面) 4)多次访问 http://node5.lab0.example.com/index.php 也输出不同主机的欢迎页面

---
- hosts: test05
  roles:
    - haproxy
  tasks:
    - firewalld:
        service: http
        permanent: yes
        immediate: yes
        state: enabled
- hosts: webtest
  roles:
    - myphp

10. 编写剧本管理远程分区

创建剧本 /home/alice/ansible/part.yml,用来为所有受管机完成以下部署: 1)使用 vdc,创建一个分区,大小为 2000MiB 2)使用 ext4 文件系统格式化该逻辑卷 3)如果无法创建要求的大小,应显示错误信息 insufficient free space, 并改为 800MiB 4)如果 vdc 不存在,应显示错误信息 vdc not found 5)不需要挂载逻辑卷
---
- hosts: all
  tasks:
    - fail:
        msg: "vdc not found"
      when: "'vdc' not in ansible_devices"
    - block:
        - parted:
            device: /dev/vdc
            number: 1
            state: present
            part_end: 2GiB
      rescue:
        - debug:
            msg: "insufficient free space"
        - parted:
            device: /dev/vdc
            number: 1
            state: present
            part_end: 800MiB
      always:
        - filesystem:
            fstype: ext4
            dev: /dev/vdc1

11. 编写剧本远程管理逻辑卷

创建剧本 /home/alice/ansible/lvm.yml,用来为所有受管机完成以下部署: 1)在卷组 search 中创建名为 mylv 的逻辑卷,大小为 1000MiB 2)使用 ext4 文件系统格式化该逻辑卷 3)如果无法创建要求的大小,应显示错误信息 insufficient free space, 并改为 500MiB 4)如果卷组 search 不存在,应显示错误信息 VG not found 5)不需要挂载逻辑卷
---
- hosts: all
  tasks:
    - fail:
        msg: "VG not found"
      when: "'search' not in ansible_lvm.vgs"
    - block:
        - lvol:
            vg: search
            lv: mylv
            size: 1000m
      rescue:
        - debug:
            msg: "insufficient free space"
        - lvol:
            vg: search
            lv: mylv
            size: 500m    
      always:
        - filesystem:
            fstype: ext4
            dev: /dev/search/mylv

12. 根据模板部署主机文件

从 http://study.lab0.example.com/materials/newhosts.j2 下载模板文件 完成该模板文件,用来生成新主机清单(主机的显示顺序没有要求),结构如下: 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.25.254.101 node1.lab0.example.com node1 172.25.254.102 node2.lab0.example.com node2 172.25.254.103 node3.lab0.example.com node3 172.25.254.104 node4.lab0.example.com node4 172.25.254.105 node5.lab0.example.com node5 创建剧本/home/alice/ansible/newhosts.yml,它将使用上述模板在 test01 主机组的主机上 生成文件/etc/newhosts。

---
- hosts: all
- hosts: test01
  tasks:
    - template:
        src: newhosts.j2
        dest: /etc/newhosts
#需要wget 把上面给的网址给下载下来去修改
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
{% for i in groups.all %}
{{hostvars[i].ansible_eth0.ipv4.address}} {{hostvars[i].ansible_fqdn}} {{hostvars[i].ansible_hostname}}
{% endfor %}

13. 编写剧本修改远程文件内容

创建剧本 /home/alice/ansible/newissue.yml,满足下列要求: 1)在所有清单主机上运行,替换/etc/issue 的内容 2)对于 test01 主机组中的主机,/etc/issue 文件内容为 test01 3)对于 test02 主机组中的主机,/etc/issue 文件内容为 test02 4)对于 web 主机组中的主机,/etc/issue 文件内容为 Webserver
1.在主机清单里面添加
[test01:vars]
yhl=test01
[test02:vars]
yhl=test02
[web:vars]
yhl=Webserver
---
- hosts: all
  tasks:
    - copy:
        content: "{{yhl}}"
        dest: /etc/issue

14. 编写剧本部署远程 Web 目录

创建剧本/home/alice/ansible/webdev.yml,满足下列要求: 1)在 test01 主机组运行 2)创建目录/webdev,属于 webdev 组,权限为 rwxrwxr-x,具有 SetGID 特殊权限 3)使用符号链接/var/www/html/webdev 链接到/webdev 目录 4)创建文件/webdev/index.html,内容是 It's works! 5)查看 test01 主机组的 web 页面 http://node1/webdev/将显示 It's works !
---
- hosts: test01
  tasks:
    - group:
        name: webdev
    - file:
        path: /webdev
        state: directory
        mode: '2755'
        group: webdev
    - yum: 
        name: httpd
    - service:
        name: httpd
        state: started
        enabled: 1
    - firewalld:
        service: http
        permanent: yes
        immediate: yes
        state: enabled

    - file:
        src: /webdev
        dest: /var/www/html/webdev
        state: link
    - copy:
        content: "It's works!"
        dest: /webdev/index.html
    - shell: chcon -R -t httpd_sys_content_t /webdev

15. 编写剧本为受管机生成硬件报告

创建名为/home/alice/ansible/hardware.yml 的 playbook,满足下列要求: 1)使所有受管理节点从以下 URL 下载文件: http://study.lab0.example.com/materials/hardware.empty 2)并用来生成以下硬件报告信息,存储在各自的/root/hardware.txt 文件中
---
- hosts: all
  tasks:
    - get_url:
        url: http://study.lab0.example.com/materials/hardware.empty
        dest: /root/hardware.txt
    - replace:
        path: /root/hardware.txt
        regexp: "inventoryhostname"
        replace: "{{ansible_hostname}}"
    - replace:
        path: /root/hardware.txt
        regexp: "memory_in_MB"
        replace: "{{ansible_memtotal_mb}}"
    - replace:
        path: /root/hardware.txt
        regexp: "BIOS_version"
        replace: "{{ansible_bios_version}}"
    - replace:
        path: /root/hardware.txt
        regexp: "disk_vda_size"
        replace: "{{ansible_devices.vda.size}}"
    - replace:
        path: /root/hardware.txt
        regexp: "disk_vdb_size"
        replace: "{{ansible_devices.vdb.size if ansible_devices.vdb.size is defined else 'NONE'}}"

16. 创建保险库文件

创建 ansible 保险库 /home/alice/ansible/passdb.yml,其中有 2 个变量: 1)pw_dev,值为 ab1234 2)pw_man,值为 cd5678 加密和解密该库的密码是 pwd@1234,密码存在/home/alice/ansible/secret.txt 中
#passdb.yml第一个文件
pw_dev: ab1234
pw_man: cd5678

#secret.txt第二个文件
pwd@1234
#生成密钥文件
ansible-vault encrypt passdb.yml --vault-id secret.txt

17. 编写剧本为受管机批量创建用户

从以下 URL 下载用户列表,保存到/home/alice/ansible 目录下: http://study.lab0.example.com/materials/name_list.yml 创建剧本/home/alice/ansible/users.yml 的 playbook,满足下列要求: 1)使用之前题目中的 passdb.yml 保险库文件提供的密码做用户密码 2)职位描述为 dev 的用户应在 test01、test02 主机组的受管机上创建, 使用 pw_dev 变量分配密码,是补充组 devops 的成员 3)职位描述为 man 的用户应在 web 主机组的受管机上创建, 使用 pw_man 变量分配密码,是补充组 opsmgr 的成员 4)该 playbook 可以使用之前题目创建的 secret.txt 密码文件运行
---
- hosts: test01,test02
  vars_files: 
    - passdb.yml
    - name_list.yml
  tasks:
    - group:
        name: devops
    - user:
        name: "{{item.name}}"
        group: devops
        password: "{{pw_dev| password_hash('sha512')}}"
      loop: "{{users}}"
      when: item.job=='dev'
- hosts: web
  vars_files: 
    - passdb.yml
    - name_list.yml
  tasks:
    - group:
        name: opsmgr
    - user:
        name: "{{item.name}}"
        group: opsmgr
        password: "{{pw_man| password_hash('sha512')}}"
      loop: "{{users}}"
      when: item.job=='man'

18. 重设保险库密码

从以下 URL 下载保险库文件到/home/alice/ansible 目录: http://study.lab0.example.com/materials/topsec.yml 当前的库密码是 banana,新密码是 big_banana,请更新该库密码
ansible-vault rekey topsec.yml

你可能感兴趣的:(考试,linux,运维,服务器)