소개
이 랩에서는 Ansible 플레이북의 기본 사항을 배우게 됩니다. Ansible 플레이북은 원격 호스트에서 실행될 작업 집합을 설명하는 YAML 파일입니다. 복잡한 IT 자동화 워크플로우의 구성 요소입니다. 첫 번째 플레이북을 만들고, 구조를 이해하고, 실행하는 방법을 배우게 됩니다. 이 랩을 마치면 Ansible 플레이북을 작성하고 실행하는 실질적인 경험을 얻게 되며, 이는 더 발전된 Ansible 사용의 기반이 될 것입니다.
이 랩에서는 Ansible 플레이북의 기본 사항을 배우게 됩니다. Ansible 플레이북은 원격 호스트에서 실행될 작업 집합을 설명하는 YAML 파일입니다. 복잡한 IT 자동화 워크플로우의 구성 요소입니다. 첫 번째 플레이북을 만들고, 구조를 이해하고, 실행하는 방법을 배우게 됩니다. 이 랩을 마치면 Ansible 플레이북을 작성하고 실행하는 실질적인 경험을 얻게 되며, 이는 더 발전된 Ansible 사용의 기반이 될 것입니다.
로컬 머신에 디렉토리와 파일을 생성하는 간단한 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이 있습니다. 이는 각 작업이 무엇을 하는지 이해하고 문제 해결을 더 쉽게 만듭니다.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
저장하고 편집기를 종료합니다.
이 주석 처리된 플레이북 버전은 각 요소의 구조와 목적을 이해하는 데 도움이 됩니다. 기억해야 할 몇 가지 주요 사항은 다음과 같습니다.
-) 로 시작합니다. 이 경우, 우리는 하나의 플레이만 가지고 있습니다.hosts 필드는 플레이가 실행되어야 하는 머신을 지정합니다.file 및 copy) 을 사용하여 작업을 수행합니다. Ansible 에는 다양한 목적으로 사용할 수 있는 많은 내장 모듈이 있습니다.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 }}"
이 업데이트된 플레이북의 변경 사항과 새로운 요소를 분석해 보겠습니다.
변수를 정의하기 위해 vars 섹션을 추가했습니다. 이 섹션에서 플레이북에서 여러 번 사용할 값을 설정할 수 있습니다.
dir_path와 file_content는 이제 변수입니다. 이러한 값을 한 곳에서 쉽게 변경하여 여러 작업에 영향을 줄 수 있습니다.
{{ }} 구문을 사용하여 변수를 참조하고 있습니다. 이는 Ansible 에게 변수를 해당 값으로 바꾸도록 지시합니다.
현재 타임스탬프를 포함하기 위해 Ansible 의 내장 변수인 ansible_date_time.iso8601을 사용했습니다. Ansible 은 플레이북에서 사용할 수 있는 많은 이러한 변수를 제공합니다.
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 플레이북의 기본 사항을 배웠습니다. 첫 번째 간단한 플레이북을 만드는 것부터 시작하여 구조를 이해하고 변수를 사용하여 플레이북을 더 동적이고 재사용 가능하게 만드는 방법을 배웠습니다.
이 랩의 주요 내용:
file, copy, debug 모듈을 사용했습니다.{{ }} 구문을 사용하여 참조합니다.debug 모듈은 플레이북 실행 중에 정보를 표시하는 데 유용하며, 문제 해결에 도움이 될 수 있습니다.Ansible 여정을 계속 진행하면서 플레이북이 복잡한 IT 작업을 자동화하는 강력한 도구임을 알게 될 것입니다. 다양한 시나리오에 대한 플레이북을 작성하여 구조와 기능에 더 익숙해지십시오. 오늘 만든 플레이북을 수정해 보세요. 디렉토리 경로를 변경하거나, 더 많은 작업을 추가하거나, 다른 모듈을 사용해 보세요.
향후 랩에서는 조건문, 루프, 역할과 같은 더 고급 플레이북 기능에 대해 배우게 됩니다. 이를 통해 훨씬 더 강력하고 유연한 자동화 워크플로우를 만들 수 있습니다.
기억하세요. Ansible 을 마스터하는 핵심은 연습과 탐구입니다. 플레이북에서 다양한 모듈과 구조를 실험하는 것을 두려워하지 마세요. Ansible 문서는 기술을 배우고 향상시키는 데 훌륭한 자료입니다.