반응형
🧠 1. register : 작업 결과를 변수로 저장
✅ 개념
- register 는 특정 task의 실행 결과를 저장할 때 사용합니다.
- 결과에는 stdout, stderr, rc(return code), changed 등 실행 메타데이터가 포함됩니다.
✅ 사용 목적
- 명령의 출력값을 다음 task 에서 사용하기 위해서
- 조건 분기(when:)에 쓰기 위해서
✅ 예제
- name: Run a command
command: hostname
register: result
- debug:
var: result.stdout
=> 저장되는 내용은 다음과 같습니다.
result = {
"stdout": "my-server",
"stderr": "",
"rc": 0,
"changed": false,
...
}
🧠 2. set_fact: 실행 중 동적으로 변수 생성
✅ 개념
- set_fact는 실행 도중 변수를 직접 정의하는 데 사용됩니다.
- 내부적으로는 ansible_facts 딕셔너리에 저장됩니다.
✅ 사용 목적
- 이전 task의 결과 기반으로 새 변수 정의
- 조건부 분기 처리용 값 설정
- 루프나 반복문 내 변수 누적
✅ 예제
- name: Set a dynamic variable
set_fact:
env_type: "prod"
- debug:
var: env_type
⚠️ set_fact로 만든 변수는 사실상 호스트 facts로 취급되어 다음 task에서도 지속적으로 참조 가능합니다.
🧠 3. vars: 플레이북/role 수준에서 정적인 변수 정의
✅ 개념
- vars는 플레이북, 블록, task 등에서 미리 정의된 정적 변수입니다.
- 보통 조건 분기 없이 선언과 동시에 값이 확정됩니다.
✅ 사용 목적
- 플레이북 전체 또는 특정 블록에 필요한 기본 변수 정의
- 값이 고정된 설정값 정의
✅ 예제
- hosts: all
vars:
app_port: 8080
tasks:
- name: Show app port
debug:
var: app_port
✅ 여러 위치에서 정의 가능
위치 우선순위는 다음과 같습니다.
| CLI -e | 가장 높음 |
| set_fact | 높음 |
| Task-level vars | 중간 |
| Play-level vars | 낮음 |
| Inventory | 가장 낮음 |
🔍 세 가지 비교 요약
| 항목 | register | set_fact | vars |
| 언제 실행됨 | 특정 task 실행 결과가 나올 때 | 플레이 중간 task에서 실행될 때 | 플레이 시작 시점에 로딩됨 |
| 목적 | 명령 결과 저장 (stdout 등) | 동적 변수 생성, 조건 기반 변수 정의 | 정적 변수 정의 |
| 유지 범위 | 다음 task부터 사용 가능 | 다음 task부터 사용 가능 (ansible_facts로 저장) | 전체 task에서 사용 가능 |
| 수정 가능 여부 | X (자동 결과 저장) | O (동적으로 재정의 가능) | X (재정의하려면 다른 위치 필요) |
| 대표 사용 예 | 명령 출력 재사용 | 조건 기반 변수 설정 | 기본 설정값 지정 |
✅ 언제 뭘 써야 할까?
상황추천 도구
| 어떤 명령의 결과를 저장하고 싶다 | register |
| 플레이 중간에 조건 따라 변수를 만들고 싶다 | set_fact |
| 설정값을 미리 정의해두고 재사용하고 싶다 | vars |
| 변수를 조건적으로 계속 갱신해야 한다 | set_fact |
| 한 번 실행한 명령의 출력을 재가공해서 쓰고 싶다 | register + set_fact 조합 |
반응형