provider-actions은(는) 무엇을 하나요?
Plugin Framework를 사용하여 Terraform Provider 액션을 구현합니다. 생성, 업데이트, 삭제와 같은 라이프사이클 이벤트 전후에 실행되는 명령형 작업을 개발할 때 사용하세요.
개요
Terraform Provider 개발 시, 리소스의 생성, 읽기, 업데이트, 삭제(CRUD) 외에도 특정 라이프사이클 이벤트 시점에 추가적인 로직을 실행해야 할 필요가 있습니다. hashicorp/provider-actions 스킬은 이러한 명령형 액션을 Plugin Framework에서 정의하고 등록하는 방법을 안내합니다.
지원 기능
다음과 같은 라이프사이클 훅을 지원합니다:
BeforeCreate- 리소스 생성 전 실행AfterCreate- 리소스 생성 후 실행BeforeUpdate- 리소스 업데이트 전 실행AfterUpdate- 리소스 업데이트 후 실행BeforeDelete- 리소스 삭제 전 실행AfterDelete- 리소스 삭제 후 실행
사용 방법
-
액션 핸들러 정의: 적절한 함수 시그니처를 따르는 액션 핸들러를 Go 코드로 작성합니다.
func (r *SomeResource) BeforeCreate(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { // 사전 처리 로직 } -
리소스에 액션 등록: 리소스 정의에서 해당 액션 함수를 등록합니다.
func (r *SomeResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) { // 기본 생성 로직과 함께 액션 호출 r.BeforeCreate(ctx, req, resp) // ... 기본 CRUD 구현 ... r.AfterCreate(ctx, req, resp) }
예시
아래는 외부 API 호출 전에 유효성을 검사하는 BeforeCreate 액션의 예시입니다:
func (r *exampleResource) BeforeCreate(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
var data ExampleModel
diags := req.Plan.Get(ctx, &data)
resp.Diagnostics.Append(diags...)
if resp.Diagnostics.HasError() {
return
}
if data.Name.ValueString() == "" {
resp.Diagnostics.AddError("Validation Error", "Name must not be empty")
return
}
// 추가 검증 또는 전처리 로직
}
참고사항
- 액션 함수는 동기적으로 실행되므로, 블로킹 작업은 주의해서 사용해야 합니다.
- 오류가 발생하면
resp.Diagnostics에 추가하여 Terraform이 적절히 처리할 수 있도록 합니다. - 액션 내에서 리소스 상태를 읽거나 수정할 수 있지만, CRUD 주체 로직과의 충돌을 방지하기 위해 주의해야 합니다.
관련 문서
라이선스
이 스킬은 Apache 2.0 라이선스 하에 제공됩니다.