Skip to content

Commit

Permalink
Fix: invalid memory address or nil pointer dereference #88
Browse files Browse the repository at this point in the history
  • Loading branch information
littlejo committed Mar 25, 2024
1 parent af190aa commit 2fd33ad
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 334 deletions.
28 changes: 16 additions & 12 deletions cilium/install.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ import (
"helm.sh/helm/v3/pkg/action"
"helm.sh/helm/v3/pkg/cli/values"
"helm.sh/helm/v3/pkg/release"
"k8s.io/cli-runtime/pkg/genericclioptions"

"github.com/hashicorp/terraform-plugin-framework/path"
"github.com/hashicorp/terraform-plugin-framework/resource"
Expand Down Expand Up @@ -226,7 +225,7 @@ func (r *CiliumInstallResource) Create(ctx context.Context, req resource.CreateR
// For the purposes of this example code, hardcoding a response value to
// save into the Terraform state.
data.Id = types.StringValue("cilium")
helm_values, err := GetHelmValues(k8sClient.RESTClientGetter, namespace, "cilium")
helm_values, err := GetHelmValues(k8sClient, namespace, "cilium")
if err != nil {
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to install Cilium: %s", err))
return
Expand Down Expand Up @@ -255,14 +254,14 @@ func (r *CiliumInstallResource) Wait(namespace string) (err error) {
}

func GetCurrentRelease(
k8sClient genericclioptions.RESTClientGetter,
k8sClient *k8s.Client,
namespace, name string,
) (*release.Release, error) {
// Use the default Helm driver (Kubernetes secret).
helmDriver := ""
actionConfig := action.Configuration{}
logger := func(format string, v ...interface{}) {}
if err := actionConfig.Init(k8sClient, namespace, helmDriver, logger); err != nil {
if err := actionConfig.Init(k8sClient.RESTClientGetter, namespace, helmDriver, logger); err != nil {
return nil, err
}
currentRelease, err := actionConfig.Releases.Last(name)
Expand All @@ -273,13 +272,13 @@ func GetCurrentRelease(
}

func GetHelmValues(
k8sClient genericclioptions.RESTClientGetter,
k8sClient *k8s.Client,
namespace, name string,
) (string, error) {
helmDriver := ""
actionConfig := action.Configuration{}
logger := func(format string, v ...interface{}) {}
if err := actionConfig.Init(k8sClient, namespace, helmDriver, logger); err != nil {
if err := actionConfig.Init(k8sClient.RESTClientGetter, namespace, helmDriver, logger); err != nil {
return "", err
}
client := action.NewGetValues(&actionConfig)
Expand All @@ -297,13 +296,13 @@ func GetHelmValues(
}

func GetMetadata(
k8sClient genericclioptions.RESTClientGetter,
k8sClient *k8s.Client,
namespace, name string,
) (string, string, error) {
helmDriver := ""
actionConfig := action.Configuration{}
logger := func(format string, v ...interface{}) {}
if err := actionConfig.Init(k8sClient, namespace, helmDriver, logger); err != nil {
if err := actionConfig.Init(k8sClient.RESTClientGetter, namespace, helmDriver, logger); err != nil {
return "", "", err
}
client := action.NewGetMetadata(&actionConfig)
Expand All @@ -327,19 +326,24 @@ func (r *CiliumInstallResource) Read(ctx context.Context, req resource.ReadReque
return
}

if k8sClient == nil {
resp.Diagnostics.AddError("Client Error", "Unable to connect to kubernetes")
return
}

namespace := data.Namespace.ValueString()

_, err := GetCurrentRelease(k8sClient.RESTClientGetter, namespace, "cilium")
_, err := GetCurrentRelease(k8sClient, namespace, "cilium")
if err != nil {
resp.State.RemoveResource(ctx)
return
}
helm_values, err := GetHelmValues(k8sClient.RESTClientGetter, namespace, "cilium")
helm_values, err := GetHelmValues(k8sClient, namespace, "cilium")
if err != nil {
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to read tfstate: %s", err))
return
}
version, ns, err := GetMetadata(k8sClient.RESTClientGetter, namespace, "cilium")
version, ns, err := GetMetadata(k8sClient, namespace, "cilium")
if err != nil {
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to read tfstate: %s", err))
return
Expand Down Expand Up @@ -416,7 +420,7 @@ func (r *CiliumInstallResource) Update(ctx context.Context, req resource.UpdateR
}
}

helm_values, err := GetHelmValues(k8sClient.RESTClientGetter, namespace, "cilium")
helm_values, err := GetHelmValues(k8sClient, namespace, "cilium")
if err != nil {
resp.Diagnostics.AddError("Client Error", fmt.Sprintf("Unable to upgrade Cilium: %s", err))
return
Expand Down
20 changes: 1 addition & 19 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ require (
gopkg.in/yaml.v3 v3.0.1
helm.sh/helm/v3 v3.14.3
k8s.io/apimachinery v0.29.3
k8s.io/cli-runtime v0.29.3
)

require (
Expand All @@ -28,7 +27,6 @@ require (
github.com/Microsoft/hcsshim v0.11.4 // indirect
github.com/ProtonMail/go-crypto v1.1.0-alpha.0 // indirect
github.com/agext/levenshtein v1.2.2 // indirect
github.com/andybalholm/brotli v1.0.1 // indirect
github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect
github.com/armon/go-radix v1.0.0 // indirect
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
Expand Down Expand Up @@ -59,8 +57,6 @@ require (
github.com/docker/docker-credential-helpers v0.7.0 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-metrics v0.0.1 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dsnet/compress v0.0.2-0.20210315054119-f66993602bf5 // indirect
github.com/emicklei/go-restful/v3 v3.11.2 // indirect
github.com/envoyproxy/protoc-gen-validate v1.0.4 // indirect
github.com/evanphx/json-patch v5.9.0+incompatible // indirect
Expand All @@ -72,7 +68,6 @@ require (
github.com/go-gorp/gorp/v3 v3.1.0 // indirect
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-openapi/analysis v0.22.2 // indirect
github.com/go-openapi/errors v0.22.0 // indirect
github.com/go-openapi/jsonpointer v0.20.2 // indirect
Expand All @@ -87,7 +82,6 @@ require (
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/golang/snappy v0.0.4 // indirect
github.com/google/btree v1.1.2 // indirect
github.com/google/certificate-transparency-go v1.1.7 // indirect
github.com/google/gnostic-models v0.6.8 // indirect
Expand Down Expand Up @@ -128,21 +122,18 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.0 // indirect
github.com/klauspost/pgzip v1.2.5 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/kr/text v0.2.0 // indirect
github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect
github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect
github.com/lib/pq v1.10.9 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/lufia/plan9stats v0.0.0-20230326075908-cb1d2100619a // indirect
github.com/mackerelio/go-osstat v0.2.4 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mailru/easyjson v0.7.7 // indirect
github.com/mattn/go-colorable v0.1.13 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mholt/archiver/v3 v3.5.1 // indirect
github.com/mitchellh/copystructure v1.2.0 // indirect
github.com/mitchellh/go-testing-interface v1.14.1 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
Expand All @@ -154,10 +145,8 @@ require (
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/morikuni/aec v1.0.0 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/nwaples/rardecode v1.1.0 // indirect
github.com/oklog/run v1.0.0 // indirect
github.com/oklog/ulid v1.3.1 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
Expand All @@ -167,12 +156,10 @@ require (
github.com/pelletier/go-toml/v2 v2.1.0 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/petermattis/goid v0.0.0-20230904192822-1876fd5063bc // indirect
github.com/pierrec/lz4/v4 v4.1.2 // indirect
github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/power-devops/perfstat v0.0.0-20221212215047-62379fc7944b // indirect
github.com/prometheus/client_golang v1.19.0 // indirect
github.com/prometheus/client_model v0.6.0 // indirect
github.com/prometheus/common v0.50.0 // indirect
Expand All @@ -185,7 +172,6 @@ require (
github.com/sagikazarmark/locafero v0.4.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sasha-s/go-deadlock v0.3.1 // indirect
github.com/shirou/gopsutil/v3 v3.23.9 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
Expand All @@ -195,9 +181,6 @@ require (
github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace // indirect
github.com/spf13/viper v1.18.2 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/tklauser/go-sysconf v0.3.12 // indirect
github.com/tklauser/numcpus v0.6.1 // indirect
github.com/ulikunitz/xz v0.5.10 // indirect
github.com/vishvananda/netlink v1.2.1-beta.2.0.20231127184239-0ced8385386a // indirect
github.com/vishvananda/netns v0.0.4 // indirect
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
Expand All @@ -207,11 +190,9 @@ require (
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
github.com/yuin/goldmark v1.6.0 // indirect
github.com/yuin/goldmark-meta v1.1.0 // indirect
github.com/yusufpapurcu/wmi v1.2.3 // indirect
github.com/zclconf/go-cty v1.14.3 // indirect
github.com/zmap/zcrypto v0.0.0-20230310154051-c8b263fd8300 // indirect
github.com/zmap/zlint/v3 v3.5.0 // indirect
Expand Down Expand Up @@ -248,6 +229,7 @@ require (
k8s.io/api v0.29.3 // indirect
k8s.io/apiextensions-apiserver v0.29.2 // indirect
k8s.io/apiserver v0.29.2 // indirect
k8s.io/cli-runtime v0.29.3 // indirect
k8s.io/client-go v0.29.3 // indirect
k8s.io/component-base v0.29.2 // indirect
k8s.io/klog/v2 v2.120.0 // indirect
Expand Down
Loading

0 comments on commit 2fd33ad

Please sign in to comment.