Ansible 플레이북에 변수 전달 방법

AnsibleBeginner
지금 연습하기

소개

Ansible 은 IT 인프라 관리를 간소화하는 강력한 자동화 도구입니다. Ansible 의 주요 기능 중 하나는 변수를 처리할 수 있는 능력으로, 이를 통해 플레이북을 더욱 역동적이고 적응력 있게 만들 수 있습니다. 이 튜토리얼에서는 기본적인 방법부터 고급 기술까지 Ansible 플레이북에 변수를 전달하는 방법을 탐색하여 자동화 워크플로를 최적화하는 데 도움을 드립니다.

Ansible 변수 소개

Ansible 은 IT 자동화 도구로, 인프라와 애플리케이션을 손쉽게 관리할 수 있도록 지원합니다. Ansible 의 주요 기능 중 하나는 플레이북 내에서 데이터를 저장하고 조작하는 데 사용되는 변수를 활용하는 것입니다.

Ansible 변수는 다음과 같은 여러 수준에서 정의될 수 있습니다.

호스트 수준 변수

특정 호스트 또는 호스트 그룹에 특정한 변수입니다. 인벤토리 파일이나 별도의 변수 파일에 정의할 수 있습니다.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

그룹 수준 변수

호스트 그룹에 적용되는 변수입니다. 인벤토리 파일이나 별도의 변수 파일에 정의할 수 있습니다.

## group_vars/webservers.yml
app_name: MyApp
db_host: 10.0.0.50

플레이 수준 변수

플레이북 내 특정 플레이에 특정한 변수입니다. 플레이 내부에서 정의할 수 있습니다.

- hosts: webservers
  vars:
    app_port: 8080
    log_level: info

태스크 수준 변수

플레이 내 특정 태스크에 특정한 변수입니다. 태스크 내부에서 정의할 수 있습니다.

- name: 패키지 설치
  apt:
    name: "{{ package_name }}"
    state: present
  vars:
    package_name: nginx

다양한 유형의 변수를 사용하는 방법을 이해하는 것은 Ansible 플레이북을 효과적으로 관리하고 인프라를 자동화하는 데 필수적입니다.

Passing Variables to Ansible Playbooks

Now that you have a basic understanding of Ansible variables, let's explore how to pass variables to your Ansible playbooks. There are several ways to do this:

Command-line Arguments

You can pass variables to your playbook using the -e or --extra-vars option when running the ansible-playbook command.

ansible-playbook site.yml -e "app_version=2.2 db_host=10.0.0.60"

Variable Files

You can define variables in separate YAML files and pass them to your playbook using the --extra-vars option.

ansible-playbook site.yml --extra-vars "@vars.yml"
## vars.yml
app_name: MyApp
app_version: 2.2
db_host: 10.0.0.60

Inventory Variables

As mentioned in the previous section, you can define variables in your inventory file and they will be available to your playbook.

## inventory.yml
all:
  hosts:
    webserver1:
      ansible_host: 192.168.1.100
      app_version: 2.0
    webserver2:
      ansible_host: 192.168.1.101
      app_version: 2.1

Playbook Variables

You can also define variables within your playbook using the vars keyword.

- hosts: webservers
  vars:
    app_name: MyApp
    app_version: 2.2
    db_host: 10.0.0.60
  tasks:
    - name: Print variables
      debug:
        msg: "App name: {{ app_name }}, App version: {{ app_version }}, DB host: {{ db_host }}"

By understanding these different ways of passing variables to your Ansible playbooks, you can make your automation more flexible and adaptable to different environments and requirements.

Ansible 변수 처리 고급 기능

Ansible 플레이북에 변수를 전달하는 기본적인 방법은 간단하지만, Ansible 은 변수 처리를 위한 더욱 고급 기능을 제공합니다. 이러한 기능들을 살펴보겠습니다.

변수 우선순위

Ansible 은 여러 변수 소스를 사용할 때 중요하게 고려해야 하는 명확한 변수 우선순위 순서를 가지고 있습니다. 높은 우선순위에서 낮은 우선순위 순서대로는 다음과 같습니다.

  1. 명령줄 매개변수 (예: -e "var=value")
  2. 태스크 매개변수 (예: 태스크 내 vars)
  3. 포함 매개변수 (예: 포함된 파일 내 vars)
  4. 블록 매개변수 (예: 블록 내 vars)
  5. 플레이 매개변수 (예: 플레이 내 vars)
  6. 역할 기본 변수 (예: defaults/main.yml)
  7. 인벤토리 변수 (예: inventory.yml 내)
  8. 호스트 팩트 (예: setup 모듈에서 수집)
  9. 역할 및 포함 변수 (예: vars/main.yml)
  10. 팩트 설정 (예: set_fact 모듈 사용)

이 우선순위 순서를 이해하면 충돌을 해결하고 변수가 의도한 대로 사용되도록 할 수 있습니다.

변수 필터 및 테스트

Ansible 은 Jinja2 필터와 테스트를 사용하여 변수를 조작하고 유효성을 검사할 수 있는 풍부한 기능을 제공합니다. 몇 가지 예는 다음과 같습니다.

  • default 필터: {{ my_var | default('default_value') }}
  • to_json 필터: {{ my_dict | to_json }}
  • is_defined 테스트: {% if my_var is defined %}...{% endif %}
  • is_number 테스트: {% if my_var is number %}...{% endif %}

이러한 기능은 복잡한 변수 시나리오를 처리하는 데 매우 유용합니다.

Vault 암호화 변수

Ansible 의 Vault 기능을 사용하면 암호나 API 키와 같은 민감한 변수를 암호화하여 플레이북에서 안전하게 저장하고 사용할 수 있습니다. 이는 인프라 자동화에서 보안을 유지하는 데 특히 중요합니다.

## vars.yml
db_password: !vault |
  $ANSIBLE_VAULT;1.1;AES256
  32313633326533343161663036623463
  3163303236303836343239653533326134
  3134613161623464

이러한 고급 변수 처리 기술을 이해하면 Ansible 자동화를 더욱 강력하고 안전하며 조직의 요구에 맞게 적응할 수 있도록 발전시킬 수 있습니다.

요약

이 Ansible 튜토리얼에서는 플레이북에 변수를 전달하는 방법, 간단한 변수 할당부터 더 복잡한 변수 처리 기법까지 배웠습니다. 변수 관리를 숙달함으로써, 변화하는 인프라 요구 사항에 적응하는 유연하고 동적인 Ansible 플레이북을 만들 수 있습니다. 이러한 전략을 적용하여 Ansible 기반 자동화를 향상시키고 IT 운영을 다음 단계로 끌어올리세요.