리눅스/자격증

[RHCE] RHCE (EX294) 문제 풀이 - 1

ㅎㄷㄹㅁㅇ 2025. 11. 28. 17:41
반응형

RHCE (EX294) 시험 준비

RHCE (Red Hat Certified Engineer) EX294 시험 준비를 위한 문제 풀이입니다.

 

이 글을 작성하는 이유는 더 많은 사람들이 시험에 합격하길 바라는 마음에 작성했습니다. 이전 합격 후기에 문제 공유가 가능하냐는 댓글이 많아 작성했습니다. 해당 글은 문제가 있을 경우 삭제하겠습니다.

 

문제 풀이에 틀린 내용이 있을 수 있으며, 아래 풀어드린 내용을 이해하고 접근하시면 쉽게 문제 풀이가 가능 할 것으로 보입니다.

 

저는 동일한 내용을 5~10번 정도 보지않고 푼 뒤에 시험을 봤습니다.

 

아래 문제 풀이에 사용된 패키지 및 파일은 공유가 어렵습니다. (구글에 파일이름으로 찾으면 나옵니다. Git 등)

 

 

 

 

시험 정보

  • 시험 시간: 4시간
  • 서버 구성: Controller 1대, Node 5대 (총 6대)
  • 주요 평가 요소:
    • ansible-doc 명령어 활용 능력
    • Jinja2 변수 사용 능력
    • Ansible playbook 작성 능력

 

시험 포인트 체크리스트

  • Ansible 설치 및 구성
  • yum 저장소 생성
  • Collection 설치
  • 패키지 설치
  • Ansible 역할 사용하기
  • Ansible Galaxy를 사용하여 역할 설치하기
  • 역할 생성 및 사용하기
  • Logical Volume (LV) 생성 및 사용하기
  • Hosts 파일 생성하기
  • 파일 내용 수정하기
  • Web 컨텐츠 디렉토리 생성하기
  • 하드웨어 보고서 생성하기
  • 비밀번호 보관소 생성하기
  • 사용자 계정 생성하기
  • Ansible Vault 재키 생성하기
  • 크론작업 설정하기

 

💡 시험 전 꼭 알아야 할 팁

구분 내용
환경 ctrl 서버의 local repository는 이미 구성되어 있음
주의사항 문제에서 요청하는 내용 그대로 진행 (파일 이름 정확히 확인!)
OS 설정 문제에서 요청하는 것 이외에는 OS 설정 정보 수정 불필요
멱등성 Ansible은 멱등성 성질이 있어 반복 수행해도 무방
핵심 역량 ansible-doc 명령어와 Jinja2 변수 활용이 당락 결정
터미널 구성 3~4개 터미널 사용 권장

 

 

터미널 구성 권장사항

  1. 1번 터미널: ctrl 작업 터미널
  2. 2번 터미널: ansible-doc 명령어 전용
  3. 3번 터미널: 메모장 (URL, 비밀번호 등)
  4. 4번 터미널 (선택): 추가 작업용

 

ansible-doc 활용법

# 사용 가능한 모든 모듈 확인
ansible-doc --list

# 특정 모듈 설명 확인
ansible-doc 모듈명

 

🔥Tip

# ansible node1 -m setup 결과를 미리 파일로 저장해두면 변수 찾기가 빨라집니다
ansible node1 -m setup > /home/admin/ansible/node1_facts.txt

 

 


 

 

시험 환경 구성

 

서버 구성도

Hostname IP FQDN
repo 192.168.59.100 rhgls.domain1.example.com
Controller 192.168.59.130 ctrl.example.com
Node1 192.168.59.131 node1.example.com
Node2 192.168.59.132 node2.example.com
Node3 192.168.59.133 node3.example.com
Node4 192.168.59.134 node4.example.com
Node5 192.168.59.135 node5.example.com

1️⃣ 기본 패키지 설치

Controller 서버

yum install vim bash-completion wget

 

 

Node 서버 (1~5)

yum install vim bash-completion wget lvm2

 

 

2️⃣ /etc/hosts 설정

모든 서버에 동일하게 적용:

cat << 'EOF' >> /etc/hosts
192.168.59.100 repo rhgls.domain1.example.com
192.168.59.130 ctrl ctrl.example.com
192.168.59.131 node1 node1.example.com
192.168.59.132 node2 node2.example.com
192.168.59.133 node3 node3.example.com
192.168.59.134 node4 node4.example.com
192.168.59.135 node5 node5.example.com
EOF

 

 

3️⃣ Controller 서버 Local Repository 구성

cat << 'EOF' > /etc/yum.repos.d/local.repo
[BaseOS]
name=BaseOS
baseurl=http://rhgls.domain1.example.com/os/BaseOS
enabled=1
gpgcheck=0

[AppStream]
name=AppStream
baseurl=http://rhgls.domain1.example.com/os/AppStream
enabled=1
gpgcheck=0

[Ansible]
name=Ansible
baseurl=http://rhgls.domain1.example.com/ansible
enabled=1
gpgcheck=0
EOF

yum clean all
yum repolist all

 

 

4️⃣ admin 계정 생성 (모든 서버)

# admin 계정 생성
useradd -G wheel admin
passwd admin
# 비밀번호: admin

# sudoers 설정
vim /etc/sudoers
# 다음 라인 추가 또는 주석 해제:
%wheel  ALL=(ALL)       NOPASSWD:ALL

# admin 계정으로 전환
su - admin

 

 

 

5️⃣ SSH Key 설정 (Controller에서만)

# Controller에서 실행
ssh-keygen  # 모두 Enter로 기본값 사용

# Node 서버들에 SSH Key 복사
ssh-copy-id admin@node1
ssh-copy-id admin@node2
ssh-copy-id admin@node3
ssh-copy-id admin@node4
ssh-copy-id admin@node5

# 접속 테스트
ssh admin@node1

 

 

6️⃣ Repo 서버 구성 (시험 환경에서 제공)

참고: 실제 시험에서는 Repo 서버가 이미 구성되어 있습니다. 참고용으로만 확인하세요.

# HTTP 서버 설치 및 시작
systemctl enable --now httpd

# DocumentRoot 경로 확인/변경
vim /etc/httpd/conf/httpd.conf
# DocumentRoot "/var/www"

# ISO 마운트
mkdir /var/www/os
mount /dev/sr0 /var/www/os

# Ansible 패키지 업로드 및 Repository 생성
mkdir /var/www/ansible
# ansible-2.9.27-1.el8ae.noarch.rpm 등 복사
createrepo /var/www/ansible/

# 시험 자료 업로드
mkdir /var/www/materials
# 필요한 파일들 업로드

 

 


 

 

문제 및 풀이

문제 1. Ansible 설치 및 구성

📌 문제

제어 노드 control_domain1.example.com에 Ansible을 다음과 같이 구성하시오:

  • 필요한 패키지 설치
  • /home/admin/ansible/inventory 정적 인벤토리 파일 생성
    • node1은 dev 호스트 그룹
    • node2는 test 호스트 그룹
    • node3, node4는 prod 호스트 그룹
    • node5는 balancers 호스트 그룹
    • prod 그룹은 webservers 호스트 그룹의 구성원

✅ 풀이

# 1. Ansible 패키지 설치
sudo dnf -y install ansible-*

# 2. 작업 디렉토리 생성
su - admin
mkdir /home/admin/ansible
cd /home/admin/ansible

# 3. ansible.cfg 복사 및 수정
cp /etc/ansible/ansible.cfg /home/admin/ansible/ansible.cfg

vim ansible.cfg

 

 

ansible.cfg 설정 내용:

[defaults]
inventory      = /home/admin/ansible/inventory
roles_path    = /home/admin/ansible/roles
remote_user = admin

[privilege_escalation]
become=True
become_method=sudo
become_user=root
become_ask_pass=False

 

 

inventory 파일 작성:

vim inventory
[dev]
node1

[test]
node2

[prod]
node3
node4

[balancers]
node5

[webservers:children]
prod

 

 

테스트:

ansible all -m ping

 

💡 Tip

  • ansible과 ansible-core 패키지 간 ansible.cfg 파일 구조가 다르니 주의
  • /home/admin/ansible/ansible.cfg에 설정하지 않으면 0점 처리
  • inventory 파일 경로가 정확한지 반드시 확인

문제 2. yum 저장소 생성

📌 문제

/home/admin/ansible/yum_repo.yml 플레이북을 생성하여 각 관리 노드에 다음 yum 저장소를 만드시오:

Repository 1:

  • 저장소 이름: EX294_BASE
  • 설명: EX 294 base software
  • Base URL: http://rhgls.domain1.example.com/os/BaseOS
  • GPG 서명 확인: 활성화
  • GPG 키 URL: http://rhgls.domain1.example.com/os/RHEL/RPM-GPG-KEY-redhat-release
  • 저장소: 활성화

Repository 2:

  • 저장소 이름: EX294_STREAM
  • 설명: EX 294 stream software
  • Base URL: http://rhgls.domain1.example.com/os/AppStream
  • GPG 서명 확인: 활성화
  • GPG 키 URL: http://rhgls.domain1.example.com/os/RHEL/RPM-GPG-KEY-redhat-release
  • 저장소: 활성화

✅ 풀이

방법 1: Ad-hoc 명령어 (adhoc.sh 파일 요구 시)

vim adhoc.sh
#!/bin/bash
ansible all -m yum_repository -a 'file=external_base name=EX294_BASE description="EX 294 base software" baseurl=http://rhgls.domain1.example.com/os/BaseOS enabled=1 gpgcheck=0'
ansible all -m yum_repository -a 'file=external_stream name=EX294_STREAM description="EX 294 stream software" baseurl=http://rhgls.domain1.example.com/os/AppStream enabled=1 gpgcheck=0'
chmod 744 adhoc.sh
./adhoc.sh

 

 

방법 2: Playbook (yum_repo.yml 파일 요구 시)

vim yum_repo.yml
---
- name: Configure yum repositories
  hosts: all
  tasks:
    - name: Add BaseOS repository
      yum_repository:
        name: EX294_BaseOS
        description: EX294 BaseOS software
        file: external
        baseurl: http://rhgls.domain1.example.com/os/BaseOS
        gpgcheck: yes
        gpgkey: http://rhgls.domain1.example.com/os/RHEL/RPM-GPG-KEY-redhat-release
        enabled: yes

    - name: Add AppStream repository
      yum_repository:
        name: EX294_AppStream
        description: EX294 AppStream software
        file: external
        baseurl: http://rhgls.domain1.example.com/os/AppStream
        gpgcheck: yes
        gpgkey: http://rhgls.domain1.example.com/os/RHEL/RPM-GPG-KEY-redhat-release
        enabled: yes

 

 

실행 및 확인:

ansible-playbook yum_repo.yml

# 확인
ansible all -m shell -a 'cat /etc/yum.repos.d/external.repo'
ansible all -m shell -a 'yum repoinfo'

 

💡 Tip

  • file 파라미터로 저장소 파일명 지정 가능
  • gpgcheck 설정은 문제에서 요구하는 대로 정확히 설정
  • 실행 후 반드시 각 노드에서 저장소 파일이 생성되었는지 확인

문제 3. Collection 설치

📌 문제

http://rhgls.domain1.example.com/materials에서 다음 컬렉션을 /home/admin/ansible/mycollections에 설치하시오:

  • redhat-rhel_system_roles-1.15.1.tar.gz
  • ansible-posix-1.5.1.tar.gz
  • community-general-5.4.0.tar.gz

✅ 풀이

# 1. 디렉토리 생성
mkdir -p /home/admin/ansible/mycollections
cd /home/admin/ansible/mycollections

# 2. 컬렉션 파일 다운로드
wget http://rhgls.domain1.example.com/materials/redhat-rhel_system_roles-1.15.1.tar.gz
wget http://rhgls.domain1.example.com/materials/ansible-posix-1.5.1.tar.gz
wget http://rhgls.domain1.example.com/materials/community-general-5.4.0.tar.gz

 

방법 1: 개별 설치

ansible-galaxy collection install /home/admin/ansible/mycollections/redhat-rhel_system_roles-1.15.1.tar.gz -p /home/admin/ansible/mycollections
ansible-galaxy collection install /home/admin/ansible/mycollections/ansible-posix-1.5.1.tar.gz -p /home/admin/ansible/mycollections
ansible-galaxy collection install /home/admin/ansible/mycollections/community-general-5.4.0.tar.gz -p /home/admin/ansible/mycollections

 

 

 

방법 2: requirements.yml 사용 (권장)

vim requirements.yml
---
collections:
  - name: /home/admin/ansible/mycollections/redhat-rhel_system_roles-1.15.1.tar.gz
  - name: /home/admin/ansible/mycollections/ansible-posix-1.5.1.tar.gz
  - name: /home/admin/ansible/mycollections/community-general-5.4.0.tar.gz
ansible-galaxy collection install -r requirements.yml -p /home/admin/ansible/mycollections

# 설치 확인
ansible-galaxy collection list

 

💡 Tip

  • ansible.posix는 MANIFEST.JSON 대신 galaxy.yml을 사용하는 경우가 있어 설치 방법이 다를 수 있음
  • 설치 후 ansible-galaxy collection list로 경로별 설치 내역 확인
  • 이 문제는 실제 시험에서 독립 문제로 나오지 않을 수 있음

문제 4. 패키지 설치

📌 문제

/home/admin/ansible/packages.yml 플레이북을 생성하여:

  • dev, test, prod 호스트 그룹에 php, mariadb 패키지 설치
  • dev 호스트 그룹에 RPM Development Tools 패키지 그룹 설치
  • dev 호스트 그룹의 모든 패키지를 최신 버전으로 업데이트

✅ 풀이

vim /home/admin/ansible/packages.yml
---
- name: Install packages on dev, test, and prod
  hosts:
    - dev
    - test
    - prod
  become: true
  tasks:
    - name: Install php and mariadb
      yum:
        name:
          - php
          - mariadb-server
        state: latest

- name: Install development packages on dev
  hosts: dev
  become: true
  tasks:
    - name: Install RPM Development Tools
      yum:
        name: "@RPM Development Tools"
        state: latest

    - name: Update all packages
      yum:
        name: '*'
        state: latest

 

 

실행 및 확인:

ansible-playbook packages.yml

# 확인
ansible all -m shell -a 'rpm -qa | grep -i maria'
ansible all -m shell -a 'rpm -qa | grep -i php'
ansible dev -m shell -a 'yum grouplist'

 

💡 Tip

  • 패키지 그룹은 "@그룹명" 형식으로 지정
  • state: latest는 최신 버전 설치/업데이트
  • 여러 호스트 그룹을 대상으로 할 때는 리스트 형태로 지정 가능

문제 5. SELinux Role 사용하기

📌 문제

/home/admin/ansible/selinux.yml 플레이북을 생성하여:

  • 모든 관리 노드에서 실행
  • selinux role 사용
  • SELinux 정책을 targeted로 구성
  • SELinux 상태를 enforcing으로 설정

✅ 풀이

# 1. rhel-system-roles 패키지 설치
sudo dnf install rhel-system-roles

# 2. playbook 작성
vim ~/ansible/selinux.yml
---
- hosts: all
  become: true
  vars:
    - selinux_policy: targeted
    - selinux_state: enforcing
  roles:
    - rhel-system-roles.selinux

 

 

실행 및 확인:

# 실행 전 상태 확인
ansible all -m shell -a 'getenforce'

# playbook 실행
ansible-playbook selinux.yml

# 실행 후 상태 확인
ansible all -m shell -a 'getenforce'

 

💡 Tip

  • Collections를 설치하지 않았다면 rhel-system-roles 패키지를 수동 설치해야 함
  • role 이름은 정확히 rhel-system-roles.selinux 형식으로 사용
  • vars에 지정한 변수명은 해당 role의 문서를 참고 (ansible-doc 활용)

문제 6. Ansible Galaxy를 사용하여 역할 설치

📌 문제

/home/admin/ansible/roles/requirements.yml 파일을 사용하여 다음 URL에서 역할을 다운로드하고 /home/admin/ansible/roles에 설치하시오:

✅ 풀이

# 1. roles 디렉토리 생성
mkdir -p ~/ansible/roles

# 2. requirements.yml 작성
vim ~/ansible/roles/requirements.yml
---
- name: balancer
  src: http://rhgls.domain1.example.com/materials/haproxy.tar

- name: phpinfo
  src: http://rhgls.domain1.example.com/materials/phpinfo.tar
# 3. role 설치
ansible-galaxy role install -r ~/ansible/roles/requirements.yml -p /home/admin/ansible/roles/

# 4. 설치 확인
ls -al /home/admin/ansible/roles

 

💡 Tip

  • ansible-galaxy role install 명령어 사용 (collection이 아님에 주의)
  • -p 옵션으로 설치 경로 지정
  • src는 URL, 로컬 파일 경로, Galaxy 저장소 이름 등 다양하게 지정 가능
  • 역할 이름은 name으로 지정

문제 7. Apache Role 생성 및 사용

📌 문제

/home/admin/ansible/roles/apache 역할을 생성하고 다음 요구사항을 충족하시오:

  • httpd 패키지 설치, 부팅 시 자동 시작, 서비스 시작
  • 방화벽 활성화 및 웹 서버 액세스 허용 규칙 설정
  • index.html.j2 템플릿으로 /var/www/html/index.html 생성
    • 내용: Welcome to HOSTNAME on IPADDRESS
    • HOSTNAME: 관리 노드의 FQDN
    • IPADDRESS: 관리 노드의 IP 주소
  • /home/admin/ansible/newrole.yml 플레이북 생성
    • webservers 호스트 그룹에서 실행

✅ 풀이

# 1. role 구조 생성
cd ~/ansible
ansible-galaxy init roles/apache

# 2. tasks/main.yml 작성
vim ~/ansible/roles/apache/tasks/main.yml
---
# tasks file for apache
- name: Install httpd
  yum:
    name: httpd
    state: latest

- name: Start and enable httpd service
  service:
    name: httpd
    enabled: yes
    state: started

- name: Start and enable firewalld service
  service:
    name: firewalld
    enabled: yes
    state: started

- name: Add http service to firewalld
  firewalld:
    service: http
    state: enabled
    permanent: yes
    immediate: yes

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

 

# 3. index.html.j2 템플릿 작성
vim ~/ansible/roles/apache/templates/index.html.j2
Welcome to {{ ansible_fqdn }} on {{ ansible_default_ipv4.address }}
# 4. newrole.yml playbook 작성
vim ~/ansible/newrole.yml
---
- name: Deploy Apache webserver role
  hosts: webservers
  become: true
  roles:
    - apache
# 5. 실행 및 확인
ansible-playbook newrole.yml

# prod 그룹(webservers) 결과 확인
curl node3
curl node4

 

 

💡 Tip

  • Jinja2 변수 찾기: ansible node3 -m setup | grep -i fqdn 또는 less로 확인
  • 주요 Ansible facts:
    • ansible_fqdn: Fully Qualified Domain Name
    • ansible_default_ipv4.address: 기본 IPv4 주소
    • ansible_hostname: 호스트명
  • firewalld의 immediate: yes는 즉시 적용을 의미

문제 8. Ansible Galaxy Role 사용하기

📌 문제

/home/admin/ansible/roles.yml 플레이북을 생성하여:

balancers 호스트 그룹:

  • balancer role 사용
  • webservers 호스트 그룹 간 웹 서버 로드 밸런싱 구성
  • http://node5.domain1.example.com/ 접속 시:
    • Welcome to node3.domain1.example.com on 172.24.1.8
    • 새로고침 시: Welcome to node4.domain1.example.com on 172.24.1.9

webservers 호스트 그룹:

  • phpinfo role 사용
  • /hello.php 접속 시:
    • Hello PHP World from FQDN
    • 예: Hello PHP World from node3.domain1.example.com
    • PHP 버전 및 구성 정보 표시

✅ 풀이

사전 작업 (실제 시험에서는 불필요):

# balancer role의 defaults/main.yml 수정
vim /home/admin/ansible/roles/balancer/defaults/main.yml
haproxy_backend_servers:
  - name: node3
    address: 192.168.59.133:80
  - name: node4
    address: 192.168.59.134:80
# node5 방화벽 설정
ansible node5 -m shell -a 'firewall-cmd --add-service=http'
ansible node5 -m shell -a 'firewall-cmd --runtime-to-permanent'

 

 

roles.yml 작성:

vim ~/ansible/roles.yml
---
- hosts: webservers
  become: true
  roles:
    - phpinfo

- hosts: balancers
  become: true
  roles:
    - balancer

 

 

실행 및 확인:

ansible-playbook roles.yml

# balancers 로드 밸런싱 확인
curl node5
curl node5  # 다시 실행하면 다른 노드로 연결

# phpinfo 확인
curl node3/hello.php
curl node4/hello.php

 

💡 Tip

  • haproxy_backend_servers 변수는 balancer role의 defaults 또는 playbook vars에서 정의
  • 실제 시험에서는 role이 이미 올바르게 구성되어 있을 가능성이 높음
  • gather_facts: true가 필요한 경우 playbook 상단에 명시

문제 9. Logical Volume 생성 및 사용

📌 문제

모든 관리 노드에서 실행되는 /home/admin/ansible/lv.yml 플레이북을 생성하여:

  • research 볼륨 그룹에 논리 볼륨 생성
    • 논리 볼륨 이름: data
    • 크기: 1500 MiB
  • ext4 파일시스템으로 포맷
  • 1500 MiB 생성 불가 시:
    • 에러 메시지: "Could not create logical volume of that size" 출력
    • 800 MiB로 재생성
  • research 볼륨 그룹이 없는 경우:
    • 에러 메시지: "Volume group does not exist" 출력
  • 논리 볼륨 마운트하지 않음

✅ 풀이

사전 작업 (테스트 환경 구성):

# lvm2 패키지 설치 (모든 노드)
cat << 'EOF' > packages2.yml
---
- name: Install lvm2 package
  hosts: all
  become: true
  tasks:
    - name: Install lvm2
      yum:
        name:
          - lvm2
        state: latest
EOF

ansible-playbook packages2.yml

# 디스크 추가 (각 노드에 /dev/sdb 추가)
# node1-3: 2GB, node4-5: 1GB

# PV 및 VG 생성 (node1-4만)
ansible node1,node2,node3,node4 -m shell -a 'pvcreate /dev/sdb'
ansible node1,node2,node3,node4 -m shell -a 'vgcreate research /dev/sdb'

 

 

lv.yml 작성:

vim ~/ansible/lv.yml
---
- name: Create Logical Volume
  hosts: all
  tasks:
    - name: Check if VG exists
      debug:
        msg: "Volume group does not exist"
      when: ansible_lvm.vgs.research is undefined

    - block:
        - name: Create a logical volume of 1500m
          lvol:
            vg: research
            lv: data
            size: 1500
      rescue:
        - name: Display error message
          debug:
            msg: "Could not create logical volume of that size"

        - name: Create a logical volume of 800m
          lvol:
            vg: research
            lv: data
            size: 800

    - name: Format with ext4 filesystem
      filesystem:
        fstype: ext4
        dev: /dev/mapper/research-data
      when: ansible_lvm.vgs.research is defined

 

 

실행 및 확인:

ansible-playbook lv.yml

# 확인
ansible all -m shell -a 'vgs'
ansible all -m shell -a 'lvs'
ansible all -m shell -a 'lsblk'

 

💡 Tip

  • blockrescue를 사용한 에러 처리 패턴 숙지
  • ansible_lvm.vgs.research로 VG 존재 여부 확인
  • when 조건으로 VG가 있는 경우에만 filesystem 생성
  • 논리 볼륨 경로: /dev/mapper/VG이름-LV이름

문제 10. Hosts 파일 생성

📌 문제

출력 예시:

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

172.24.1.6 node1.domain1.example.com node1
172.24.1.7 node2.domain1.example.com node2
172.24.1.8 node3.domain1.example.com node3
172.24.1.9 node4.domain1.example.com node4
172.24.1.10 node5.domain1.example.com node5

 

✅ 풀이

# 1. 파일 다운로드
cd ~/ansible
wget http://rhgls.domain1.example.com/materials/hosts.j2
wget http://rhgls.domain1.example.com/materials/hosts.yml

 

 

방법 1:

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_facts']['default_ipv4']['address'] }} {{ hostvars[host]['ansible_facts']['fqdn'] }} {{ hostvars[host]['ansible_facts']['hostname'] }}
{% endfor %}
vim hosts.yml
---
- hosts: all
  gather_facts: true
  become: true
  tasks:
    - name: Create /etc/myhosts from template
      template:
        src: hosts.j2
        dest: /etc/myhosts
      when: ansible_hostname in groups['dev']

 

 

방법 2 (더 간결):

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_default_ipv4.address }} {{ hostvars[host].ansible_fqdn }} {{ hostvars[host].ansible_hostname }}
{% endfor %}
vim hosts.yml
---
- hosts: all
  gather_facts: true
  become: true

- hosts: dev
  become: true
  tasks:
    - name: Create /etc/myhosts from template
      template:
        src: hosts.j2
        dest: /etc/myhosts

 

 

실행 및 확인:

ansible-playbook hosts.yml

# dev 호스트에서 확인
ansible dev -m shell -a 'cat /etc/myhosts'

 

💡 Tip

  • gather_facts: true 필수 (ansible facts 수집)
  • Jinja2 for 루프: {% for item in list %} ... {% endfor %}
  • groups['all']로 모든 호스트 접근
  • hostvars[host]로 특정 호스트의 변수 접근
  • dict 접근: ['key'] 또는 .key 형식 모두 가능

 


 

참고: 본 문서는 RHCE EX294 시험 준비를 위한 참고 자료입니다. 실제 시험 문제와 다를 수 있습니다.



[RHCE] RHCE (EX294) 문제 풀이 - 2

 

[RHCE] RHCE (EX294) 문제 풀이 - 2

RHCE (EX294) 시험 준비문제 11. 파일 내용 수정📌 문제/home/admin/ansible/issue.yml 플레이북을 생성하여: 인벤토리 호스트 전체에서 실행 /etc/issue 파일 내용을 한 줄로 변경:dev 호스트: Developmenttest 호스

handari.tistory.com

 

반응형
TOP