// Copyright Amazon.com Inc. or its affiliates. All Rights Reserved. // // Licensed under the Apache License, Version 2.0 (the "License"). You may // not use this file except in compliance with the License. A copy of the // License is located at // // http://aws.amazon.com/apache2.0/ // // or in the "license" file accompanying this file. This file is distributed // on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either // express or implied. See the License for the specific language governing // permissions and limitations under the License. package ipamd import ( "github.com/aws/amazon-vpc-cni-k8s/test/framework/resources/k8s/manifest" k8sUtils "github.com/aws/amazon-vpc-cni-k8s/test/framework/resources/k8s/utils" "github.com/aws/amazon-vpc-cni-k8s/test/framework/utils" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" v1 "k8s.io/api/batch/v1" corev1 "k8s.io/api/core/v1" ) // Verifies toggling the DISABLE_METRICS works as expected // TODO: In future, we should also have verification for individual metrics var _ = Describe("test IPAMD metric environment variable", func() { // container to curl metric API var curlContainer corev1.Container // Job's output determines if the API is reachable or not var curlJob *v1.Job Context("when metrics is disabled", func() { metricAddr := "127.0.0.1:61678/metrics" It("should not be accessible anymore", func() { curlContainer = manifest.NewCurlContainer(). Command([]string{"curl"}). Args([]string{"--fail", metricAddr}). Build() By("enabling metrics on aws-node") k8sUtils.AddEnvVarToDaemonSetAndWaitTillUpdated(f, utils.AwsNodeName, utils.AwsNodeNamespace, utils.AwsNodeName, map[string]string{"DISABLE_METRICS": "false"}) curlJob = manifest.NewDefaultJobBuilder(). Container(curlContainer). Name("verify-metrics-works"). Parallelism(1). HostNetwork(true). Build() By("verify metric is working before disabling it") curlJob, err = f.K8sResourceManagers.JobManager(). CreateAndWaitTillJobCompleted(curlJob) Expect(err).ToNot(HaveOccurred()) By("deleting job used for verification") err = f.K8sResourceManagers.JobManager(). DeleteAndWaitTillJobIsDeleted(curlJob) Expect(err).ToNot(HaveOccurred()) By("disabling metrics on aws-node") k8sUtils.AddEnvVarToDaemonSetAndWaitTillUpdated(f, utils.AwsNodeName, utils.AwsNodeNamespace, utils.AwsNodeName, map[string]string{"DISABLE_METRICS": "true"}) curlJob = manifest.NewDefaultJobBuilder(). Container(curlContainer). Name("verify-metrics-doesnt-works"). Parallelism(1). HostNetwork(true). Build() By("verifying metrics is not working after disabling it") curlJob, err = f.K8sResourceManagers.JobManager(). CreateAndWaitTillJobCompleted(curlJob) Expect(err).To(HaveOccurred()) By("deleting job used for verification") err = f.K8sResourceManagers.JobManager(). DeleteAndWaitTillJobIsDeleted(curlJob) Expect(err).ToNot(HaveOccurred()) By("reverting to default value for disabling metrics") k8sUtils.RemoveVarFromDaemonSetAndWaitTillUpdated(f, utils.AwsNodeName, utils.AwsNodeNamespace, utils.AwsNodeName, map[string]struct{}{"DISABLE_METRICS": {}}) }) }) })