HCL 템플릿 개요
HCL 템플릿 개요
HashiCorp 구성 언어(HCL)로 작성된 Packer 템플릿에 대한 개요를 정리한 문서예요. 템플릿을 코드로 정의하는 기본 개념을 살펴볼 수 있습니다.
출처: Packer 공식 문서
본문
소개 (Introduction)
Packer는 HCL 템플릿 파일에 정의된 구성을 읽고 적용해요. HCL 템플릿은 빌드 파일에 도달하기까지 필요한 단계를 간결하게 설명해 줍니다. 인자(arguments), 블록(blocks), 표현식(expressions)을 HCL 템플릿에 추가해서 빌드를 코드로 정의할 수 있어요. 자세한 내용은 Introduction to Packer HCL2 문서를 참고하세요.
빌드 (Builds)
HCL 언어의 주요 목적은 빌드와 소스를 정의하는 것이에요. 그 외의 모든 언어 기능은 빌드 정의를 더 유연하고 편리하게 만들기 위해서만 존재합니다.
packer build는 하나의 인자를 받아요. 디렉터리가 전달되면 그 폴더 안에서 이름이 .pkr.hcl 또는 .pkr.json로 끝나는 모든 파일이 HCL2 형식으로 파싱됩니다. .pkr.hcl 또는 .pkr.json로 끝나는 파일이 전달되면 HCL2 스키마로 파싱돼요. 그 외의 모든 경우에는 JSON 전용의 기존 packer 스키마가 사용됩니다.
인자, 블록, 표현식 (Arguments, blocks, and expressions)
HCL 언어의 문법은 몇 가지 기본 요소로만 구성됩니다.
source "amazon-ebs" "main" {
ami_name = "main-ami"
}
<BLOCK TYPE> "<BLOCK LABEL>" "<BLOCK LABEL>" {
# Block body
<IDENTIFIER> = <EXPRESSION> # Argument
}
- 블록(Blocks)은 다른 내용을 담는 컨테이너로, 보통 source 같은 어떤 객체의 구성을 나타내요. 블록은 블록 타입을 가지며, 0개 이상의 레이블(label)을 가질 수 있고, 여러 인자와 중첩 블록을 담는 본문(body)을 가집니다. Packer의 대부분 기능은 설정 파일의 최상위 블록으로 제어돼요.
- 인자(Arguments)는 이름에 값을 할당해요. 블록 안에 나타납니다.
- 표현식(Expressions)은 값을 나타내며, 말 그대로 그대로 쓰거나 다른 값을 참조·결합해서 사용해요. 인자의 값이나 다른 표현식 안에 값으로 나타납니다.
Packer 문법에 대한 자세한 내용은 다음을 참고하세요.
- Configuration Syntax
- Expressions
코드 구성 (Code organization)
HCL 언어는 .pkr.hcl 파일 확장자로 이름 지어진 구성 파일을 사용해요. 언어의 JSON 기반 변형도 있으며 .pkr.json 파일 확장자로 이름 지어집니다.
구성 파일은 항상 UTF-8 인코딩을 사용해야 해요. 그리고 관례상 보통 Windows 스타일 줄바꿈(CRLF)보다 유닉스 스타일 줄바꿈(LF)을 유지하지만, 둘 다 허용됩니다.
구성 순서 (Configuration ordering)
최상위 블록의 순서는 중요하지 않아요. 한 build 안에서 provisioner 또는 post-processor 블록의 순서만이 블록 순서가 중요한 유일한 주요 기능입니다.