[Ansible] Yum 패키지 관리

Ansible의 YUM 모듈은 기본 모듈 중 하나로, 리눅스 시스템에서 YUM (Yellowdog Updater, Modified) 패키지 관리자를 사용하여 패키지를 설치, 업그레이드, 제거하는 작업을 수행합니다. Ansible의 YUM 모듈을 통해 원격 호스트의 패키지 관리 작업을 자동화하여 사용할 수 있습니다.

 


YUM 모듈 구조

# 주요 매개변수 및 옵션을 사용한 예시
- name: YUM 패키지 설치, 업그레이드, 제거
  ansible.builtin.yum:
    name: package_name
    state: latest
    disable_gpg_check: true
    disablerepo: myrepo
    enablerepo: myotherrepo
    update_cache: false
    use_backend: dnf

 

주요 매개변수 및 옵션

  • name: 설치 또는 제거할 패키지의 이름을 지정합니다.
  • state: 패키지의 상태를 지정합니다.
    • present : 패키지 설치
    • latest : 최신 버전으로 패키지 업그레이드
    • absent : 패키지 제거
  • disable_gpg_check: GPG (GNU Privacy Guard) 검사를 비활성화합니다. 기본값은 False입니다.
  • disablerepo: 특정 리포지토리를 비활성화합니다.
  • enablerepo: 특정 리포지토리를 활성화합니다.
  • update_cache: YUM 패키지 캐시를 업데이트합니다. 기본값은 True입니다.
  • use_backend: 사용할 백엔드를 선택합니다. 기본 값은 auto이며, dnf 또는 yum을 직접 지정할 수도 있습니다.

 


YUM 패키지 설치

  • 실행 코드
- name: 패키지 설치
  yum:
    name: tcpdump
    state: present

 

  • 실행 로그
# ansible-playbook -i {{Inventory}}  roles/test_work.yml  -vv

TASK [test_work : 패키지 설치] *************************
changed: [node0] => {"changed": true, "changes": {"installed": ["tcpdump"]}, "msg": "##### 생략 #####", "rc": 0, "results": #####", 생략 #####", "]}

 

YUM 패키지 업그레이드

  • 실행 코드
- name: 최신 버전으로 패키지 업그레이드
  yum:
    name: tcpdump
    state: latest

 

  • 실행 로그
# ansible-playbook -i {{Inventory}}  roles/test_work.yml  -vv

TASK [test_work : 최신 버전으로 패키지 업그레이드] *****************
ok: [node0] => {"changed": false, "changes": {"installed": [], "updated": []}, "msg": "", "rc": 0, "results": ["All packages providing tcpdump are up to date", ""]}

 

YUM 패키지 제거

  • 실행 코드
- name: 패키지 제거
  yum:
    name: tcpdump
    state: absent

 

  • 실행 로그
# ansible-playbook -i {{Inventory}}  roles/test_work.yml  -vv

TASK [test_work : 패키지 제거] ************************
changed: [node0] => {"changed": true, "changes": {"removed": ["tcpdump"]}, "msg": "##### 생략 #####", "rc": 0, "results": #####", 생략 #####", "]}

 

 

기본적인 설치, 업그레이드, 제거 작업을 수행할 수 있으며 매개변수 및 옵션을 추가하여 상황에 맞는 작업을 진행할 수 있습니다. 지금까지 Ansible의 YUM 모듈을 통해서 원격 호스트의 패키지 관리 작업을 자동화하는 것을 알아보았습니다...! 끝...!

 

 

[Reference]

[Ansible] 시스템 OS 재시작 하기

Ansible의 reboot 모듈을 사용하여 Managed node의 OS를 재시작 가능합니다.

 

Playbook 생성

Managed node의 OS를 재시작하는 Playbook을 작성해봅니다.

OS 재시작 후 600초 동안 재시작이 완료되었는지 test_command 인 whoami 명령어를 통해 확인하는 Playbook 입니다.

- name: Reboot web-server
  reboot:
    msg: "Reboot initiated by Ansible"
    connect_timeout: 10                     
    reboot_timeout: 600
    pre_reboot_delay: 0
    post_reboot_delay: 0
    test_command: whoami
  • connect_timeout: 연결 대기 시간, OS 종료 시 SSH 연결 끊기 위한 설정
  • reboot_timeout: OS 재시작 후 최대 대기하는 시간
  • pre_reboot_delay: OS 재시작 전 기다리는 시간
  • post_reboot_delay: OS 재시작 후 명령어 입력 전 기다리는 시간
  • test_command: OS 재시작 후 정상적으로 시스템이 실행되었는지 확인하는 명령어

 

Playbook 실행

작성한 yml 파일을 실행하여 로그를 확인해봅니다.
상세 로그를 확인하기 위해 ansible-playbook 명령어에 -vv 옵션을 추가하였습니다.

ansible-playbook -i {{Inventory}} test_work.yml -vv

TASK [test_work : Reboot web-server] ************************************
task path: /deploy/roles/test_work/tasks/main.yml:4
changed: [node0] => {"changed": true, "elapsed": 148, "rebooted": true}
META: role_complete for node0
META: ran handlers
META: ran handlers

상세 로그를 통해 148초만에 해당 Managed node의 OS가 재시작된 것을 확인하실 수 있습니다.

 

 

직접 해당 노드에 접속해서 OS 재시작 시간을 아래와 같이 확인하실 수 있습니다.

# last reboot
reboot   system boot  3.10.0-1160.el7. Tue Mar  7 09:34 - 09:41 (3+00:07)

위 방법으로 Managed node의 OS 재시작 작업이 필요한 경우 사용하실 수 있습니다.

'Infrastructure As Code > Ansible' 카테고리의 다른 글

[Ansible] Yum 패키지 관리  (0) 2023.05.19
[Ansible] 도커 컨테이너 ID 가져오기  (0) 2023.02.20

[Ansible] 도커 컨테이너 ID 가져오기

도커 컨테이너의 ID로 여러가지 작업을 하기 위해 Ansible에서 도커 컨테이너의 ID를 가져오는 작업을 진행해봅니다.

 

Playbook 생성

web-server이름의 도커 컨테이너 ID를 가져오는 Playbook을 작성해봅니다.

- name: Regist web-server docker container id
  shell: docker ps -q -f "name=web-server"
  register: web_server_container_id

도커 컨테이너 ID는 web_server_container_id 이름으로 등록하였습니다.


테스트를 위해 web_server_container_id 의 전체 결과 값을 출력해보는 로직도 추가해봤습니다.

- name: Logging web_server_container_id
  debug:
    msg: "{{ web_server_container_id }}"

 

 

Playbook 실행

작성한 yml 파일을 실행하여 로그를 확인해봅니다.

ansible-playbook -i {{Inventory}} test_work.yml

TASK [test_work : Regist web-server docker container id] ***************************************************************************************************************************************************************************************
changed: [node0]

TASK [test_work : Logging web_server_container_id] *****************************************************************************************************************************************************************************************************
ok: [node0] => {
    "msg": {
        "changed": true,
        "cmd": "docker ps -q -f \"name=web-server\",
        "delta": "0:00:00.025528",
        "end": "2023-02-20 10:57:08.057040",
        "failed": false,
        "msg": "",
        "rc": 0,
        "start": "2023-02-20 10:57:08.031512",
        "stderr": "",
        "stderr_lines": [],
        "stdout": "c7326be211bf",
        "stdout_lines": [
            "c7326be211bf"
        ]
    }
}

전체 결과 값을 확인할 수 있으며 stdout 값에 도커 컨테이너 ID를 정상적으로 가져왔음을 확인할 수 있습니다.

 

실제 yml 파일에서 해당 값을 사용하려면 아래와 같이 .stdout를 추가하여 해당 값만 가져와 사용할 수 있습니다.

- name: Using web_server_container_id
  debug:
    msg: "{{ web_server_container_id.stdout }}"

 

위 방법으로 도커 컨테이너 ID를 Ansible에서 불러와 사용할 수 있습니다.

'Infrastructure As Code > Ansible' 카테고리의 다른 글

[Ansible] Yum 패키지 관리  (0) 2023.05.19
[Ansible] 시스템 OS 재시작 하기  (0) 2023.03.10

+ Recent posts