본문 바로가기
DevOps/IaC 자동화

[Ansible] 패키지 정보 이용하기 Package_facts 사용

by 마이자몽 🌻♚ 2021. 5. 25.

 

Package Facts

Ansible에서는 노드의 정보를 수집하는 Fact가 있습니다. gather_facts 필드의 값을 no로 설정해서 해당 정보가 필요없을 때, 성능을 높이기 위해 사용되고 있죠. package의 정보를 제공해주는 fact도 ansible에서 사용할 수 있습니다. Ansible은 여러 용도로 사용이되는데...  가장 많이 사용하는 용도는 패치를 자동화하기 위해 사용될 겁니다. 그래서 package에 대한 정보를 담고 있는 package fact를 패치하는데 유용하게 사용할 수 있습니다.

 

이번 글에서는 Package Facts를 이용해서 패키지들의 정보를 수집해서 사용하는 방법에 대해서 알아보겠습니다.

 

서비스의 애플리케이션들이 모두 패키지형태로 관리되고 애플리케이션들을 띄우는 서버가 10대가 있다고 가정하겠습니다. 그런데 모든 서비스가 모든 서버에 모두 띄워져 있는 것이 아니라... 어떤 서비스는 1,2,3번에 올라가져 있고... 어떤 서비스 3,4,5에만 띄워져 있습니다. ansible inventory를 사용해서 서비스에 따라 모두 구분하는 것도 방법이지만... 설계에 따라 하나로 묶어서 host를 관리한다고 가정하겠습니다.

 

이런 경우... ansible을 실행했을 때... 항상 10대의 서버를 확인해 성능상 문제가 될수도 있고 패키지가 없는 경우 오류가 발생할 수 있습니다. 이런 상황들 방지하기 위해 package의 fact를 사용하면 패키지가 서버에 설치 되어 있는 경우 특정 태스크를 실행하도록 설정할 수 있습니다.

 

 

---
# 패키지에 대한 정보를 수집한다.
- hosts: apps
  gather_facts: no
  tasks:
    - name: packages
      package_facts:
        manager: "auto"

# 선행해서 실행되어야할 작업을 진행한다.
# ...
# ...

# nginx 패키지가 있는 경우 메세지를 뿌려준다.
- hosts: apps
  gather_facts: no
  tasks:
    - name: show updates
      debug:
        msg: "nginx updates needed!"
      when: "'nginx' in ansible_facts.packages"
  • when 절을 사용해서 패키지가 있는 경우에만 태스크가 실행되도록 한다.

 

node02의 경우 nginx가 설치되어 있지 않아서 해당 태스크를 스킵하게됩니다.

태그

댓글0