diff --git a/.chainsaw.yaml b/.chainsaw.yaml index 2156b3e..52b5c74 100644 --- a/.chainsaw.yaml +++ b/.chainsaw.yaml @@ -5,11 +5,11 @@ metadata: spec: timeouts: apply: 45s - assert: 300s + assert: 600s cleanup: 45s delete: 25s error: 10s exec: 45s skipDelete: false failFast: true - parallel: 4 + parallel: 1 diff --git a/.gitignore b/.gitignore index 1f7f682..52ac32d 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,9 @@ go.work # generated files dist/ +# E2E test report +chainsaw-report.xml + # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] diff --git a/api/v1alpha1/lkeclusterconfig_types.go b/api/v1alpha1/lkeclusterconfig_types.go index 252485b..bea8beb 100644 --- a/api/v1alpha1/lkeclusterconfig_types.go +++ b/api/v1alpha1/lkeclusterconfig_types.go @@ -139,12 +139,13 @@ func (n NodePoolStatus) IsEqual(cmp NodePoolStatus) bool { return n.NodePoolDetails.IsEqual(cmp.NodePoolDetails) } -// +kubebuilder:validation:Enum=Active;Deleting;Provisioning;Unknown;Updating +// +kubebuilder:validation:Enum=Active;Deleting;Error;Provisioning;Unknown;Updating type Phase string const ( PhaseActive Phase = "Active" PhaseDeleting Phase = "Deleting" + PhaseError Phase = "Error" PhaseProvisioning Phase = "Provisioning" PhaseUpdating Phase = "Updating" PhaseUnknown Phase = "Unknown" diff --git a/cmd/main.go b/cmd/main.go index 3fbb665..7090a8a 100644 --- a/cmd/main.go +++ b/cmd/main.go @@ -19,18 +19,20 @@ package main import ( "crypto/tls" "flag" + "net/http" "os" // Import all Kubernetes client auth plugins (e.g. Azure, GCP, OIDC, etc.) // to ensure that exec-entrypoint and run can make use of them. - "k8s.io/client-go/kubernetes" _ "k8s.io/client-go/plugin/pkg/client/auth" "github.com/anza-labs/lke-operator/internal/controller" tracedk8s "github.com/anza-labs/lke-operator/internal/k8s/traced" "github.com/anza-labs/lke-operator/internal/version" + "go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" + "k8s.io/client-go/kubernetes" clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/klog/v2" ctrl "sigs.k8s.io/controller-runtime" @@ -144,10 +146,15 @@ func main() { os.Exit(1) } + rest := ctrl.GetConfigOrDie() + rest.WrapTransport = func(rt http.RoundTripper) http.RoundTripper { + return otelhttp.NewTransport(rt) + } + if err = (&controller.LKEClusterConfigReconciler{ Client: tracedk8s.NewClientWithTracing(mgr.GetClient(), "main_mgr_client"), Scheme: mgr.GetScheme(), - KubernetesClient: kubernetes.NewForConfigOrDie(ctrl.GetConfigOrDie()), + KubernetesClient: kubernetes.NewForConfigOrDie(rest), }).SetupWithManager(mgr); err != nil { setupLog.Error(err, "unable to create controller", "controller", "LKEClusterConfig") diff --git a/config/crd/bases/lke.anza-labs.dev_lkeclusterconfigs.yaml b/config/crd/bases/lke.anza-labs.dev_lkeclusterconfigs.yaml index a1f0e52..fcd32a6 100644 --- a/config/crd/bases/lke.anza-labs.dev_lkeclusterconfigs.yaml +++ b/config/crd/bases/lke.anza-labs.dev_lkeclusterconfigs.yaml @@ -185,6 +185,7 @@ spec: enum: - Active - Deleting + - Error - Provisioning - Unknown - Updating diff --git a/go.mod b/go.mod index ddeb9aa..77fe074 100644 --- a/go.mod +++ b/go.mod @@ -6,6 +6,7 @@ require ( github.com/go-logr/logr v1.4.2 github.com/go-resty/resty/v2 v2.13.1 github.com/linode/linodego v1.34.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 go.opentelemetry.io/otel v1.27.0 go.opentelemetry.io/otel/trace v1.27.0 k8s.io/api v0.30.1 @@ -265,7 +266,6 @@ require ( go.etcd.io/etcd/client/v3 v3.5.11 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 // indirect go.opentelemetry.io/otel/metric v1.27.0 // indirect diff --git a/go.sum b/go.sum index 7bfe047..cbfd124 100644 --- a/go.sum +++ b/go.sum @@ -193,8 +193,7 @@ github.com/Abirdcfly/dupword v0.0.14 h1:3U4ulkc8EUo+CaT105/GJ1BQwtgyj6+VaBVbAX11 github.com/Abirdcfly/dupword v0.0.14/go.mod h1:VKDAbxdY8YbKUByLGg8EETzYSuC4crm9WwI6Y3S0cLI= github.com/Antonboom/errname v0.1.13 h1:JHICqsewj/fNckzrfVSe+T33svwQxmjC+1ntDsHOVvM= github.com/Antonboom/errname v0.1.13/go.mod h1:uWyefRYRN54lBg6HseYCFhs6Qjcy41Y3Jl/dVhA87Ns= -github.com/Antonboom/nilnil v0.1.8 h1:97QG7xrLq4TBK2U9aFq/I8Mcgz67pwMIiswnTA9gIn0= -github.com/Antonboom/nilnil v0.1.8/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= +github.com/Antonboom/nilnil v0.1.9 h1:eKFMejSxPSA9eLSensFmjW2XTgTwJMjZ8hUHtV4s/SQ= github.com/Antonboom/nilnil v0.1.9/go.mod h1:iGe2rYwCq5/Me1khrysB4nwI7swQvjclR8/YRPl5ihQ= github.com/Antonboom/testifylint v1.2.0 h1:015bxD8zc5iY8QwTp4+RG9I4kIbqwvGX9TrBbb7jGdM= github.com/Antonboom/testifylint v1.2.0/go.mod h1:rkmEqjqVnHDRNsinyN6fPSLnoajzFwsCcguJgwADBkw= @@ -342,8 +341,7 @@ github.com/evanphx/json-patch v5.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= -github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= @@ -370,8 +368,6 @@ github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -390,8 +386,6 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.18.0 h1:BvolUXjp4zuvkZ5YN5t7ebzbhlUtPsPm2S9NAZ5nl9U= github.com/go-playground/validator/v10 v10.18.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-resty/resty/v2 v2.12.0 h1:rsVL8P90LFvkUYq/V5BTVe203WfRIU4gvcf+yfzJzGA= -github.com/go-resty/resty/v2 v2.12.0/go.mod h1:o0yGPrkS3lOe1+eFajk6kBW8ScXzwU3hD69/gt2yB/0= github.com/go-resty/resty/v2 v2.13.1 h1:x+LHXBI2nMB1vqndymf26quycC4aggYJ7DECYbiz03g= github.com/go-resty/resty/v2 v2.13.1/go.mod h1:GznXlLxkq6Nh4sU59rPmUw3VtgpO3aS96ORAI6Q7d+0= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= @@ -472,8 +466,7 @@ github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9 github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e h1:ULcKCDV1LOZPFxGZaA6TlQbiM3J2GCPnkx/bGF6sX/g= github.com/golangci/gofmt v0.0.0-20231018234816-f50ced29576e/go.mod h1:Pm5KhLPA8gSnQwrQ6ukebRcapGb/BG9iUkdaiCcGHJM= -github.com/golangci/golangci-lint v1.58.1 h1:IYKjkt7nofq/mYXiDUyJiBZQi5kxD0jPCjBy6VXxjz8= -github.com/golangci/golangci-lint v1.58.1/go.mod h1:IX9uSbhwDDOVTcceKZWmshlally+fOQYv1pZhIJCMNw= +github.com/golangci/golangci-lint v1.58.2 h1:YHfceEW3CmHmJTPkmVNlqEa4xcjIulYIaVIiB5sNbC4= github.com/golangci/golangci-lint v1.58.2/go.mod h1:QH/aRLQIdNuOqEiki+4En6/k2SmeOsRJU/oiYffM1Ow= github.com/golangci/misspell v0.5.1 h1:/SjR1clj5uDjNLwYzCahHwIOPmQgoH04AyQIiWGbhCM= github.com/golangci/misspell v0.5.1/go.mod h1:keMNyY6R9isGaSAu+4Q8NMBwMPkh15Gtc8UCVoDtAWo= @@ -669,15 +662,13 @@ github.com/kunwardeep/paralleltest v1.0.10 h1:wrodoaKYzS2mdNVnc4/w31YaXFtsc21PCT github.com/kunwardeep/paralleltest v1.0.10/go.mod h1:2C7s65hONVqY7Q5Efj5aLzRCNLjw2h4eMc9EcypGjcY= github.com/kyoh86/exportloopref v0.1.11 h1:1Z0bcmTypkL3Q4k+IDHMWTcnCliEZcaPiIe0/ymEyhQ= github.com/kyoh86/exportloopref v0.1.11/go.mod h1:qkV4UF1zGl6EkF1ox8L5t9SwyeBAZ3qLMd6up458uqA= -github.com/kyverno/chainsaw v0.2.0 h1:UDNH5FCZH8tllLlicUYsj6+LIw388kK7AhEVqqg1bBs= -github.com/kyverno/chainsaw v0.2.0/go.mod h1:vPpf6tRKQ1dLGYjT+gXEq3E7P1FArs+4jVF+09ihulQ= +github.com/kyverno/chainsaw v0.2.2 h1:lxVJwkHAc0a67Ax4S0oSqL0/U20T6MCkTq3VCz6b010= github.com/kyverno/chainsaw v0.2.2/go.mod h1:m3SZdMHdn77NfWe7knYqmRCsrUTGlEjhTmA/7l/88HM= github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7 h1:09UL+pBN0LHYrv22dBmRKAQ0xBKCdkFMTJc0enyTj1o= github.com/kyverno/kyverno-json v0.0.3-alpha.2.0.20240418134117-384bc5db5ad7/go.mod h1:RwCdE0qkkKmMTgcci23U0Ffntfdbo5tOS7Ht6YLtxlY= github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c h1:lAolpR9H8BwM5lRRvgCQ8JowswyxZRH+fgtIQzHFVCk= github.com/kyverno/pkg/ext v0.0.0-20240418121121-df8add26c55c/go.mod h1:02vxM0GNXz9+B/i6+rMfWAIwibUuAH+qFsd73IFskgQ= -github.com/lasiar/canonicalheader v1.0.6 h1:LJiiZ/MzkqibXOL2v+J8+WZM21pM0ivrBY/jbm9f5fo= -github.com/lasiar/canonicalheader v1.0.6/go.mod h1:GfXTLQb3O1qF5qcSTyXTnfNUggUNyzbkOSpzZ0dpUJo= +github.com/lasiar/canonicalheader v1.1.1 h1:wC+dY9ZfiqiPwAexUApFush/csSPXeIi4QqyxXmng8I= github.com/lasiar/canonicalheader v1.1.1/go.mod h1:cXkb3Dlk6XXy+8MVQnF23CYKWlyA7kfQhSw2CcZtZb0= github.com/ldez/gomoddirectives v0.2.4 h1:j3YjBIjEBbqZ0NKtBNzr8rtMHTOrLPeiwTkfUJZ3alg= github.com/ldez/gomoddirectives v0.2.4/go.mod h1:oWu9i62VcQDYp9EQ0ONTfqLNh+mDLWWDO+SO0qSQw5g= @@ -687,8 +678,6 @@ github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/leonklingele/grouper v1.1.2 h1:o1ARBDLOmmasUaNDesWqWCIFH3u7hoFlM84YrjT3mIY= github.com/leonklingele/grouper v1.1.2/go.mod h1:6D0M/HVkhs2yRKRFZUoGjeDy7EZTfFBE9gl4kjmIGkA= -github.com/linode/linodego v1.33.1 h1:GcI7ozlHHzZbfthD8edLNInhHjQ452iCwtphza+FJGc= -github.com/linode/linodego v1.33.1/go.mod h1:rEjoJQACp1gKZn9LfxtCJPwS8ri/+h2B3ScJrgBPPdI= github.com/linode/linodego v1.34.0 h1:tBCwZzJTNh6Sr5xImkq/KQ/1rvUbH3aXGve5VuHEspQ= github.com/linode/linodego v1.34.0/go.mod h1:JxuhOEAMfSxun6RU5/MgTKH2GGTmFrhKRj3wL1NFin0= github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= @@ -821,8 +810,7 @@ github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tM github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= github.com/sashamelentyev/usestdlibvars v1.25.0 h1:IK8SI2QyFzy/2OD2PYnhy84dpfNo9qADrRt6LH8vSzU= github.com/sashamelentyev/usestdlibvars v1.25.0/go.mod h1:9nl0jgOfHKWNFS43Ojw0i7aRoS4j6EBye3YBhmAIRF8= -github.com/securego/gosec/v2 v2.19.0 h1:gl5xMkOI0/E6Hxx0XCY2XujA3V7SNSefA8sC+3f1gnk= -github.com/securego/gosec/v2 v2.19.0/go.mod h1:hOkDcHz9J/XIgIlPDXalxjeVYsHxoWUc5zJSHxcB8YM= +github.com/securego/gosec/v2 v2.20.0 h1:z/d5qp1niWa2avgFyUIglYTYYuGq2LrJwNj1HRVXsqc= github.com/securego/gosec/v2 v2.20.0/go.mod h1:hkiArbBZLwK1cehBcg3oFWUlYPWTBffPwwJVWChu83o= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -943,10 +931,9 @@ github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea h1:Cyhwe github.com/zach-klippenstein/goregen v0.0.0-20160303162051-795b5e3961ea/go.mod h1:eNr558nEUjP8acGw8FFjTeWvSgU1stO7FAO6eknhHe4= gitlab.com/bosi/decorder v0.4.2 h1:qbQaV3zgwnBZ4zPMhGLW4KZe7A7NwxEhJx39R3shffo= gitlab.com/bosi/decorder v0.4.2/go.mod h1:muuhHoaJkA9QLcYHq4Mj8FJUwDZ+EirSHRiaTcTf6T8= -go-simpler.org/assert v0.7.0 h1:OzWWZqfNxt8cLS+MlUp6Tgk1HjPkmgdKBq9qvy8lZsA= -go-simpler.org/assert v0.7.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= -go-simpler.org/musttag v0.12.1 h1:yaMcjl/uyVnd1z6GqIhBiFH/PoqNN9f2IgtU7bp7W/0= -go-simpler.org/musttag v0.12.1/go.mod h1:46HKu04A3Am9Lne5kKP0ssgwY3AeIlqsDzz3UxKROpY= +go-simpler.org/assert v0.9.0 h1:PfpmcSvL7yAnWyChSjOz6Sp6m9j5lyK8Ok9pEL31YkQ= +go-simpler.org/assert v0.9.0/go.mod h1:74Eqh5eI6vCK6Y5l3PI8ZYFXG4Sa+tkr70OIPJAUr28= +go-simpler.org/musttag v0.12.2 h1:J7lRc2ysXOq7eM8rwaTYnNrHd5JwjppzB6mScysB2Cs= go-simpler.org/musttag v0.12.2/go.mod h1:uN1DVIasMTQKk6XSik7yrJoEysGtR2GRqvWnI9S7TYM= go-simpler.org/sloglint v0.6.0 h1:0YcqSVG7LI9EVBfRPhgPec79BH6X6mwjFuUR5Mr7j1M= go-simpler.org/sloglint v0.6.0/go.mod h1:+kJJtebtPePWyG5boFwY46COydAggADDOHM22zOvzBk= @@ -979,22 +966,16 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.26.0 h1:LQwgL5s/1W7YiiRwxf03QGnWLb2HW4pLiAhaA5cZXBs= -go.opentelemetry.io/otel v1.26.0/go.mod h1:UmLkJHUAidDval2EICqBMbnAd0/m2vmpf/dAM+fvFs4= go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1 h1:o8iWeVFa1BcLtVEV0LzrCxV2/55tB3xLxADr6Kyoey4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.23.1/go.mod h1:SEVfdK4IoBnbT2FXNM/k8yC08MrfbhWk3U4ljM8B3HE= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1 h1:p3A5+f5l9e/kuEBwLOrnpkIDHQFlHmbiVxMURWRK6gQ= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.23.1/go.mod h1:OClrnXUjBqQbInvjJFjYSnMxBSCXBF8r3b34WqjiIrQ= -go.opentelemetry.io/otel/metric v1.26.0 h1:7S39CLuY5Jgg9CrnA9HHiEjGMF/X2VHvoXGgSllRz30= -go.opentelemetry.io/otel/metric v1.26.0/go.mod h1:SY+rHOI4cEawI9a7N1A4nIg/nTQXe1ccCNWYOJUrpX4= go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= go.opentelemetry.io/otel/sdk v1.23.1 h1:O7JmZw0h76if63LQdsBMKQDWNb5oEcOThG9IrxscV+E= go.opentelemetry.io/otel/sdk v1.23.1/go.mod h1:LzdEVR5am1uKOOwfBWFef2DCi1nu3SA8XQxx2IerWFk= -go.opentelemetry.io/otel/trace v1.26.0 h1:1ieeAUb4y0TE26jUFrCIXKpTuVK7uJGN9/Z/2LP5sQA= -go.opentelemetry.io/otel/trace v1.26.0/go.mod h1:4iDxvGDQuUkHve82hJJ8UqrwswHYsZuWCBllGV2U2y0= go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -1018,7 +999,6 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1124,7 +1104,6 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.22.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1247,7 +1226,6 @@ golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1258,7 +1236,6 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1667,17 +1644,13 @@ sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMm sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= sigs.k8s.io/kubectl-validate v0.0.4-0.20240426230744-57b5e376ebde h1:98Oi2yiEABszWGlP76tQUt8V7PsAOvh/jfpIg5Wp0Kc= sigs.k8s.io/kubectl-validate v0.0.4-0.20240426230744-57b5e376ebde/go.mod h1:AXSR3o3Y0Zfm9/WRTHPKwkzpePWUPbXWAK3WQKRg2IQ= -sigs.k8s.io/kustomize/api v0.17.1 h1:MYJBOP/yQ3/5tp4/sf6HiiMfNNyO97LmtnirH9SLNr4= -sigs.k8s.io/kustomize/api v0.17.1/go.mod h1:ffn5491s2EiNrJSmgqcWGzQUVhc/pB0OKNI0HsT/0tA= +sigs.k8s.io/kustomize/api v0.17.2 h1:E7/Fjk7V5fboiuijoZHgs4aHuexi5Y2loXlVOAVAG5g= sigs.k8s.io/kustomize/api v0.17.2/go.mod h1:UWTz9Ct+MvoeQsHcJ5e+vziRRkwimm3HytpZgIYqye0= -sigs.k8s.io/kustomize/cmd/config v0.14.0 h1:TMKWBtk0Ox1EUwafT9hncg7EFrvrBlqDDHXmBHm51U8= -sigs.k8s.io/kustomize/cmd/config v0.14.0/go.mod h1:J+ukok4u7k8esCzEhRTygTW7dzDKYbC0kCDkpBK3VfI= +sigs.k8s.io/kustomize/cmd/config v0.14.1 h1:r1gRhgfPmnt7VYf4uxO8M27GX406n9kOOeScOH9IQds= sigs.k8s.io/kustomize/cmd/config v0.14.1/go.mod h1:Sw1cPsFqh4uYczCWKlidPgMrsffLPCAB+7ytYLlauY4= -sigs.k8s.io/kustomize/kustomize/v5 v5.4.1 h1:97qXYnSngAvY+gUAzMfjJ73ClKZAD+JrKE+7OIMWYhw= -sigs.k8s.io/kustomize/kustomize/v5 v5.4.1/go.mod h1:nKouayWQbaro85jrNbcA+tZ6x63wYYxGPgniA/fEmgQ= +sigs.k8s.io/kustomize/kustomize/v5 v5.4.2 h1:9Zl5Gqg3XMdBEvkR54pVLCBj7FVO7W+VPNDDEzD6AyE= sigs.k8s.io/kustomize/kustomize/v5 v5.4.2/go.mod h1:5ypfJVYlPb2MKKeoGknVLxvHemDlQT+szI4+KOhnD6k= -sigs.k8s.io/kustomize/kyaml v0.17.0 h1:G2bWs03V9Ur2PinHLzTUJ8Ded+30SzXZKiO92SRDs3c= -sigs.k8s.io/kustomize/kyaml v0.17.0/go.mod h1:6lxkYF1Cv9Ic8g/N7I86cvxNc5iinUo/P2vKsHNmpyE= +sigs.k8s.io/kustomize/kyaml v0.17.1 h1:TnxYQxFXzbmNG6gOINgGWQt09GghzgTP6mIurOgrLCQ= sigs.k8s.io/kustomize/kyaml v0.17.1/go.mod h1:9V0mCjIEYjlXuCdYsSXvyoy2BTsLESH7TlGV81S282U= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= diff --git a/internal/controller/lkeclusterconfig.go b/internal/controller/lkeclusterconfig.go index 9f8829f..a728b98 100644 --- a/internal/controller/lkeclusterconfig.go +++ b/internal/controller/lkeclusterconfig.go @@ -96,8 +96,8 @@ func (r *LKEClusterConfigReconciler) onChangeCreate( } if lke.Spec.HighAvailability != nil { - opts.ControlPlane = &linodego.LKEClusterControlPlane{ - HighAvailability: *lke.Spec.HighAvailability, + opts.ControlPlane = &linodego.LKEClusterControlPlaneOptions{ + HighAvailability: lke.Spec.HighAvailability, } } @@ -394,8 +394,8 @@ func updateControlPlane( lke.Spec.HighAvailability = mkptr(false) } - opts.ControlPlane = &linodego.LKEClusterControlPlane{ - HighAvailability: *lke.Spec.HighAvailability, + opts.ControlPlane = &linodego.LKEClusterControlPlaneOptions{ + HighAvailability: lke.Spec.HighAvailability, } return opts, cluster.ControlPlane.HighAvailability != *lke.Spec.HighAvailability diff --git a/internal/controller/lkeclusterconfig_controller.go b/internal/controller/lkeclusterconfig_controller.go index 52bd1a4..a92519d 100644 --- a/internal/controller/lkeclusterconfig_controller.go +++ b/internal/controller/lkeclusterconfig_controller.go @@ -55,7 +55,7 @@ type LKEClusterConfigReconciler struct { // For more details, check Reconcile and its Result here: // - https://pkg.go.dev/sigs.k8s.io/controller-runtime@v0.17.3/pkg/reconcile func (r *LKEClusterConfigReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) { - log := log.FromContext(ctx).WithName("reconcile").WithValues("object.namespaced_name", req) + log := log.FromContext(ctx, "object.namespaced_name", req) log.Info("reconciling") @@ -128,6 +128,7 @@ func (r *LKEClusterConfigReconciler) setFailureMessage( err error, ) error { lke.Status.FailureMessage = mkptr(err.Error()) + lke.Status.Phase = mkptr(lkev1alpha1.PhaseError) if uerr := r.Update(ctx, lke); uerr != nil { return errors.Join(err, uerr) } diff --git a/internal/controller/lkeclusterconfig_test.go b/internal/controller/lkeclusterconfig_test.go index 925f014..7a6828f 100644 --- a/internal/controller/lkeclusterconfig_test.go +++ b/internal/controller/lkeclusterconfig_test.go @@ -200,7 +200,7 @@ func Test_updateControlPlane(t *testing.T) { tc.expectedChange, change) } - if opts.ControlPlane.HighAvailability != tc.expectedHA { + if opts.ControlPlane.HighAvailability == nil || *opts.ControlPlane.HighAvailability != tc.expectedHA { t.Errorf("expected HA value: %#+v, got: %#+v", tc.expectedHA, opts.ControlPlane.HighAvailability) } diff --git a/test/base/apply.yaml b/test/00-minimal/apply.yaml similarity index 81% rename from test/base/apply.yaml rename to test/00-minimal/apply.yaml index 01e6f70..64f556b 100644 --- a/test/base/apply.yaml +++ b/test/00-minimal/apply.yaml @@ -1,17 +1,17 @@ apiVersion: lke.anza-labs.dev/v1alpha1 kind: LKEClusterConfig metadata: - name: base + name: minimal annotations: lke.anza-labs.dev/tags: | - test-base - chainsaw + test-minimal + chainsaw-e2e spec: tokenSecretRef: name: test-token namespace: test-shared region: eu-central nodePools: - base: + np-1: nodeCount: 3 linodeType: g6-standard-1 diff --git a/test/00-minimal/assert.yaml b/test/00-minimal/assert.yaml new file mode 100644 index 0000000..ba5aa62 --- /dev/null +++ b/test/00-minimal/assert.yaml @@ -0,0 +1,24 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: minimal + annotations: + lke.anza-labs.dev/tags: | + test-minimal + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 +status: + phase: Active + nodePoolStatuses: + np-1: + details: + nodeCount: 3 + linodeType: g6-standard-1 diff --git a/test/base/chainsaw-test.yaml b/test/00-minimal/chainsaw-test.yaml similarity index 91% rename from test/base/chainsaw-test.yaml rename to test/00-minimal/chainsaw-test.yaml index a4063c4..5d14cf0 100644 --- a/test/base/chainsaw-test.yaml +++ b/test/00-minimal/chainsaw-test.yaml @@ -1,7 +1,7 @@ apiVersion: chainsaw.kyverno.io/v1alpha1 kind: Test metadata: - name: base + name: minimal spec: steps: - try: diff --git a/test/01-multiple-node-pools/apply.yaml b/test/01-multiple-node-pools/apply.yaml new file mode 100644 index 0000000..290f3ed --- /dev/null +++ b/test/01-multiple-node-pools/apply.yaml @@ -0,0 +1,23 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: multi-np + annotations: + lke.anza-labs.dev/tags: | + test-multi-np + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 + np-2: + nodeCount: 3 + linodeType: g6-standard-1 + np-3: + nodeCount: 3 + linodeType: g6-standard-1 diff --git a/test/01-multiple-node-pools/assert.yaml b/test/01-multiple-node-pools/assert.yaml new file mode 100644 index 0000000..c75f717 --- /dev/null +++ b/test/01-multiple-node-pools/assert.yaml @@ -0,0 +1,38 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: multi-np + annotations: + lke.anza-labs.dev/tags: | + test-multi-np + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 + np-2: + nodeCount: 3 + linodeType: g6-standard-1 + np-3: + nodeCount: 3 + linodeType: g6-standard-1 +status: + phase: Active + nodePoolStatuses: + np-1: + details: + nodeCount: 3 + linodeType: g6-standard-1 + np-2: + details: + nodeCount: 3 + linodeType: g6-standard-1 + np-3: + details: + nodeCount: 3 + linodeType: g6-standard-1 diff --git a/test/01-multiple-node-pools/chainsaw-test.yaml b/test/01-multiple-node-pools/chainsaw-test.yaml new file mode 100644 index 0000000..f888f29 --- /dev/null +++ b/test/01-multiple-node-pools/chainsaw-test.yaml @@ -0,0 +1,11 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: multiple-node-pools +spec: + steps: + - try: + - apply: + file: ./apply.yaml + - assert: + file: ./assert.yaml diff --git a/test/02-autoscaler/apply.yaml b/test/02-autoscaler/apply.yaml new file mode 100644 index 0000000..ef361de --- /dev/null +++ b/test/02-autoscaler/apply.yaml @@ -0,0 +1,20 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: autoscaler + annotations: + lke.anza-labs.dev/tags: | + test-autoscaler + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 1 + linodeType: g6-standard-1 + autoscaler: + min: 1 + max: 3 diff --git a/test/02-autoscaler/assert.yaml b/test/02-autoscaler/assert.yaml new file mode 100644 index 0000000..0388f36 --- /dev/null +++ b/test/02-autoscaler/assert.yaml @@ -0,0 +1,30 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: autoscaler + annotations: + lke.anza-labs.dev/tags: | + test-autoscaler + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 1 + linodeType: g6-standard-1 + autoscaler: + min: 1 + max: 3 +status: + phase: Active + nodePoolStatuses: + np-1: + details: + nodeCount: 1 + linodeType: g6-standard-1 + autoscaler: + min: 1 + max: 3 diff --git a/test/02-autoscaler/chainsaw-test.yaml b/test/02-autoscaler/chainsaw-test.yaml new file mode 100644 index 0000000..d9f870b --- /dev/null +++ b/test/02-autoscaler/chainsaw-test.yaml @@ -0,0 +1,11 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: autoscaler +spec: + steps: + - try: + - apply: + file: ./apply.yaml + - assert: + file: ./assert.yaml diff --git a/test/base/assert.yaml b/test/03-high-availability/apply.yaml similarity index 74% rename from test/base/assert.yaml rename to test/03-high-availability/apply.yaml index ba5edd3..dd2a5d0 100644 --- a/test/base/assert.yaml +++ b/test/03-high-availability/apply.yaml @@ -1,19 +1,18 @@ apiVersion: lke.anza-labs.dev/v1alpha1 kind: LKEClusterConfig metadata: - name: base + name: high-availability annotations: lke.anza-labs.dev/tags: | - test-base - chainsaw + test-ha + chainsaw-e2e spec: tokenSecretRef: name: test-token namespace: test-shared region: eu-central + highAvailability: true nodePools: - base: + np-1: nodeCount: 3 linodeType: g6-standard-1 -status: - phase: Active diff --git a/test/03-high-availability/assert.yaml b/test/03-high-availability/assert.yaml new file mode 100644 index 0000000..ee2bc22 --- /dev/null +++ b/test/03-high-availability/assert.yaml @@ -0,0 +1,25 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: high-availability + annotations: + lke.anza-labs.dev/tags: | + test-ha + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + highAvailability: true + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 +status: + phase: Active + nodePoolStatuses: + np-1: + details: + nodeCount: 3 + linodeType: g6-standard-1 diff --git a/test/03-high-availability/chainsaw-test.yaml b/test/03-high-availability/chainsaw-test.yaml new file mode 100644 index 0000000..e2cacf6 --- /dev/null +++ b/test/03-high-availability/chainsaw-test.yaml @@ -0,0 +1,11 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: high-availability +spec: + steps: + - try: + - apply: + file: ./apply.yaml + - assert: + file: ./assert.yaml diff --git a/test/04-pinned-version/apply.yaml b/test/04-pinned-version/apply.yaml new file mode 100644 index 0000000..80952e8 --- /dev/null +++ b/test/04-pinned-version/apply.yaml @@ -0,0 +1,18 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: pinned-version + annotations: + lke.anza-labs.dev/tags: | + test-pinned-version + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 + kubernetesVersion: '1.29' # must be quoted diff --git a/test/04-pinned-version/assert.yaml b/test/04-pinned-version/assert.yaml new file mode 100644 index 0000000..a0fa638 --- /dev/null +++ b/test/04-pinned-version/assert.yaml @@ -0,0 +1,25 @@ +apiVersion: lke.anza-labs.dev/v1alpha1 +kind: LKEClusterConfig +metadata: + name: pinned-version + annotations: + lke.anza-labs.dev/tags: | + test-pinned-version + chainsaw-e2e +spec: + tokenSecretRef: + name: test-token + namespace: test-shared + region: eu-central + nodePools: + np-1: + nodeCount: 3 + linodeType: g6-standard-1 + kubernetesVersion: '1.29' # must be quoted +status: + phase: Active + nodePoolStatuses: + np-1: + details: + nodeCount: 3 + linodeType: g6-standard-1 diff --git a/test/04-pinned-version/chainsaw-test.yaml b/test/04-pinned-version/chainsaw-test.yaml new file mode 100644 index 0000000..df2002e --- /dev/null +++ b/test/04-pinned-version/chainsaw-test.yaml @@ -0,0 +1,11 @@ +apiVersion: chainsaw.kyverno.io/v1alpha1 +kind: Test +metadata: + name: pinned-version +spec: + steps: + - try: + - apply: + file: ./apply.yaml + - assert: + file: ./assert.yaml