본문 바로가기

활동들~

[오픈소스] 테라폼 GetOk()의 Zero-value 이슈 해결하기

오픈소스 url : https://github.com/NaverCloudPlatform/terraform-provider-ncloud
네이버 클라우드 API 문서 : https://api.ncloud-docs.com/docs

 

GetOk( ) 란?

GetOk("ParameterName") 함수는 사용자가 리소스에 입력한 값들을 읽어오는 함수입니다. 입력된 파라미터 이름으로 값을 읽어온 후, Value와 ok를 반환합니다.

GetOk 함수를 사용할 때의 문제 

사용자가 아래와 같이 Zero-Value(0, false)를 값으로 입력할 경우, GetOk의 ok는 false로 받게 됩니다. 

resource "resource" "name" {
	... 
	cnt = 0
	...
}

v, ok := GetOk("cnt")
// v = 0
// ok = false, 입력했지만, true가 아닌 false가 나옴

그런데 GetOk 함수는 보통 사용자의 값 입력 유무에 따라, 분기를 나눠 아래와 같이 사용합니다.

if v, ok := GetOk("paramName"); ok {
	// 해당 param이 입력되었을 때, 로직
}

따라서, 사용자가 0값을 입력해도, 입력이 안된것으로 처리되어 문제가 발생하게 됩니다.

 

예를 들어, 아래의 코드에서는 사용자가 0을 입력해도, nil로 입력이 됩니다. 

params{
	...
	reqParam: Int32PtrOrNil(GetOk("ParamName"))
    ...
}

해결법

Get 함수는 입력한 값이 있으면, 해당 값을 반환하고, 입력 값이 없다면 default 값으로 반환합니다.

따라서 GetOk 함수 대신 Get 함수로 변경해주고, default 값을 설정해줍니다.

schema {
  ...
  "paramName": {
    default : 100 // default 추가
  },
  ...
}

params{
	...
	reqParam:int32(Get("paramName").(int))
    ...
}

 

'활동들~' 카테고리의 다른 글

429(Too Many Request) 에러 해결하기  (1) 2024.05.13
Pob Build Cost 프로젝트  (0) 2024.04.20
[오픈소스] NCP 테라폼 validation 검증하기  (0) 2024.02.21