Ansible 플레이북 기본 사항

AnsibleBeginner
지금 연습하기

소개

이 랩에서는 Ansible 플레이북의 기본 사항을 배우게 됩니다. Ansible 플레이북은 원격 호스트에서 실행될 작업 집합을 설명하는 YAML 파일입니다. 복잡한 IT 자동화 워크플로우의 구성 요소입니다. 첫 번째 플레이북을 만들고, 구조를 이해하고, 실행하는 방법을 배우게 됩니다. 이 랩을 마치면 Ansible 플레이북을 작성하고 실행하는 실질적인 경험을 얻게 되며, 이는 더 발전된 Ansible 사용의 기반이 될 것입니다.

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

첫 번째 플레이북 생성

로컬 머신에 디렉토리와 파일을 생성하는 간단한 Ansible 플레이북을 만들어 보겠습니다. 이를 통해 플레이북의 기본 구조와 실행 방법을 이해할 수 있습니다.

먼저, /home/labex/project 디렉토리에 first_playbook.yml이라는 새 파일을 만들어 보겠습니다.

nano /home/labex/project/first_playbook.yml

이 명령은 nano 텍스트 편집기를 엽니다. nano 에 익숙하지 않더라도 걱정하지 마세요. 간단한 텍스트 편집기입니다. 직접 입력할 수 있습니다.

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

---
- name: My First Playbook
  hosts: localhost
  connection: local
  tasks:
    - name: Create a directory
      file:
        path: /home/labex/project/test_directory
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "Hello from Ansible!"
        dest: /home/labex/project/test_directory/hello.txt

이 플레이북을 분석하여 각 부분을 이해해 보겠습니다.

  • 맨 위에 있는 ---는 YAML 파일의 시작을 나타냅니다. YAML 은 Ansible 플레이북에 사용되는 형식입니다.
  • name: My First Playbook은 이 플레이에 대한 설명적인 이름입니다. 이 플레이북이 무엇을 하는지 식별하는 데 도움이 됩니다.
  • hosts: localhost는 이 플레이북이 로컬 머신에서 실행됨을 지정합니다. 실제 시나리오에서는 여기에 원격 호스트를 지정할 수 있습니다.
  • connection: local은 Ansible 에게 SSH 를 사용하지 않고 플레이북을 로컬에서 실행하도록 지시합니다. 이는 테스트 및 Ansible 제어 노드 자체에서 수행해야 하는 작업에 유용합니다.
  • tasks:는 실행할 작업 목록이 뒤따릅니다. 각 작업은 Ansible 이 수행하려는 작업입니다.
  • 각 작업에는 설명을 위한 name이 있습니다. 이는 각 작업이 무엇을 하는지 이해하고 문제 해결을 더 쉽게 만듭니다.
  • 작업은 Ansible 모듈을 사용합니다.
    • file 모듈은 디렉토리를 만드는 데 사용됩니다.
    • copy 모듈은 특정 내용으로 파일을 만드는 데 사용됩니다.

아직 모든 모듈을 이해하지 못하더라도 걱정하지 마세요. 진행하면서 더 많은 모듈과 그 사용법에 대해 배우게 될 것입니다.

편집기를 저장하고 종료합니다. nano 에서는 Ctrl+X, Y, Enter를 차례로 누르면 됩니다.

이제 이 플레이북을 실행해 보겠습니다. 터미널에서 다음을 입력합니다.

ansible-playbook /home/labex/project/first_playbook.yml

이 명령은 Ansible 에게 방금 만든 플레이북을 실행하도록 지시합니다. 다음과 유사한 출력을 볼 수 있습니다.

PLAY [My First Playbook] ******************************************************

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

TASK [Create a directory] ******************************************************
changed: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

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

이 출력은 Ansible 이 작업을 성공적으로 실행했음을 보여줍니다. "changed" 상태는 Ansible 이 시스템을 변경했음 (디렉토리 및 파일 생성) 을 나타냅니다.

결과를 수동으로 확인하려면 다음 명령을 사용할 수 있습니다.

ls -l /home/labex/project/test_directory
cat /home/labex/project/test_directory/hello.txt

첫 번째 명령은 생성한 디렉토리를 표시하고, 두 번째 명령은 생성한 파일의 내용을 표시합니다.

플레이북 구조 이해

첫 번째 플레이북을 만들고 실행했으니, 이제 구조에 대해 더 자세히 알아보겠습니다. 플레이북의 구조를 이해하는 것은 앞으로 더 복잡한 자동화 작업을 작성하는 데 매우 중요합니다.

Ansible 플레이북은 하나 이상의 플레이로 구성되며, 각 플레이는 여러 핵심 요소로 구성됩니다. first_playbook.yml 파일을 편집하여 각 부분을 설명하는 주석을 추가해 보겠습니다.

nano /home/labex/project/first_playbook.yml

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

---
## Playbook starts with three dashes
- name: My First Playbook ## Name of the play
  hosts: localhost ## Target host(s) for this play
  connection: local ## Connection type (local in this case)

  tasks: ## List of tasks to be executed
    - name: Create a directory ## Name of the first task
      file: ## The 'file' module is used for this task
        path: /home/labex/project/test_directory ## Path of the directory to create
        state: directory ## Desired state (create the directory)
        mode: "0755" ## Permissions for the directory

    - name: Create a file ## Name of the second task
      copy: ## The 'copy' module is used for this task
        content: "Hello from Ansible!" ## Content to be written to the file
        dest: /home/labex/project/test_directory/hello.txt ## Destination path for the file

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

이 주석 처리된 플레이북 버전은 각 요소의 구조와 목적을 이해하는 데 도움이 됩니다. 기억해야 할 몇 가지 주요 사항은 다음과 같습니다.

  1. 플레이북은 여러 플레이를 포함할 수 있으며, 각 플레이는 대시 (-) 로 시작합니다. 이 경우, 우리는 하나의 플레이만 가지고 있습니다.
  2. 각 플레이는 특정 호스트를 대상으로 하고 작업 목록을 정의합니다. hosts 필드는 플레이가 실행되어야 하는 머신을 지정합니다.
  3. 작업은 Ansible 모듈 (예: filecopy) 을 사용하여 작업을 수행합니다. Ansible 에는 다양한 목적으로 사용할 수 있는 많은 내장 모듈이 있습니다.
  4. 각 작업에는 설명적인 이름이 있어야 합니다. 이는 작업의 내용을 이해하고 문제 해결에 도움이 됩니다.
  5. 들여쓰기는 YAML 파일에서 매우 중요합니다. 플레이북이 올바르게 들여쓰기되었는지 확인하십시오. 잘못된 들여쓰기는 플레이북을 실행할 때 오류를 발생시킬 수 있습니다.

file 모듈은 다용도로, 파일 및 디렉토리를 생성, 수정 또는 삭제하는 데 사용할 수 있습니다. 이 경우, 디렉토리를 만드는 데 사용하고 있습니다.

copy 모듈은 파일을 원격 위치로 복사하거나, 이 경우 특정 내용으로 새 파일을 만드는 데 사용됩니다.

이러한 기본 구조를 이해하면 앞으로 더 복잡한 플레이북을 만드는 데 도움이 될 것입니다.

플레이북에 변수 추가

변수는 플레이북을 더 유연하고 재사용 가능하게 만듭니다. 플레이북 자체를 변경할 필요 없이 다양한 시나리오에 적응할 수 있는 플레이북을 작성할 수 있습니다. 변수를 사용하도록 플레이북을 수정해 보겠습니다.

first_playbook.yml 파일을 편집합니다.

nano /home/labex/project/first_playbook.yml

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

---
- name: My First Playbook
  hosts: localhost
  connection: local
  vars:
    dir_path: /home/labex/project/test_directory
    file_content: "Hello from Ansible! The time is {{ ansible_date_time.iso8601 }}"

  tasks:
    - name: Create a directory
      file:
        path: "{{ dir_path }}"
        state: directory
        mode: "0755"

    - name: Create a file
      copy:
        content: "{{ file_content }}"
        dest: "{{ dir_path }}/hello.txt"

    - name: Display file content
      debug:
        msg: "The content of the file is: {{ file_content }}"

이 업데이트된 플레이북의 변경 사항과 새로운 요소를 분석해 보겠습니다.

  1. 변수를 정의하기 위해 vars 섹션을 추가했습니다. 이 섹션에서 플레이북에서 여러 번 사용할 값을 설정할 수 있습니다.

  2. dir_pathfile_content는 이제 변수입니다. 이러한 값을 한 곳에서 쉽게 변경하여 여러 작업에 영향을 줄 수 있습니다.

  3. {{ }} 구문을 사용하여 변수를 참조하고 있습니다. 이는 Ansible 에게 변수를 해당 값으로 바꾸도록 지시합니다.

  4. 현재 타임스탬프를 포함하기 위해 Ansible 의 내장 변수인 ansible_date_time.iso8601을 사용했습니다. Ansible 은 플레이북에서 사용할 수 있는 많은 이러한 변수를 제공합니다.

  5. debug 모듈을 사용하는 새로운 작업이 추가되었습니다. debug 모듈은 플레이북 실행 중에 정보를 표시하는 데 매우 유용하며, 문제 해결에 도움이 될 수 있습니다.

변수를 사용하면 이 플레이북이 더 유연해집니다. 예를 들어, 디렉토리 경로를 변경하려면 모든 작업이 아닌 vars 섹션에서만 변경하면 됩니다.

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

이제 업데이트된 플레이북을 실행해 보겠습니다.

ansible-playbook /home/labex/project/first_playbook.yml

현재 타임스탬프와 함께 파일 내용을 표시하는 디버그 메시지를 포함하여 작업이 실행되는 것을 보여주는 출력을 볼 수 있습니다. 출력은 다음과 유사하게 보일 것입니다.

PLAY [My First Playbook] ******************************************************

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

TASK [Create a directory] ******************************************************
ok: [localhost]

TASK [Create a file] ***********************************************************
changed: [localhost]

TASK [Display file content] ****************************************************
ok: [localhost] => {
    "msg": "The content of the file is: Hello from Ansible! The time is 2023-06-09T12:34:56Z"
}

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

플레이북을 실행할 때 실제 타임스탬프는 다를 것입니다.

이는 변수가 플레이북을 더 동적으로 만들 수 있음을 보여줍니다. 이제 파일 내용에는 플레이북을 실행할 때마다 달라지는 타임스탬프가 포함됩니다.

요약

이 랩에서는 Ansible 플레이북의 기본 사항을 배웠습니다. 첫 번째 간단한 플레이북을 만드는 것부터 시작하여 구조를 이해하고 변수를 사용하여 플레이북을 더 동적이고 재사용 가능하게 만드는 방법을 배웠습니다.

이 랩의 주요 내용:

  1. Ansible 플레이북은 YAML 형식으로 작성되며, 지정된 호스트에서 실행될 작업 집합을 설명합니다.
  2. 플레이북은 하나 이상의 플레이로 구성되며, 각 플레이는 작업 목록을 포함합니다.
  3. 작업은 Ansible 모듈을 사용하여 대상 호스트에서 작업을 수행합니다. 이 랩에서는 file, copy, debug 모듈을 사용했습니다.
  4. 변수는 플레이북에서 유연성과 재사용성을 높이기 위해 정의하고 사용할 수 있습니다. {{ }} 구문을 사용하여 참조합니다.
  5. debug 모듈은 플레이북 실행 중에 정보를 표시하는 데 유용하며, 문제 해결에 도움이 될 수 있습니다.
  6. 올바른 들여쓰기는 YAML 파일 및 Ansible 플레이북에서 매우 중요합니다.

Ansible 여정을 계속 진행하면서 플레이북이 복잡한 IT 작업을 자동화하는 강력한 도구임을 알게 될 것입니다. 다양한 시나리오에 대한 플레이북을 작성하여 구조와 기능에 더 익숙해지십시오. 오늘 만든 플레이북을 수정해 보세요. 디렉토리 경로를 변경하거나, 더 많은 작업을 추가하거나, 다른 모듈을 사용해 보세요.

향후 랩에서는 조건문, 루프, 역할과 같은 더 고급 플레이북 기능에 대해 배우게 됩니다. 이를 통해 훨씬 더 강력하고 유연한 자동화 워크플로우를 만들 수 있습니다.

기억하세요. Ansible 을 마스터하는 핵심은 연습과 탐구입니다. 플레이북에서 다양한 모듈과 구조를 실험하는 것을 두려워하지 마세요. Ansible 문서는 기술을 배우고 향상시키는 데 훌륭한 자료입니다.