플레이북 작업하기
플레이북 작업하기 (Working with playbooks)
Ansible에서 작업장의 도구가 모듈이라면, 플레이북은 사용 설명서고, 호스트 인벤토리는 원재료라 할 수 있어요. 플레이북은 원격 시스템이 지켜야 할 정책이나 IT 프로세스의 일련의 단계를 기록하고 실행합니다. 이 페이지는 Ansible 플레이북 전반을 이해하기 위한 진입점이에요.
출처: 문서
본문
플레이북은 Ansible의 구성, 배포, 오케스트레이션 기능을 기록하고 실행해요. 원격 시스템이 강제해야 할 정책을 설명하거나, 일반적인 IT 프로세스의 일련의 단계를 설명할 수 있습니다.
Ansible 모듈이 작업장의 도구라면 플레이북은 사용 설명서이고, 호스트 인벤토리는 원재료입니다.
기본 수준에서 플레이북은 원격 머신의 구성을 관리하고 배포하는 데 사용할 수 있어요. 더 고급 수준에서는 롤링 업데이트를 포함한 다중 계층 롤아웃을 순서대로 진행하고, 다른 호스트에 액션을 위임하며, 그 과정에서 모니터링 서버와 로드 밸런서와 상호작용할 수 있습니다.
플레이북은 사람이 읽을 수 있도록 설계되었으며 기본 텍스트 언어로 작성됩니다. 플레이북과 그 포함 파일을 구성하는 방법은 여러 가지가 있으며, 우리는 그에 대한 제안과 Ansible을 최대한 활용하는 방법을 알려드릴게요.
이 안내서에서 다루는 주제
- 템플릿팅 (Jinja2) — Jinja2 예시 포함
- 필터로 데이터 다루기 — 정의되지 않은 변수 처리, true/false/null 값 정의(ternary), 데이터 타입 관리, 데이터 형식화(YAML/JSON), 데이터 결합·선택, 데이터 무작위화, 리스트 변수 관리, 집합/리스트에서 선택(set theory), 숫자 계산(math), 네트워크 상호작용 관리, 문자열·비밀번호 해싱·암호화, 텍스트 조작, 문자열 조작, UUID 관리, 날짜·시간 처리, Kubernetes 리소스 이름 얻기
- 테스트 (Tests) — 테스트 문법, 문자열 테스트, Vault, 진실값(truthiness) 테스트, 버전 비교, 집합 이론 테스트, 리스트 값 포함 테스트, 리스트 값이 True인지 테스트, 경로 테스트, 크기 형식 테스트, 작업 결과 테스트, 타입 테스트
- 룩업 (Lookups) — lookup 함수, query/q 함수
- 템플릿에서의 Python3 — 딕셔너리 뷰, dict.iteritems()
- now 함수: 현재 시간 가져오기
- undef 함수: 정의되지 않은 변수에 대한 힌트 추가하기
- 루프 (Loops) — 루프 비교, 루프 사용, lookup 대신 query로 loop에 리스트 입력 보장, 루프에 제어 추가, 중첩 루프, with_X에서 loop로 마이그레이션
- 작업이 실행될 위치 제어: 위임과 로컬 액션 — 위임할 수 없는 작업, 작업 위임, 위임 컨텍스트에서의 템플릿팅, 위임과 병렬 실행, 팩트 위임, 로컬 플레이북
- 조건문 (Conditionals) —
when기본 조건부, 조건부 디버깅, 흔히 쓰는 팩트 - 블록 (Blocks) — 블록으로 작업 묶기, 블록으로 오류 처리하기
- 핸들러: 변경 시 작업 실행 — 핸들러 예시, 핸들러 통지, 통지와 루프, 핸들러 이름 짓기, 플레이에 핸들러 삽입 순서, 핸들러 실행 시점 제어, 작업 변경 시점 정의, 핸들러와 변수, 롤에서의 핸들러, 핸들러에서의 include와 import, 메타 작업으로서의 핸들러, 한계
- 플레이북 오류 처리 — 실패한 명령 무시, 도달 불가능한 호스트 오류 무시, 도달 불가능한 호스트 재설정, 핸들러와 실패, 실패 정의, changed 정의, command와 shell의 성공 보장, 모든 호스트에서 플레이 중단, 블록에서 오류 제어
- 원격 환경 설정 — 작업에서 원격 환경 설정, 언어별 버전 관리자 사용
- Ansible 아티팩트 재사용 — 재사용 가능한 파일과 롤 만들기, 플레이북 재사용, 플레이북을 롤로 전환할 때, 파일과 롤 재사용, 작업을 핸들러로 재사용
- 롤 (Roles) — 롤 디렉터리 구조, 롤 저장·찾기, 롤 사용, 롤 인자 검증, 한 플레이에서 롤 여러 번 실행, 롤 의존성 사용, 롤에 모듈·플러그인 임베딩, Ansible Galaxy로 롤 공유
- 모듈 기본값 (Module defaults) — 모듈 기본값 그룹
- 대화형 입력: 프롬프트 —
vars_prompt로 공급된 값 해싱,vars_prompt값에 특수 문자 허용 - 변수 사용 — 유효한 변수 이름 만들기, 단순 변수, 변수 인용 시점(YAML 함정), 리스트 변수, 딕셔너리 변수, 변수 결합, 변수 등록, 중첩 변수 참조, Jinja2 필터로 변수 변환, 변수 설정 위치, 변수 우선순위, 고급 변수 문법
- 변수 발견: 팩트와 매직 변수 — Ansible 팩트, Ansible 정보: 매직 변수
- 플레이 인자 검증 (Play Argument Validation) — 명세 형식, 샘플 명세
- 플레이북 예시: 지속적 전달과 롤링 업그레이드 — 지속적 전달이란, 사이트 배포, 재사용 가능한 콘텐츠: 롤, 구성: 그룹 변수, 롤링 업그레이드, 다른 로드 밸런서 관리, 엔드투엔드 지속적 전달
더 알아보기 (Learn more)
- 플레이북 안내서의 전체 목차는 "Ansible 플레이북 사용하기(index)" 페이지에서 볼 수 있고, 각 주제 페이지는 서로 연결되어 있어 순서대로 읽으면 전체 흐름을 잡을 수 있어요.