diff --git a/hack/kind/dns-override.yaml b/hack/kind/dns-override.yaml new file mode 100644 index 000000000..ed3fc3b63 --- /dev/null +++ b/hack/kind/dns-override.yaml @@ -0,0 +1,28 @@ +# Copyright 2024 Nutanix. All rights reserved. +# SPDX-License-Identifier: Apache-2.0 + +apiVersion: v1 +data: + Corefile: | + .:53 { + errors + health { + lameduck 5s + } + ready + kubernetes cluster.local in-addr.arpa ip6.arpa { + pods insecure + fallthrough in-addr.arpa ip6.arpa + ttl 30 + } + prometheus :9153 + forward . 8.8.8.8 + cache 30 + loop + reload + loadbalance + } +kind: ConfigMap +metadata: + name: coredns + namespace: kube-system diff --git a/test/e2e/e2e_suite_test.go b/test/e2e/e2e_suite_test.go index 92ae2814c..6ea1e9c07 100644 --- a/test/e2e/e2e_suite_test.go +++ b/test/e2e/e2e_suite_test.go @@ -11,16 +11,22 @@ import ( "encoding/base64" "encoding/gob" "flag" + "fmt" "os" "path/filepath" "slices" "strings" "testing" + "time" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" + corev1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/types" + "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/klog/v2" capie2e "sigs.k8s.io/cluster-api/test/e2e" capie2eframework "sigs.k8s.io/cluster-api/test/framework" @@ -110,6 +116,39 @@ var _ = SynchronizedBeforeSuite(func() []byte { useExistingCluster, ) + By("Overriding coreDNS resolver") + // override coredns resolver to 8.8.8.8 and restart coredns deployment + // read the dns-override.yaml file + filePath, _ := filepath.Abs("../../hack/kind/dns-override.yaml") + yamlFile, err := os.ReadFile(filePath) + Expect(err).To(BeNil(), "Failed to read the dns-override.yaml file") + + // decode the yaml file into a Kubernetes object + decode := yaml.NewYAMLOrJSONDecoder(bytes.NewReader(yamlFile), 4096) + configMap := &corev1.ConfigMap{} + err = decode.Decode(&configMap) + Expect(err).To(BeNil(), "Failed to decode the yaml file into a Kubernetes object") + + _, err = bootstrapClusterProxy.GetClientSet(). + CoreV1(). + ConfigMaps(configMap.GetNamespace()). + Update(context.Background(), configMap, metav1.UpdateOptions{}) + Expect( + err, + ).To(BeNil(), "Failed to update the coredns deployment with the dns-override.yaml file") + + timeNow := time.Now().Format(time.RFC3339) + patch := fmt.Sprintf( + `{"spec":{"template":{"metadata":{"annotations":{"kubectl.kubernetes.io/restartedAt":%q}}}}}`, + timeNow, + ) + + _, err = bootstrapClusterProxy.GetClientSet(). + AppsV1(). + Deployments("kube-system"). + Patch(context.Background(), "coredns", types.StrategicMergePatchType, []byte(patch), metav1.PatchOptions{}) + Expect(err).To(BeNil(), "Failed to restart the coredns deployment") + By("Initializing the bootstrap cluster") initBootstrapCluster(bootstrapClusterProxy, e2eConfig, clusterctlConfigPath, artifactFolder)