Ansible Playbook에서 loop와 when 조건문을 사용하는 방법(ansible-playbook)
Ansible Playbook에서는 반복 작업(loop)과 조건 실행(when)을 통해 여러 대상에 동일한 작업을 수행하거나 특정 조건에서만 작업을 실행할 수 있다.
1. Playbook 예제 작성
Playbook 파일을 생성한다.
vim example2.yml
---
- name: Chrony 설치 및 설정
hosts: all
become: true
gather_facts: true
vars:
users:
- ansible_user1
- ansible_user2
- ansible_user3
tasks:
- name: 사용자 계정 생성
ansible.builtin.user:
name: "{{ item }}"
state: present
loop: "{{ users }}"
- name: Chrony 패키지 설치
ansible.builtin.package:
name: chrony
state: present
- name: Chrony 서비스 시작 (Ubuntu에서만 실행)
ansible.builtin.service:
name: chrony
state: started
enabled: true
when: "'Ubuntu' in ansible_distribution"
- name: 작업 완료 메시지 출력
ansible.builtin.debug:
msg: "Chrony installation and start completed on {{ inventory_hostname }}"
###
# ansible-playbook -i inventory/hosts.ini ansible_learn/example2.yml --limit localhost
2. Playbook 주요 구성 설명
변수 정의
vars:
users:
- ansible_user1
- ansible_user2
- ansible_user3
- 사용자 계정 목록을 리스트 형태로 정의
- 이후 loop에서 반복 처리
loop를 이용한 반복 작업
- name: 사용자 계정 생성
ansible.builtin.user:
name: "{{ item }}"
state: present
loop: "{{ users }}"
- users 리스트의 값을 하나씩 item 변수에 전달
- 각 사용자 계정을 순차적으로 생성
실행 흐름
ansible_user1 생성
ansible_user2 생성
ansible_user3 생성
패키지 설치
- name: Chrony 패키지 설치
ansible.builtin.package:
name: chrony
state: present
package 모듈은 OS에 맞는 패키지 관리자를 자동 사용
- Debian/Ubuntu → apt
- RHEL/CentOS → yum 또는 dnf
설치 대상 패키지
- Chrony (NTP 동기화 서비스)
when 조건문 사용
- name: Chrony 서비스 시작 (Ubuntu에서만 실행)
ansible.builtin.service:
name: chrony
state: started
enabled: true
when: "'Ubuntu' in ansible_distribution"
- when 조건문을 사용하여 특정 OS에서만 실행
- ansible_distribution fact 값을 이용
예시
- Ubuntu : 실행
- Debian : 실행 안함
- CentOS : 실행 안함
디버그 메시지 출력
- name: 작업 완료 메시지 출력
ansible.builtin.debug:
msg: "Chrony installation and start completed on {{ inventory_hostname }}"
- 작업 완료 후 호스트별 메시지를 출력
- inventory_hostname은 현재 실행 중인 대상 호스트 이름
3. Playbook 실행
실행 명령어
ansible-playbook -i inventory/hosts.ini ansible_learn/example2.yml --limit localhost
- -i : 인벤토리 파일 지정
- --limit : 실행 대상 호스트 제한
- example2.yml : 실행할 Playbook

4. 참고 사항 (Ansible 권장 방식)
기존 Ansible 문서에서는 다음과 같은 방식도 사용된다.
with_items
그러나 최신 Ansible에서는 loop 사용이 권장된다.
| 기존 방식 | 권장 방식 |
| with_items | loop |
| with_dict | loop + dict2items |
| with_list | loop |
참고URL
- Ansible Documentation : ansible playbook loop
- Ansible Documentation : ansible playbook conditional
앤서블 플레이북 루프
'리눅스' 카테고리의 다른 글
| [draft] Ansible Playbook에서 register와 debug 모듈 사용하는 방법 (1) | 2026.03.08 |
|---|---|
| [draft] Ansible Playbook에서 block, rescue, loop, always를 사용하는 방법 (0) | 2026.03.08 |
| [draft] MySQL 5.7 초기 비밀번호 변경 오류 해결 방법 (0) | 2026.03.07 |
| [draft] smem 명령어 (0) | 2026.03.07 |
| [draft] Docker Compose 리소스 제약 조건 구성 (0) | 2026.03.07 |