자격증

RHCE v9 문제풀이

ping핑이 2024. 6. 15. 22:24

EX294 Practice

1. Install and configure ansible on control node as follow

앤서블을 설치하고 다음과 같이 설정하세요.

- node1 is a member of dev host group
- node2 is a member of test host group
- node3, node4 is a member of prod host group
- node5 is a member of balancers host group
- prod group is a member of the webservers host group
- collections_path is /home/park/ansible/mycollections
- roles_path is /home/park/ansible/roles

정답:

yum install ansible-*

mkdir ansible

vi inventory

[dev]

node1

[test]

node2

[prod]

node3  
node4

[webservers:children]

prod

:wq

vi ansible.cfg

[defaults]

inventory=/home/park/ansible/inventory  
collections_path=/home/park/ansible/mycollections  
roles_path=/home/park/ansible/roles

[privilege_escalation]

become=true  
become_method=sudo  
become_user=root  
become_ask_pass=false

:wq

---

2. Create yum_repo.yml

/home/park/ansible/yum_repo.yml 플레이북을 통해서 모든 노드에 대해 다음과 같이 yum repository를 설정하세요.

- 이름은 EX294_BaseOS 입니다.
- description은 EX294 baseos software 입니다.
- 레포지토리 주소는 http://redhat.example.com/repo/BaseOS 입니다.
- gpg 확인이 활성화 됩니다.
- gpgkey 의 url은 http://redhat.example.com/rhel/rhel-gpg-key 입니다.
- 레포지토리가 활성화됩니다.

- 이름은 EX294_AppStream 입니다.
- description은 EX294 appstream software 입니다.
- 레포지토리 주소는 http://redhat.example.com/repo/Appstream 입니다.
- gpg 확인이 활성화 됩니다.
- gpgkey 의 url은 http://redhat.example.com/rhel/rhel-gpg-key 입니다.
- 레포지토리가 활성화됩니다.

정답:

vi yum_repo.yml

---  
- name: yum  
  hosts: all  
  tasks:  
  - name: Add EX294_BaseOS repository  
    yum_repository:  
      name: EX294_BaseOS  
      description: EX294 baseos software  
      baseurl: http://redhat.example.com/repo/BaseOS 
      gpgcheck: true  
      gpgkey: http://redhat.example.com/rhel/rhel-gpg-key 
      enabled: true  
  - name: Add EX294_AppStream repository  
    yum_repository:  
      name: EX294_AppStream  
      description: EX294 appstream software  
      baseurl: http://redhat.example.com/repo/AppStream 
      gpgcheck: true  
      gpgkey: http://redhat.example.com/rhel/rhel-gpg-key 
      enabled: true

:wq

ansible-playbook yum_repo.yml

---

3. Install collection

컬렉션 아티팩트를 설치하고 컬렉션을 /home/park/ansible/mycollections 에 설치하세요.

https://redhat.example.com/download/ansible-posix-1.5.1.tar.gz
https://redhat.example.com/download/community-general-5.4.0.tar.gz
https://redhat.example.com/download/redhat-rhel_system_roles-1.15.1.tar.gz

정답:

mkdir mycollections && cd mycollections

wget https://redhat.example.com/download/ansible-posix-1.5.1.tar.gz 
wget https://redhat.example.com/download/community-general-5.4.0.tar.gz 
wget https://redhat.example.com/download/redhat-rhel_system_roles-1.15.1.tar.gz

vi requirement.yml

---  
collections:  
  - name: /home/park/ansible/mycollections/ansible-posix-1.5.1.tar.gz  
  - name: /home/park/ansible/mycollections/community-general-5.4.0.tar.gz  
  - name: /home/park/ansible/mycollections/redhat-rhel_system_roles-1.15.1.tar.gz

:wq

cd ..

ansible-galaxy collection install -r requirement -p /home/park/ansible/mycollections

---

4. Install Packages

다음을 수행하는 플레이북 /home/park/ansible/packages.yml 을 생성하세요.

- php, mariadb 패키지가 dev, test 그리고 prod 호스트에 설치 됩니다.
- RPM Development Tools 패키지가 dev 호스트에 설치됩니다.
- dev 호스트의 모든 패키지가 최신버전으로 업데이트 됩니다.

정답:

vi packages.yml

---  
- name: install packages  
  hosts: dev, test, prod  
  tasks:  
    - name: install php, mariadb  
      yum:  
        name:  
          - php  
          - mariadb  
        state: present

- name: install Development Tools  
  hosts: dev  
  tasks:  
    - name: install developer tools  
      yum:  
        name: "@RPM Development Tools"  
        state: present

    - name: update all  
      yum:  
        name: '*'  
        state: latest

:wq

ansible-playbook packages.yml

---

5. role 사용

다음 동작을 수행하는 /home/park/ansible/timesync.yml 플레이북을 생성하세요.

- 모든 관리 호스트에서 동작합니다.
- timesync 역할을 사용합니다.
- NTP provider를 활성화 합니다.
- 타임 서버를 time.bora.net 로 설정합니다.
- iburst를 활성화 합니다.

정답:

vi timesync.yml

---

- name: Manage timesync with bora servers  
  hosts: all  
  vars:  
    timesync_ntp_servers:  
      - hostname: time.bora.net  
        iburst: true  
  roles:  
    - fedora.linux_system_roles.timesync

:wq

ansible-playbook timesync.yml

---

6. role 사용 2

다음 동작을 수행하는 /home/park/ansible/selinux.yml을 생성하세요.

- 모든 관리 호스트에서 동작합니다.
- selinux 역할을 사용합니다.
- 정책의 targeted으로 설정됩니다.
- 상태는 enforcing으로 설정됩니다.

정답:

vi selinux.yml

---  
- name: selinux  
  hosts: all  
  vars:  
    - selinux_policy: targeted  
    - selinux_state: enforcing  
  roles:  
    - fedora.linux_system_roles.selinux

:wq

ansible-playbook selinux.yml

---

7. roles 설치

/home/park/ansible/roles/requirements.yml 와 Ansible Galaxy 를 사용하여 역할을 /home/park/ansible/roles에 설치하세요.

http://redhat.example.com/materials/haproxy.tar 이 역할의 이름은 balancer 이여야 합니다.
http://redhat.example.com/materials/phpinfo.tar 이 역할의 이름은 phpinfo 이여야 합니다.

정답:

mkdir roles

vi roles/requirements.yml

---  
- name: balancer  
  src: http://redhat.example.com/materials/haproxy.tar

- name: phpinfo  
  src: http://redhat.example.com/materials/phpinfo.tar

:wq

ansible-galaxy install -r roles/requirements.yml -p roles/

---

8. new role 생성

다음을 수행하는 /home/park/ansible/roles/apache 역할을 생성하세요.

- httpd 가 설치되고 부팅 시 자동 실행됩니다.
- 방화벽이 활성화 되고 웹서버에 대한 접근이 허용 됩니다.
- index.html.j2 가 /var/www/html/index.html 에 생성되고 아웃풋은 다음과 같습니다.
- Welcome to HOSTNAME on IPADDRESS
- HOSTNAME 은 해당노드의 정규 도메인 이름이고 IPADDRESS는 호스트의 IP 주소입니다.
- /home/park/ansible/newrole.yml 플레이북을 통해 역할이 수행 됩니다:
- 플레이북은 webservers 호스트 그룹의 호스트에서 실행됩니다.

정답:

mkdir -p roles/apache/tasks  
mkdir -p roles/apache/templates

touch roles/apache/tasks/main.yml  
touch roles/apache/templates/index.html.j2

vi roles/apache/tasks/main.yml

---  
- name: Install httpd  
  yum:  
    name: httpd  
    state: present

- name: Start httpd  
  service:  
    name: httpd  
    enabled: true  
    state: started

- name: Enable firewalld  
  service:  
    name: firewalld  
    enabled: true  
    state: started

- name: Configure firewall for HTTP service  
  firewalld:  
    service: http  
    state: enabled  
    permanent: true  
    immediate: true

- name: Deploy index.html template  
  template:  
    src: index.html.j2  
    dest: /var/www/html/index.html

:wq

vi roles/apache/templates/index.html.j2

Welcome to {{ ansible_hostname }} on {{ ansible_default_ipv4.address }}

:wq

vi newrole.yml

---  
- name: Deploy apache role  
  hosts: webservers  
  roles:  
    - apache

:wq

ansible-playbook newrole.yml

curl http://node3  
curl http://node4

---

9. lv 생성하기

모든 노드에서 실행되는 /home/park/ansible

/lv.yml 플레이북을 만들어 다음을 수행 하십시오.

- 논리 볼륨은 research 볼륨 그룹에 생성됩니다.
- 논리 볼륨이름은 data 입니다.
- 크기는 1500 Mib 입니다.
- ext4 파일 시스템으로 논리 볼륨을 포맷합니다.
- 논리볼륨이 생성될 수 없는 경우 다음과 같은 오류 메시지가 출력됩니다.
- Could not create logical volume of that size
- 출력 후 800MiB가 대신 생성됩니다.
- 볼륨 그룹 research가 없는 경우 "Volume group does not exist" 가 출력됩니다.
- 논리 볼륨은 마운트 되지 않습니다.

정답:

vi lv.yml

---  
- name: lvcreate  
  hosts: all  
  tasks:  
    - block:  
        - name: Create a logical volume of 1500 MiB  
          lvol:  
            vg: research  
            lv: data  
            size: 1500m

        - name: Format the logical volume  
          filesystem:  
            fstype: ext4  
            dev: /dev/research/data

      rescue:  
        - debug:  
            msg: "Could not create logical volume of that size"
        
        - name: Create a logical volume of 800 MiB  
          lvol:  
            vg: research  
            lv: data  
            size: 800m

      when: ansible_devices['research'] is defined

    - debug:  
        msg: "Volume group does not exist"  
      when: ansible_devices['research'] is undefined

:wq

ansible-playbook lv.yml

---

10. hosts 파일 작성

http://redhat.example.com/material/hosts.j2 에서 초기 파일을 /home/park/ansible에 다운로드 합니다.
- 파일을 완성하여 템플릿을 준비합니다.
- /home/admin/ansible/hosts.yml로 다운로드합니다.
- /home/park/ansible/hosts.yml 플레이북은 dev 호스트 그룹의 호스트에서 /etc/myhosts 파일을 생성합니다.
- 플레이북이 실행되면 호스트에 다음과 같은 내용이 /etc/myhosts 에 저장됩니다.

정답:

127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4  
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

node1.example.com 10.40.162.24 node1  
node2.example.com 10.40.162.25 node2  
node5.example.com 10.40.162.28 node5  
node3.example.com 10.40.162.26 node3  
node4.example.com 10.40.162.27 node4

*노드의 순서는 중요하지 않습니다.

cat /etc/hosts >> hosts.j2

vi hosts.yml

---  
- name: Generate hosts file  
  hosts: dev  
  tasks:  
    - name: Create /etc/myhosts file using template  
      template:  
        src: hosts.j2  
        dest: /etc/myhosts

:wq

ansible-playbook hosts.yml  
ansible dev -m shell -a "cat /etc/myhosts"

---

11. 콘텐츠 수정하기

다음을 수행하는 /home/park/ansible/issue.yml 을 작성하세요

- 모든 관리노드에서 실행됩니다.
- /etc/issue 파일의 내용이 다음과 같이 변경됩니다.
- dev 호스트 그룹의 호스트에서는 다음과 같은 내용이 있습니다: Development
- test 호스트 그룹의 호스트에서는 다음과 같은 내용이 있습니다: Test
- prod 호스트 그룹의 호스트에서는 다음과 같이 변경됩니다: Production

정답:

vi issue.yml

---  
- name: issue  
  hosts: all  
  tasks:  
    - name: issue  
      copy:  
        dest: /etc/issue  
        content: Development  
      when: ansible_hostname in groups.dev  
    - name: issue  
      copy:  
        dest: /etc/issue  
        content: Test  
      when: ansible_hostname in groups.test  
    - name: issue  
      copy:  
        dest: /etc/issue  
        content: Production  
      when: ansible_hostname in groups.prod

:wq

ansible-playbook issue.yml

ansible all -m shell -a "cat /etc/issue"

---

12. web 컨텐츠 디렉토리 생성

다음을 수행하는 /home/park/ansible/webcontent.yml 플레이북을 생성하세요

- dev 호스트 그룹의 노드에서 실행됩니다.
- /webdev 디렉토리를 생성합니다.
- webdev 그룹이 소유합니다.
- 일반권한은 소유자 = 읽기+쓰기+실행, 그룹: 읽기+쓰기+실행, 다른사용자= 읽기+실행
- 특수권한은 그룹 ID가 설정됩니다.
- 심볼릭 링크로 /var/www/html/webdev와 /webdev 를 링크하세요.
- /webdev/index.html 파일을 생성하고 해당 파일 내용은 "Development" 입니다.
- dev 호스트그룹 노드의 리 디렉토리를 브라우징 하면 "Development" 가 출력되어야합니다.

정답:

---  
- name: Set for web  
  hosts: dev  
  tasks:  
    - name: Create directory  
      file:  
        path: /webdev  
        groups: webdev  
        mode: 2775  
        state: directory

    - name: create link  
      file:  
        src: /webdev  
        dest: /var/www/html/webdev  
        state: link

    - name: Create html file  
      copy:  
        dest: /webdev/index.html  
        content: Development  
        setype: httpd_sys_content_t

---

13. 하드웨어 보고서 작성

다음을 수행하는 /home/park/ansible/hwreport.yml 플레이북을 생성하세요.

- 모든 관리노드에서 실행됩니다.
- 다음 내용이 들어있는 /root/hwreport.txt 출력파일을 생성합니다.
- 인벤토리 호스트이름
- 총 메모리 용량(MB)
- BIOS 버전
- 디스크 장치 vda의 크기
- 디스크 장치 vdb의 크기
- 출력 파일의 각줄에는 하나의 '키 = 값' 쌍이 포함됩니다.
http://redhat.example.com/materials/hwreport.txt 에서 hwreport.txt를 /home/park/ansible에 다운로드합니다.
- /root/hwreport.txt 를 올바른 값으로 수정합니다.
- 해당 항목 값이 없으면 "NONE"이 표시됩니다.

정답:

vi hwreport.yml

---  
- name: hwreport  
  hosts: all  
  vars:  
    hw_all:  
      - hw_name: HOST  
        hw_cont: "{{ ansible_hostname | default('NONE' , true) }}"  
      - hw_name: TOTALMEM  
        hw_cont: "{{ ansible_memtotal_mb | default('NONE' , true) }}"  
      - hw_name: BIOSVER  
        hw_cont: "{{ ansible_bios_version | default('NONE' , true) }}"  
      - hw_name: vdaSIZE  
        hw_cont: "{{ ansible_devices.vda.size | default('NONE' , true) }}"  
      - hw_name: vdbSIZE  
        hw_cont: "{{ ansible_devices.vdb.size| default('NONE' , true) }}"  
  tasks:  
    - name: download hwreport.txt  
      get_url:  
        url: http://redhat.example.com/materials/hwreport.txt 
        dest: /root/hwreport.txt

    - name: write hw report  
      lineinfile:  
        path: /root/hwreport.txt  
        backrefs: true  
        regexp: "^{{ item.hw_name }}="  
        line: "{{ item.hw_name }}={{ item.hw_cont }}"  
      loop: "{{ hw_all }}"

---

14. create a password vault

다음과 같은 password 저장소를 생성합니다.

- 저장소 이름은 /home/park/ansible/locker.yml 입니다.
- 저장소의 내용은 다음과 같습니다
- pw_developer의 값은 Imadev 입니다.
- pw_manager의 값은 Imasmgr 입니다.
- 저장소를 암호화 하며 비밀번호는 whenyouwishuponstar 입니다.
- 비밀번호는 /home/park/ansible/secret.txt 에 저장됩니다.

정답:

vi secret.txt

whenyouwishuponstar

vi ansible.cfg

vault_password_path=/home/park/ansible/secret.txt

vi locker.yml

pw_developer: Imadev  
pw_manager: Imasmgr

---

15. create user accounts ( 유저 생성하기)

http://redhat.example.com/materials/user_list2.yml 를 /home/park/ansilbe 에 저장합니다.

locker.yml을 사용하여 /home/park/ansible/users.yml이라는 플레이북을 생성하여 다음과 같이 유저를 생성합니다.
- 직무가 developer인 사용자는 다음과 같이 구성됩니다.:
- dev 및 test 호스트 그룹의 관리 노드에서 생성됩니다.
- pw_developer 변수에서 비밀번호를 할당 받고, 30일 후에 비밀번호가 만료되도록 설정합니다.
- 부가 그룹 devops의 멤버가 됩니다.
- 직무가 manager인 사용자는 다음과 같이 구성됩니다.:
- prod 호스트 그룹의 관리 노드에서 생성됩니다.
- pw_manager 변수에서 비밀번호를 할당 받으며, 30일 후에 비밀번호가 만료 되도록 설정합니다.


- 부가그룹 opsmgr 멤버가 됩니다.
- 비밀번호는 SHA512 해시 형식입니다.
- /home/park/ansible/secret.txt를 사용해 작동합니다.

정답:

users.yml 내용

---  
users:  
  - name: AliceJohnson  
    job: manager  
  - name: BobSmith  
    job: developer  
  - name: CarolWilliams  
    job: manager  
  - name: DavidBrown  
    job: developer

vi users.yml

- name: create user  
  hosts: dev,test  
  vars_files:  
    - user_list.yml  
    - locker.yml

  tasks:  
    - name: Create group for developer  
      group:  
          name: devops  
          state: present

    - name: Create user for developer  
      user:  
          name: "{{ item.name }}"  
          password: "{{ pw_developer | password_hash('sha512') }}"  
          password_expire_max: 30  
          groups: devops  
          state: present  
      loop: "{{ users }}"  
      when: item.job == "developer"

- name: create user  
  hosts: prod  
  vars_files:  
    - user_list.yml  
    - locker.yml

  tasks:  
    - name: Create group for manager  
      group:  
          name: opsmgr  
          state: present

    - name: Create user for manager  
      user:  
          name: "{{ item.name }}"  
          password: "{{ pw_developer | password_hash('sha512') }}"  
          password_expire_max: 30  
          groups: opsmgr  
      loop: "{{ users }}"  
      when: item.job == "manager"

ansible-playbook user.yml

---

16. 비밀번호 재생성하기 (rekey)

기존 ansible vault를 rekey 하십시오

http://redhat.example.com/materials/salsries.yml 을 /home/park/ansible 에 다운하십시오
- 해당파일의 패스워드는 insecure4sure 입니다.
- 새로운 패스워드는 bbqw3fd980123c 입니다.
- 변경된 패스워드는 유지됩니다.

정답:

wget http://redhat.example.com/materials/salsries.yml

ansible-vault rekey --ask-vault-pass salaries.yml

---

17. cron job 생성

다음을 수행하는 /home/park/ansible/cron.yml의 플레이북을 만드세요.

유져 natasha는 2분마다 logger "EX294 in progress"를 실행하는 크론작업을 생성합니다.

정답:

---  
- name: cron job for ansible  
  hosts: all  
  tasks:  
    - name: cron natasha  
      cron:  
        name: loggercron  
        minute: '*/2'  
        user: root  
        job: logger "EX294 in progress"


'자격증' 카테고리의 다른 글

[RHCSA] 연습 환경 만들기  (0) 2025.02.25
[ RHCSA 9 ] 합격 후기  (68) 2024.04.23
[ RHCSA 9 ] 개별시험(원격시험)신청 및 준비사항  (2) 2024.04.23