Ansible 그룹 인벤토리

AnsibleBeginner
지금 연습하기

소개

이 랩에서는 Ansible 인벤토리 파일을 생성하고 구성하는 방법을 배우게 됩니다. Ansible 은 인벤토리 파일을 사용하여 관리하는 호스트를 정의하고 구성합니다. 인벤토리 파일의 기본 구조를 살펴보고, 그룹을 생성하고, 그룹 계층 구조를 설정하며, 그룹에 변수를 할당하는 방법을 배우게 됩니다. 이러한 기술은 Ansible 을 사용하여 인프라를 효과적으로 관리하는 데 필수적입니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 초급 레벨의 실험이며 완료율은 99%입니다.학습자들로부터 98%의 긍정적인 리뷰율을 받았습니다.

기본 인벤토리 생성

랩 환경은 로컬 머신에 대한 SSH 액세스로 미리 구성되어 있습니다. 이 랩에서는 localhost를 모든 Ansible 작업의 대상 호스트로 사용할 수 있습니다.

Ansible 인벤토리 파일은 플레이북의 명령, 모듈 및 작업이 작동하는 호스트 및 호스트 그룹을 정의합니다. 기본 인벤토리 파일을 만들어 보겠습니다.

/home/labex/project 디렉토리에 inventory라는 새 파일을 생성합니다.

nano /home/labex/project/inventory

다음 내용을 파일에 추가합니다.

localhost ansible_connection=local

자세히 살펴보겠습니다.

  • localhost: 이것은 호스트의 이름입니다. 이 경우 로컬 머신입니다.
  • ansible_connection=local: 이것은 Ansible 변수로, SSH 를 통해 연결하는 대신 Ansible 이 이 호스트에 로컬로 연결하도록 지시합니다. 이는 로컬 머신을 관리하는 데 유용합니다.

파일을 저장하고 편집기를 종료합니다 (nano 에서 Ctrl+X, Y, Enter 를 누릅니다).

이제 Ansible 의 ping 모듈을 사용하여 인벤토리를 테스트해 보겠습니다. ping 모듈은 실제로 ICMP ping 프로토콜을 사용하지 않습니다. 대신 Ansible 이 호스트에 연결하여 Python 코드를 실행할 수 있는지 확인합니다.

다음 명령을 실행합니다.

ansible -i inventory -m ping all

이 명령을 자세히 살펴보겠습니다.

  • -i inventory: 사용할 인벤토리 파일을 지정합니다.
  • -m ping: Ansible 에게 ping 모듈을 사용하도록 지시합니다.
  • all: 인벤토리의 모든 호스트를 대상으로 합니다.

성공적인 연결을 나타내는 출력이 표시되어야 합니다.

localhost | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

이 출력이 표시되면 Ansible 이 localhost 에 성공적으로 연결하여 ping 모듈을 실행했음을 의미합니다.

호스트 그룹핑

Ansible 을 사용하면 호스트를 그룹으로 구성할 수 있습니다. 이는 여러 호스트에서 구성을 적용하거나 작업을 동시에 실행하는 데 유용합니다. 인벤토리를 수정하여 그룹을 포함해 보겠습니다.

inventory 파일을 편집합니다.

nano /home/labex/project/inventory

내용을 다음과 같이 업데이트합니다.

[webservers]
localhost ansible_connection=local

이렇게 하면 localhost 를 포함하는 webservers라는 그룹이 정의됩니다. Ansible 에서 그룹은 그룹 이름을 대괄호 [] 안에 넣어서 정의됩니다. 그룹 아래에 나열된 모든 호스트는 해당 그룹에 속합니다.

저장하고 편집기를 종료합니다.

이제 ping 모듈을 사용하여 그룹을 테스트해 보겠습니다.

ansible -i inventory -m ping webservers

이 명령은 이전 명령과 유사하지만 all 대신 webservers 그룹을 대상으로 합니다.

이전과 동일한 성공적인 출력이 표시되어야 하지만, 이제 webservers 그룹을 명시적으로 대상으로 하고 있습니다. 호스트가 하나만 있는 경우에는 불필요해 보일 수 있지만, 인벤토리가 커짐에 따라 그룹화는 특정 호스트 집합을 대상으로 하는 데 점점 더 유용해집니다.

그룹 계층 구조 생성

Ansible 은 중첩된 그룹을 지원하여 계층 구조를 만들 수 있습니다. 이는 호스트를 역할 또는 환경에 따라 구성하는 데 유용합니다. 다른 그룹을 추가하고 계층 구조를 만들어 보겠습니다.

inventory 파일을 편집합니다.

nano /home/labex/project/inventory

내용을 다음과 같이 업데이트합니다.

[webservers]
localhost ansible_connection=local

[production:children]
webservers

이렇게 하면 webservers 그룹의 모든 호스트를 포함하는 production이라는 새 그룹이 생성됩니다. :children 접미사는 Ansible 에게 이 그룹이 호스트 그룹이 아닌 그룹의 그룹임을 알려줍니다.

이 계층 구조의 의미는 다음과 같습니다.

  • webservers 그룹의 모든 호스트는 암시적으로 production 그룹에도 속합니다.
  • production 그룹을 대상으로 하여 모든 production 호스트에 구성을 적용할 수 있습니다.
  • 필요한 경우 webservers만 대상으로 지정할 수도 있습니다.

저장하고 편집기를 종료합니다.

새 그룹 계층 구조를 테스트합니다.

ansible -i inventory -m ping production

이 명령은 production 그룹의 모든 호스트를 ping 하며, 여기에는 webservers 그룹의 모든 호스트가 포함됩니다. 이 경우 여전히 localhost 뿐이지만, 실제 시나리오에서는 이 구조를 통해 강력하고 유연한 호스트 관리가 가능합니다.

그룹에 변수 할당

Ansible 을 사용하면 인벤토리 파일에서 그룹에 변수를 할당할 수 있습니다. 이러한 변수는 플레이북과 템플릿에서 사용될 수 있으며, Ansible 코드를 더욱 유연하고 재사용 가능하게 만듭니다.

inventory 파일을 편집합니다.

nano /home/labex/project/inventory

내용을 다음과 같이 업데이트합니다.

[webservers]
localhost ansible_connection=local

[production:children]
webservers

[webservers:vars]
http_port=80

이렇게 하면 webservers 그룹의 모든 호스트에 변수 http_port를 값 80 으로 할당합니다. :vars 접미사는 그룹에 대한 변수를 정의하는 데 사용됩니다.

저장하고 편집기를 종료합니다.

이제 이 변수를 표시하는 간단한 플레이북을 만들어 보겠습니다. 플레이북은 호스트에서 실행할 작업 집합을 정의하는 YAML 파일입니다. show_http_port.yml이라는 새 파일을 만듭니다.

nano /home/labex/project/show_http_port.yml

다음 내용을 추가합니다.

---
- name: Show HTTP Port
  hosts: webservers
  tasks:
    - name: Display HTTP Port
      debug:
        msg: "The HTTP port is {{ http_port }}"

이 플레이북은 다음과 같습니다.

  • webservers 그룹을 대상으로 합니다.
  • debug 모듈을 사용하여 메시지를 표시하는 단일 작업을 갖습니다.
  • 인벤토리에서 정의한 변수를 참조하기 위해 {{ http_port }} 구문을 사용합니다.

저장하고 편집기를 종료합니다.

플레이북을 실행합니다.

ansible-playbook -i inventory show_http_port.yml

HTTP 포트 값을 표시하는 출력을 볼 수 있습니다.

PLAY [Show HTTP Port] ********************************************************

TASK [Gathering Facts] ********************************************************
ok: [localhost]

TASK [Display HTTP Port] ******************************************************
ok: [localhost] => {
    "msg": "The HTTP port is 80"
}

PLAY RECAP ********************************************************************
localhost                  : ok=2    changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

이는 인벤토리에서 정의한 변수가 플레이북에서 액세스할 수 있음을 보여줍니다.

요약

이 랩에서는 Ansible 인벤토리 관리의 기본 사항을 배웠습니다. 기본적인 인벤토리 파일을 만들고 Ansible ping 모듈을 사용하여 연결을 확인하는 방법을 배웠습니다. 호스트를 그룹화하고 그룹 계층 구조를 만드는 방법을 탐구했는데, 이는 더 큰 인프라를 구성하고 관리하는 데 필수적입니다. 마지막으로, 그룹에 변수를 할당하고 간단한 플레이북에서 사용하는 방법을 배웠습니다.

이러한 기술은 Ansible 작업의 기반을 형성하며, 더 복잡한 자동화 작업으로 나아갈 때 매우 유용할 것입니다. 확장 가능하고 유지 관리 가능한 Ansible 프로젝트에는 효과적인 인벤토리 관리가 핵심이라는 점을 기억하십시오. Ansible 여정을 계속 진행하면서 동적 인벤토리 및 인벤토리 플러그인과 같은 더 고급 인벤토리 기능을 탐색하는 것을 고려하십시오.

이러한 개념을 마스터하려면 연습이 중요합니다. 더 복잡한 인벤토리를 만들고, 다양한 그룹 구조를 실험하고, 더 고급 플레이북에서 변수를 사용해 보십시오. Ansible 을 더 많이 사용할수록 강력한 자동화 기능에 더 익숙해질 것입니다.