본문 바로가기

Linux/RHCE

[RHCE]Ansible 설치 및 구성/Yum 생성/패키지설치

1. Ansible 설치 및 구성 

문제 및 답
문제 1) 다음과 같이 ansible 및 ansible 제어 노드 control.labx.example.com 을 설치하고 구성합니다.

* 다음과 같이 /home/matthew/ansible/inventory라는 정적 인벤토리 파일을 생성합니다.
   - node1은 dev 호스트 그룹의 구성원입니다.
   - node2는 test 호스트 그룹의 구성원입니다.
   - node3 및 node4는 prod 호스트 그룹의 구성원입니다.  
   - node5는 balancers 호스트 그룹의 구성원입니다.
   - prod 그룹은 webservers 호스트 그룹의 구성원입니다.

* 다음과 같이 /home/matthew/ansible/ansible.cfg 라는 구성 파일을 만듭니다.
  - 호스트 인벤토리 파일 /home/matthew/ansible/inventory
  - 플레이북에서 역할의 위치 /home/matthew/ansible/roles
답 1)
dnf -y install ansible-*
su - matthew
mkdir -pv /home/matthew/ansible/roles
# vi /home/matthew/ansible/inventory
[dev]
node1

[test]
node2

[prod]
node3
node4

[balancers:children]
node5

[webservers:children]
prod

# vi /home/matthew/ansible/ansible.cfg
[defaults]
remote_user = matthew
inventory = /home/matthew/ansible/inventory
roles_path = /home/matthew/ansible/roles:/usr/share/ansible/roles
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

ansible all -m ping //잘 연결되었는지 확인

 

 

테스트용 구성
문제 1) 다음과 같이 ansible 및 ansible 제어 노드 control.labx.example.com 을 설치하고 구성합니다.

* 다음과 같이 /home/ec2-user/ansible/inventory라는 정적 인벤토리 파일을 생성합니다.
   - node1은 dev 호스트 그룹의 구성원입니다.
   - node2는 test 호스트 그룹의 구성원입니다.
   - node3는 prod 호스트 그룹의 구성원입니다.  
   - prod 그룹은 webservers 호스트 그룹의 구성원입니다.

* 다음과 같이 /home/ec2-user/ansible/ansible.cfg 라는 구성 파일을 만듭니다.
  - 호스트 인벤토리 파일 /home/ec2-user/ansible/inventory
  - 플레이북에서 역할의 위치 /home/ec2-user/ansible/roles
답1)
dnf -y install ansible-*
su - ec2-user
mkdir -pv /home/ec2-user/ansible/roles

# vi /home/ec2-user/ansible/inventory
[dev]
node1

[test]
node2

[prod]
node3

[webservers:children]
prod

# vi /home/ec2-user/ansible/ansible.cfg
[defaults]
remote_user = ec2-user
inventory = /home/ec2-user/ansible/inventory
roles_path = /home/ec2-user/ansible/roles:/usr/share/ansible/roles
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

ansible all -m ping

 

풀이과정

1. ansible control 노드 ansible 설치(설치되어 있지 않을 경우, root에서 설치)

dnf -y install ansible-*
ansible --version //설치 정상 확인(버전이 뜨면 정상적으로 설치된 것)

2. user 변경 및 파일 작성

정적 인벤토리를 사용할 때 (https://watch-n-learn.tistory.com/75)

  • 그냥 ansible 명령을 입력하는경우에는 기본 경로인 /etc/ansible/hosts가 사용됨
  • ansible.cfg 파일이 있는 경로에서 ansible 명령을 입력하는경우에는 inventory 파일이 사용됨
  • 시험에서는 아무곳에서나 ansible 입력해도 될 것 같음
1. 사용자 전환
su - ec2-user

2. 역할 경로 생성
mkdir -pv /home/ec2-user/ansible/roles

3. 인벤토리 생성
# vi /home/ec2-user/ansible/inventory
[dev]
node1

[test]
node2

[prod]
node3

[webservers:children]
prod

4. config 파일 생성 
# vi /home/ec2-user/ansible/ansible.cfg
[defaults]
remote_user = ec2-user
inventory = /home/ec2-user/ansible/inventory
roles_path = /home/ec2-user/ansible/roles:/usr/share/ansib
le/roles
ask_pass = false

[privilege_escalation]
become = true
become_method = sudo
become_user = root
become_ask_pass = false

3. ping 확인

unreachable 뜰경우 ssh ec2-user@ip 로 확인해보기

처음에 yes해줘야함 -> 시험에서는 필요 없음

 


2. Yum 생성

문제 및 답
문제 2) yum_repository 생성하는 sh 파일 만들기
      /home/matthew/ansible/adhoc.sh아래와 같이 각 관리 노드에 yum저장소를 만들기 위해
     ansible ad-hoc 명령을 실행하는 라는 셸 스크립트를 만듭니다.
   - 저장소 이름 (name) : exam_rhel
   - 저장소 설명 (description) : EX407 software
   - 기본 URL (baseurl) :  http://content.example.com/rhel7.5/x86_64/dvd
   - GPG 서명 확인 활성화
   - GPG 키 URL :  http://content.example.com/rhel7.5/x86_64/dvd/RPM-GPG-KEY-redhat-release
   - 저장소가 사용 설정됨

테스트용 환경 ) /home/ec2-user/ansible/adhoc.sh 생성
답2)
#활성화된 repo 확인
ansible all -m command -a 'dnf repolist all'

#doc 확인
ansible-doc yum_repository EXAMPLE

#vi /home/matthew/ansible/adhoc.sh 
#vi /home/ec2-user/ansible/adhoc.sh //테스트용 환경
#!/bin/bash
ansible all -m yum_repository -a "name=exam_rhel description='EX407 software'
base_url=http://content.example.com/rhel7.5/x86_64/dvd/BaseOS
gpgcheck=yes gpgkey=http://content.example.com/rhel7.5/x86_64/dvd/RPM-GPG-KEY-redhat-release
enabled=yes"
ansible all -m yum_repository -a "name=exam_rhel description='EX407 software'
base_url=http://content.example.com/rhel7.5/x86_64/dvd/Appstream
gpgcheck=yes gpgkey=http://content.example.com/rhel7.5/x86_64/dvd/RPM-GPG-KEY-redhat-release
enabled=yes"

chmod +x adhoc.sh
./adhoc.sh
ansible all -m command -a 'ls /etc/yum.repos.d/'

 

풀이과정

 

1. 기존에 있는 repo 확인 : ansible all -m command -a 'dnf repolist all'

2. ansible doc 확인 : ansible-doc yum_repository EXAMPLE

참고해서 sh파일 작성하기

3. sh 작성 : vi /home/ec2-user/ansible/adhoc.sh 후 실행

    현재는 유효한 url이 아니므로 실행시 에러뜸

 


3. 소프트웨어 패키지 설치

문제 및 설치
문제 3) /home/matthew/ansible/packages.yml 이라는 플레이 북을 생성합니다.
1. dev, test, prod 3개의 호스트 그룹에 소속된 호스트에 php 및 mariadb 패키지를 설치합니다.
2. dev 호스트 그룹의 호스트에 RPM development tools 그룹을 설치합니다.
3. dev 호스트 그룹의 호스트에서 모든 패키지를 최신 버전으로 업데이트합니다.

테스트용 환경) /home/ec2-user/ansible/packages.yml 생성
# vi /home/matthew/ansible/packages.yml
# vi /home/ec2-user/ansible/packages.yml //테스트용 환경
- name: install packages
  hosts: dev, test, prod
  tasks:
    - name: install mariadb, php
      yum:
        name: "{{ item }}"
        state: present
      loop:
        - php
        - mariadb

    - name: install RPM Development tools
      yum:
        name: "@RPM Development tools"
        state: present
      when: ansible_hostname in groups['dev']
   
    - name: update all packages only dev group
      yum:
        name: '*'
        state: latest
      when: ansible_hostname in groups['dev']
      
ansible-playbook packages.yml
ansible all -a 'rpm -q mariadb'

 

풀이과정

 

1. ansible-doc 확인 : ansible-doc yum

 

2. packages.yml 작성

3. 실행 후 설치 확인 - ansible-playbook packages.yml / ansible all -a 'rpm -q mariadb'