본문 바로가기
개발/Terraform on NaverCloud

오픈 소스 기여하기 : panic 원인 파악하기

by 컴쏘 2023. 8. 1.

저번 시도에 rule_list를 argument에서 block 형태로 변경해주었다. 

 

하지만... 결과는 FAIL ... !

panic이 발생했다. 

 

그 이유에 대해서 파악해보자. 

 

저번에 마주했던 panic의 내용은 다음과 같다.

=== RUN   TestAccNcloudLoadBalancerSSLCertificateBasic
panic: runtime error: index out of range [0] with length 0

goroutine 233 [running]:
github.com/terraform-providers/terraform-provider-ncloud/internal/service/classicloadbalancer.resourceNcloudLoadBalancerSSLCertificateCreate(0x0?, {0x159ce20?, 0xc000570740})
        C:/Users/jpark/Desktop/terraform_sohyun/terraform-provider-ncloud/internal/service/classicloadbalancer/load_balancer_ssl_certificate.go:76 +0x205
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*Resource).create(0x18ff940?, {0x18ff940?, 0xc000722390?}, 0xd?, {0x159ce20?, 0xc000570740?})
        C:/Users/jpark/go/pkg/mod/github.com/hashicorp/terraform-plugin-sdk/v2@v2.24.1/helper/schema/resource.go:695 +0x178
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*Resource).Apply(0xc00048cd20, {0x18ff940, 0xc000722390}, 0xc0009bc4e0, 0xc0006bdc00, {0x159ce20, 0xc000570740})
        C:/Users/jpark/go/pkg/mod/github.com/hashicorp/terraform-plugin-sdk/v2@v2.24.1/helper/schema/resource.go:837 +0xa85
github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema.(*GRPCProviderServer).ApplyResourceChange(0xc0000080d8, {0x18ff940?, 0xc0007222d0?}, 0xc000544960)
        C:/Users/jpark/go/pkg/mod/github.com/hashicorp/terraform-plugin-sdk/v2@v2.24.1/helper/schema/grpc_provider.go:1021 +0xe8d
github.com/hashicorp/terraform-plugin-go/tfprotov5/tf5server.(*server).ApplyResourceChange(0xc000472be0, {0x18ff940?, 0xc00070faa0?}, 0xc000190d20)
        C:/Users/jpark/go/pkg/mod/github.com/hashicorp/terraform-plugin-go@v0.14.1/tfprotov5/tf5server/server.go:818 +0x574
github.com/hashicorp/terraform-plugin-go/tfprotov5/internal/tfplugin5._Provider_ApplyResourceChange_Handler({0x172bda0?, 0xc000472be0}, {0x18ff940, 0xc00070faa0}, 0xc000190cb0, 0x0)   
        C:/Users/jpark/go/pkg/mod/github.com/hashicorp/terraform-plugin-go@v0.14.1/tfprotov5/internal/tfplugin5/tfplugin5_grpc.pb.go:385 +0x170
google.golang.org/grpc.(*Server).processUnaryRPC(0xc0004a65a0, {0x1903718, 0xc00008cea0}, 0xc00083c360, 0xc00073e8d0, 0x1f5d6a0, 0x0)
        C:/Users/jpark/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:1336 +0xd33
google.golang.org/grpc.(*Server).handleStream(0xc0004a65a0, {0x1903718, 0xc00008cea0}, 0xc00083c360, 0x0)
        C:/Users/jpark/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:1704 +0xa36
google.golang.org/grpc.(*Server).serveStreams.func1.2()
        C:/Users/jpark/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:965 +0x98
created by google.golang.org/grpc.(*Server).serveStreams.func1
        C:/Users/jpark/go/pkg/mod/google.golang.org/grpc@v1.53.0/server.go:963 +0x28a
FAIL    command-line-arguments  1.804s
FAIL

 

추측 : 인증서 생성에서 발생한 오류

 

panic의 주요 내용은 다음과 같다.  

panic: runtime error: index out of range [0] with length 0

길이가 0인데 값을 넣으려고 하니 panic 발생

 

github.com/terraform-providers/terraform-provider-ncloud/internal/service/classicloadbalancer.resourceNcloudLoadBalancerSSLCertificateCreate(0x0?, {0x159ce20?, 0xc000570740})
        C:/Users/jpark/Desktop/terraform_sohyun/terraform-provider-ncloud/internal/service/classicloadbalancer/load_balancer_ssl_certificate.go:76 +0x205

load_balancer_ssl_certificate.go resourceNcloudLoadBalancerSSLCertificateCreate 에서 76번째 줄에서 오류 발생

 

또 문서를 찾아봤다. 

 

Terraform Registry

 

registry.terraform.io

문서에 나온 내용은 다음과 같다. 

 

Resource: load_balancer_ssl_certificate

resource "ncloud_load_balancer_ssl_certificate" "cert" {
  certificate_name      = "tftest_ssl_cert"
  privatekey            = "${file("lbtest.privateKey")}"
  publickey_certificate = "${file("lbtest.crt")}"
  certificate_chain     = "${file("lbtest.chain")}"
}

 

작성된 load_balancer_ssl_certificate_test.go 코드 - testAccLoadBalancerSSLCertificateConfig 함수 중 일부

resource "ncloud_load_balancer_ssl_certificate" "cert" {
			certificate_name      = "%s"
			privatekey            = "%s"
			publickey_certificate = "%s"
		}

 

위의 2개의 코드의 차이는 certificate_chain이 작성된 test 코드에는 없다는 것이다.

따라서 certificate_chain을 넣어보기로 결정했다.

 

하지만... 어떻게...? 넣어야 할지를 모른다..

test 코드 상에는 certificate_name, privatekey, publickey_certificate은 있지만, certificate_chain은 없기 때문이다. 

 

멘토님께 여쭈어보기

멘토님께 질문

 

멘토님과 이야기를 해본 결과 ...

조금 더 시도해보고 안되면 block 형태로 바꾼 것만 pr올리고 이슈 새로 생성하기로 결정했다.

 

이것 저것 해보다가 pr을 올리고 이슈를 생성하기로 결정하였다. 

pr 올리기
이슈 생성하기

 

네이버 클라우드에 두 발자국 남기기 !