[Ansible] Install Ansible - 앤서블 설치

 


Red Hat Linux에서 ansible-core와 Ansible Community 패키지를 설치하고 버전 및 모듈/컬렉션 상태를 비교해보는 과정을 안내합니다.


Ansible 설치 개요

Ansible은 오픈소스 프로젝트로 누구나 자유롭게 설치하고 사용할 수 있는 자동화 도구입니다. 이번 글에서는 Red Hat Enterprise Linux에서 오픈소스 Ansible과 Red Hat이 공식 지원하는 Ansible 설치 방법을 살펴보겠습니다.


환경

  • Redhat Enterprise Linux 8 이상
  • ansible 8.4.0
  • ansible-core 2.15.4

사전 요구사항

Ansible 8 및 ansible-core 2.15를 설치하기 위해서는 Python 3.9 이상의 버전이 필요합니다. Red Hat에서 Python 설치 방법은 별도 안내된 "파이썬 설치"를 참조하세요.


Ansible 버전 구분 및 개요

커뮤니티 기반 Ansible은 2.9 버전 이후로 크게 두 가지 방식으로 분리되었습니다.

  • ansible community package: 기존의 모든 모듈이 포함된 방식으로 배터리 포함(Batteries Included) 모델입니다.

  • ansible-core: 필수 모듈만 포함되어 가볍게 운영할 수 있으며, 최신 모듈은 컬렉션 형태로 개별 설치합니다.

이는 빠르게 변화하는 오픈소스 환경에서 더 유연한 구성이 가능하게 해줍니다. 각자의 목적에 맞게 적절한 방식으로 선택하여 설치하면 됩니다.



참고: https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html


Red Hat 기반 Ansible 설치

Red Hat은 두 가지 방식으로 Ansible을 제공합니다.

  1. Red Hat Enterprise Linux에 포함된 ansible-core

  2. 구독 기반 제품인 AAP(Ansible Automation Platform)

그러므로 RHEL 사용자가 단순 ansible-core만 사용할 경우 별도의 AAP 구매 없이 사용할 수 있습니다. 설치를 위해서는 서브스크립션 또는 local repo 설정이 필요하며 RHEL 8.6 이상에서 RPM 패키지로 제공됩니다.

Local Repo설정 방법은 "로컬 레포 구축"을 참조하시면 됩니다.

  • 설치
    # dnf install ansible-core
    Updating Subscription Management repositories.
    Unable to read consumer identity
    
    This system is not registered with an entitlement server. You can use subscription-manager to register.
    
    OS                                                                                                                                         137 MB/s | 2.4 MB     00:00    
    APP                                                                                                                                        117 MB/s | 8.1 MB     00:00    
    Last metadata expiration check: 0:00:01 ago on Tue 03 Oct 2023 03:11:49 AM KST.
    Dependencies resolved.
    ===========================================================================================================================================================================
     Package                                               Architecture                     Version                                  Repository                           Size
    ===========================================================================================================================================================================
    Installing:
     ansible-core                                          x86_64                           2.14.2-3.el8                             local-APP                           3.4 M
    Installing dependencies:
     git-core                                              x86_64                           2.39.1-1.el8                             local-APP                            10 M
     mpdecimal                                             x86_64                           2.5.1-3.el8                              local-APP                            93 k
     python3.11                                            x86_64                           ...
    
    Complete!
    
  • 버전 확인
    # ansible --version
    ansible [core 2.14.2]
      config file = /etc/ansible/ansible.cfg
      configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
      ansible python module location = /usr/lib/python3.11/site-packages/ansible
      ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
      executable location = /usr/bin/ansible
      python version = 3.11.2 (main, Feb 17 2023, 09:28:16) [GCC 8.5.0 20210514 (Red Hat 8.5.0-18)] (/usr/bin/python3.11)
      jinja version = 3.1.2
      libyaml = True

커뮤니티 버전 앤서블 설치

커뮤니티 버전 Ansible은 다음 두 가지 구성으로 배포됩니다.

  • ansible-core: 최소 기능만 포함된 버전

  • ansible: 모든 모듈과 컬렉션이 포함된 풀 패키지

이 문서에서는 ansible-coreansible을 각각 설치하고, 설치 후 포함된 모듈 및 컬렉션 수를 비교합니다. 실무에서는 ansible-core만 설치한 후 필요한 기능만 선택적으로 추가하는 방식을 권장합니다.


1. ansible-core 설치

ansible-core는 2.10 → 2.11 → 2.12 → 2.13 → 2.14 → 2.15 형식으로 업데이트되고 있으며 2023년 10월 기준 최신 버전은 2.15.4 버전입니다.

우선 Python 3.9 이상이 설치되어 있어야 하며, ansible-core 설치는 pip를 이용해 다음과 같이 진행합니다.

# python3 --version
Python 3.9.2
# python3 -m pip install --user ansible-core
WARNING: Running pip install with root privileges is generally not a good idea. Try `python3 -m pip install --user` instead.
...
  WARNING: The scripts ansible, ansible-config, ansible-connection, ansible-console, ansible-doc, ansible-galaxy, ansible-inventory, ansible-playbook, ansible-pull and ansible-vault are installed in '/root/.local/bin' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
Successfully installed MarkupSafe-2.1.3 PyYAML-6.0.1 ansible-core-2.15.4 cffi-1.16.0 cryptography-41.0.4 importlib-resources-5.0.7 jinja2-3.1.2 packaging-23.2 pycparser-2.21 resolvelib-1.0.1

ansible-core가 설치 후에 WARNING 경고가 발생합니다. 설치 프로그램은 ansible 명령어를 “/root/.local/bin” 디렉터리에 저장했는데 PATH 환경 변수에 해당 디렉터리가 없으므로 시스템 전역 명령어로 사용할 수 없다는 에러입니다.

이는 PATH 설정 문제로 /root/.local/bin을 환경 변수에 추가해야 해결됩니다.


PATH 환경 변수 설정

이 문제는 /etc/profile 파일에 다음 설정을 추가하여 해결할 수 있습니다.

# vim /etc/profile
...
export PATH=/root/.local/bin:$PATH

# su -

변경 후 su - 명령어로 셸을 재시작하면 설정이 적용됩니다.

PATH 환경 변수에 대한 자세한 내용은  "PATH 환경 변수" 내용을 참조하시면 됩니다.


설치 확인 및 모듈 조회

앤서블 버전 확인ansible-core 2.15.4 버전이 설치되었습니다. 설치가 정상적으로 완료되었는지 ansible --version으로 확인할 수 있습니다.

# ansible --version
ansible [core 2.15.4]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /root/.local/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /root/.local/bin/ansible
  python version = 3.9.2 (default, Mar 10 2021, 17:29:56) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True

기본적으로 포함된 모듈을 확인하려면 아래 명령어를 사용합니다, 70개 정도의 모듈이 검색됩니다.

# ansible-doc -l
ansible.builtin.add_host               Add a host (and alternatively a grou...
ansible.builtin.apt                    Manages apt-packages                
ansible.builtin.apt_key                Add or remove an apt key            
ansible.builtin.apt_repository         Add and remove APT repositories     
ansible.builtin.assemble               Assemble configuration files from fr...
ansible.builtin.assert                 Asserts given expressions are true  
ansible.builtin.async_status           Obtain status of asynchronous task  
ansible.builtin.blockinfile            Insert/update/remove a text block su...
ansible.builtin.command                Execute commands on targets
...

# ansible-doc -l | wc -l
74


컬렉션 설치 및 확인

ansible-core에는 기본 컬렉션이 포함되지 않기 때문에, 필요한 컬렉션을 수동으로 설치해야 합니다. 예를 들어 AWS 관련 작업을 위해서는 다음과 같이 설치할 수 있습니다.

# ansible-galaxy collection install amazon.aws
Starting galaxy collection install process
Process install dependency map
Starting collection install process
Downloading <https://galaxy.ansible.com/api/v3/plugin/ansible/content/published/collections/artifacts/amazon-aws-6.4.0.tar.gz> to /root/.ansible/tmp/ansible-local-496422ahknfhn/tmpyu6nfmhi/amazon-aws-6.4.0-_6oq5k3y
Installing 'amazon.aws:6.4.0' to '/root/.ansible/collections/ansible_collections/amazon/aws'
amazon.aws:6.4.0 was installed successfully

설치 후 아래 명령어로 설치된 컬렉션 목록을 확인할 수 있습니다.
# ansible-galaxy collection list

# /root/.ansible/collections/ansible_collections
Collection Version
---------- -------
amazon.aws 6.4.0

2. Ansible Community Package 설치

Ansible 커뮤니티 패키지는 ansible-core 외에도 다양한 컬렉션과 모듈을 포함합니다. 설치는 다음 명령어로 진행할 수 있습니다.

# python3 --version
Python 3.9.2
# python3 -m pip install --user ansible
...
Installing collected packages: resolvelib, PyYAML, packaging, pycparser, cffi, cryptography, importlib-resources, MarkupSafe, jinja2, ansible-core, ansible
Successfully installed MarkupSafe-2.1.3 PyYAML-6.0.1 ansible-8.4.0 ansible-core-2.15.4 cffi-1.16.0 cryptography-41.0.4 importlib-resources-5.0.7 jinja2-3.1.2 packaging-23.2 pycparser-2.21 resolvelib-1.0.1


ansibleansible-core가 함께 설치되었으며, ansible-community 명령어로 커뮤니티 버전 확인이 가능합니다. 또한 ansible 명령어를 통해 ansible-core 버전도 확인할 수 있습니다.

# ansible-community --version
Ansible community version 8.4.0

# ansible --version
ansible [core 2.15.4]
  config file = None
  configured module search path = ['/root/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/local/lib/python3.9/site-packages/ansible
  ansible collection location = /root/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/local/bin/ansible
  python version = 3.9.2 (default, Mar 10 2021, 17:29:56) [GCC 8.4.1 20200928 (Red Hat 8.4.1-1)] (/usr/bin/python3)
  jinja version = 3.1.2
  libyaml = True


설치된 컬렉션 및 모듈 수 확인

커뮤니티 패키지로 설치한 ansible에는 100개 이상의 컬렉션과 8천 개 이상의 모듈이 포함되어 있는 것을 확인할 수 있습니다.

# ansible-galaxy collection list

# /usr/local/lib/python3.9/site-packages/ansible_collections
Collection                    Version
----------------------------- -------
amazon.aws                    6.4.0  
ansible.netcommon             5.2.0  
ansible.posix                 1.5.4  
ansible.utils                 2.11.0 
ansible.windows               1.14.0 
arista.eos                    6.1.0
...

# ansible-galaxy collection list | wc -l
111
# ansible-doc -l
amazon.aws.autoscaling_group               Create or delete AWS Aut...
amazon.aws.autoscaling_group_info          Gather information about EC2 Auto Scalin...
amazon.aws.aws_az_info                     Gather information about ava...
...

# ansible-doc -l | wc -l
8266
이처럼 방대한 수의 컬렉션과 모듈을 기본으로 제공하므로, 광범위한 환경에서 즉시 사용 가능하다는 장점이 있습니다.

마치며

레드햇에서 제공하는 ansible-core, 커뮤니티에서 제공하는 ansible-core, ansible의 차이를 비교하며 설치 과정을 살펴보았습니다. 레드햇 서브스크립션이 있는 경우 공식 레포지토리에서 제공하는 RPM 패키지를 사용하는 것이 안정성과 지원 측면에서 유리합니다.

반면, 기술 지원이 필요 없는 테스트 환경이나 커스터마이징이 많은 운영 환경에서는 커뮤니티 패키지를 통해 최신 기능을 빠르게 반영하고 필요한 컬렉션만 선택적으로 설치하는 방식이 효율적입니다.

 

참조

https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html#id11

https://docs.ansible.com/ansible/latest/reference_appendices/release_and_maintenance.html

댓글

이 블로그의 인기 게시물

[Linux] RHEL Local YUM Repository 구성

[Linux Command] sudo command 설명

[Ansible Modules] Fetch module 설명 및 활용