Skip to content

Commit a6f01f1

Browse files
Merge pull request #27349 from shiftstack/ccm-status-check
Ensures operators use external cloud provider
2 parents 2da2b50 + 5487414 commit a6f01f1

File tree

4 files changed

+76
-0
lines changed

4 files changed

+76
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
reviewers:
2+
- MaysaMacedo
3+
- JoelSpeed
4+
approvers:
5+
- MaysaMacedo
6+
- JoelSpeed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package cloud_controller_manager
2+
3+
import (
4+
"context"
5+
"fmt"
6+
7+
"github.com/ghodss/yaml"
8+
g "github.com/onsi/ginkgo"
9+
o "github.com/onsi/gomega"
10+
configv1 "github.com/openshift/api/config/v1"
11+
exutil "github.com/openshift/origin/test/extended/util"
12+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
13+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
14+
)
15+
16+
const cloudControllerNamespace = "openshift-cloud-controller-manager"
17+
const kuberControllerNamespace = "openshift-kube-controller-manager"
18+
19+
var _ = g.Describe("[sig-cloud-provider][Feature:OpenShiftCloudControllerManager][Late]", func() {
20+
defer g.GinkgoRecover()
21+
oc := exutil.NewCLI("ccm")
22+
23+
g.It("Deploy an external cloud provider", func() {
24+
infra, err := oc.AdminConfigClient().ConfigV1().Infrastructures().Get(context.Background(), "cluster", metav1.GetOptions{})
25+
o.Expect(err).NotTo(o.HaveOccurred())
26+
27+
if infra.Status.PlatformStatus.Type != configv1.OpenStackPlatformType {
28+
g.Skip("Platform does not use external cloud provider")
29+
}
30+
31+
g.By("Listing Pods on the openshift-cloud-controller-manager Namespace")
32+
ccmPods, err := oc.AdminKubeClient().CoreV1().Pods(cloudControllerNamespace).List(context.Background(), metav1.ListOptions{})
33+
o.Expect(err).NotTo(o.HaveOccurred())
34+
g.By("Checking existance of any CCM Pod on the openshift-cloud-controller-manager Namespace")
35+
o.Expect(len(ccmPods.Items) > 0).Should(o.BeTrue())
36+
37+
g.By("Getting configMap on the openshift-kube-controller-manager Namespace")
38+
cm, err := oc.AdminKubeClient().CoreV1().ConfigMaps(kuberControllerNamespace).Get(context.TODO(), "config", metav1.GetOptions{})
39+
o.Expect(err).NotTo(o.HaveOccurred())
40+
41+
var observedConfig map[string]interface{}
42+
err = yaml.Unmarshal([]byte(cm.Data["config.yaml"]), &observedConfig)
43+
o.Expect(err).NotTo(o.HaveOccurred())
44+
45+
g.By("Getting the value for the cloud-provider setting in the configMap")
46+
cloudProvider, found, err := unstructured.NestedSlice(observedConfig, "extendedArguments", "cloud-provider")
47+
o.Expect(err).NotTo(o.HaveOccurred())
48+
49+
g.By("Expecting Kube Controller Manager to not own cloud controller")
50+
// When cloud-provider setting has "external" as value or it's just empty, KCM does not own Cloud Controllers
51+
if found && (len(cloudProvider) != 1 || (cloudProvider[0] != "external" && cloudProvider[0] != "")) {
52+
g.Fail(fmt.Sprintf("Expected cloud-provider %v setting to indicate KCM relinquished cloud ownership", cloudProvider))
53+
}
54+
55+
g.By("Getting masters MachineConfig")
56+
masterkubelet, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("machineconfig/01-master-kubelet", "-o=jsonpath={.spec.config.systemd.units[0].contents}").Output()
57+
o.Expect(err).NotTo(o.HaveOccurred())
58+
g.By("Expecting masters MachineConfig to contain cloud-provider as external for kubelet")
59+
o.Expect(masterkubelet).To(o.ContainSubstring("cloud-provider=external"))
60+
61+
g.By("Getting workers MachineConfig")
62+
workerkubelet, err := oc.AsAdmin().WithoutNamespace().Run("get").Args("machineconfig/01-worker-kubelet", "-o=jsonpath={.spec.config.systemd.units[0].contents}").Output()
63+
o.Expect(err).NotTo(o.HaveOccurred())
64+
g.By("Expecting workers MachineConfig to contain cloud-provider as external for kubelet")
65+
o.Expect(workerkubelet).To(o.ContainSubstring("cloud-provider=external"))
66+
})
67+
})

test/extended/include.go

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
_ "github.com/openshift/origin/test/extended/builds"
1818
_ "github.com/openshift/origin/test/extended/ci"
1919
_ "github.com/openshift/origin/test/extended/cli"
20+
_ "github.com/openshift/origin/test/extended/cloud_controller_manager"
2021
_ "github.com/openshift/origin/test/extended/cluster"
2122
_ "github.com/openshift/origin/test/extended/cmd"
2223
_ "github.com/openshift/origin/test/extended/controller_manager"

test/extended/util/annotate/generated/zz_generated.annotations.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)