diff --git a/internal/config/kubernetes_test.go b/internal/config/kubernetes_test.go index 8f7f56e3..72df6aee 100644 --- a/internal/config/kubernetes_test.go +++ b/internal/config/kubernetes_test.go @@ -345,6 +345,26 @@ var _ = Describe("Kubernetes", func() { Expect(confScript).ToNot(BeEmpty()) }) + It("Defaults to a server node for a single-node cluster with no declared nodes", func() { + conf := kubernetes.Kubernetes{} + + confScript, err := writeK8sConfigDeployScript( + fs, + output, + conf, + "/opt/k8s/install", + "/opt/k8s/install/install.sh", + ) + Expect(err).NotTo(HaveOccurred()) + + b, err := fs.ReadFile(filepath.Join(output.OverlaysDir(), confScript)) + Expect(err).NotTo(HaveOccurred()) + Expect(string(b)).To(ContainSubstring(`NODETYPE="server"`)) + Expect(string(b)).To(ContainSubstring(`CONFIGFILE="/var/lib/elemental/kubernetes/${NODETYPE}.yaml"`)) + Expect(string(b)).ToNot(ContainSubstring("does not match any declared node")) + Expect(string(b)).ToNot(ContainSubstring("init.yaml")) + }) + It("Uses server config for a single explicitly configured server node", func() { conf := kubernetes.Kubernetes{ Nodes: kubernetes.Nodes{ @@ -390,6 +410,29 @@ var _ = Describe("Kubernetes", func() { Expect(string(b)).To(ContainSubstring("CONFIGFILE=/var/lib/elemental/kubernetes/init.yaml")) }) + It("Aborts when the hostname matches no declared node", func() { + conf := kubernetes.Kubernetes{ + Nodes: kubernetes.Nodes{ + {Hostname: "server01", Type: kubernetes.NodeTypeServer}, + }, + } + + confScript, err := writeK8sConfigDeployScript( + fs, + output, + conf, + "/opt/k8s/install", + "/opt/k8s/install/install.sh", + ) + Expect(err).NotTo(HaveOccurred()) + + b, err := fs.ReadFile(filepath.Join(output.OverlaysDir(), confScript)) + Expect(err).NotTo(HaveOccurred()) + Expect(string(b)).To(ContainSubstring(`if [[ ! -v "hosts[${HOSTNAME}]" ]]; then`)) + Expect(string(b)).To(ContainSubstring("does not match any declared node")) + Expect(string(b)).ToNot(ContainSubstring(":-server")) + }) + It("Succeeds to configure RKE2 with additional resources and auth", func() { additionalManifests := make(map[string][]byte) additionalManifests["example-auth-priority.yaml"] = []byte("apiVersion: v1\nkind: Secret\nmetadata:\n namespace: kube-system\n name: example-auth\ntype: kubernetes.io/dockerconfigjson\ndata:\n .dockerconfigjson: eyJhdXRocyI6eyJleGFtcGxlLmlvIjp7InVzZXJuYW1lIjoiZXhhbXBsZS11c2VyIiwicGFzc3dvcmQiOiJleGFtcGxlLXBhc3MiLCJhdXRoIjoiWlhoaGJYQnNaUzExYzJWeU9tVjRZVzF3YkdVdGNHRnpjdz09In19fQ==\n") diff --git a/internal/config/templates/k8s_conf_deploy.sh.tpl b/internal/config/templates/k8s_conf_deploy.sh.tpl index 14b6c251..bb04322a 100644 --- a/internal/config/templates/k8s_conf_deploy.sh.tpl +++ b/internal/config/templates/k8s_conf_deploy.sh.tpl @@ -13,7 +13,16 @@ HOSTNAME=$(&2 + exit 1 +fi + +NODETYPE="${hosts[${HOSTNAME}]}" +{{- else }} +NODETYPE="server" +{{- end }} CONFIGFILE="{{ .KubernetesDir }}/${NODETYPE}.yaml" REGFILE="{{ .KubernetesDir }}/registries.yaml"