Skip to content

Commit a9cb59f

Browse files
authored
Merge pull request #8410 from wjunott/consume-capi-v1beta2-from-zero
Process apiGroup in capi provider
2 parents 6283c90 + 1ca5f44 commit a9cb59f

File tree

3 files changed

+53
-25
lines changed

3 files changed

+53
-25
lines changed

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller.go

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ type machineController struct {
8282
nodeInformer cache.SharedIndexInformer
8383
managementClient dynamic.Interface
8484
managementScaleClient scale.ScalesGetter
85+
managementDiscoveryClient discovery.DiscoveryInterface
8586
machineSetResource schema.GroupVersionResource
8687
machineResource schema.GroupVersionResource
8788
machinePoolResource schema.GroupVersionResource
@@ -457,7 +458,7 @@ func newMachineController(
457458
managementInformerFactory := dynamicinformer.NewFilteredDynamicSharedInformerFactory(managementClient, 0, namespaceToWatch(autoDiscoverySpecs), nil)
458459

459460
CAPIGroup := getCAPIGroup()
460-
CAPIVersion, err := getAPIGroupPreferredVersion(managementDiscoveryClient, CAPIGroup)
461+
CAPIVersion, err := getCAPIGroupPreferredVersion(managementDiscoveryClient, CAPIGroup)
461462
if err != nil {
462463
return nil, fmt.Errorf("could not find preferred version for CAPI group %q: %v", CAPIGroup, err)
463464
}
@@ -561,6 +562,7 @@ func newMachineController(
561562
nodeInformer: nodeInformer,
562563
managementClient: managementClient,
563564
managementScaleClient: managementScaleClient,
565+
managementDiscoveryClient: managementDiscoveryClient,
564566
machineSetResource: gvrMachineSet,
565567
machinePoolResource: gvrMachinePool,
566568
machinePoolsAvailable: machinePoolsAvailable,
@@ -586,11 +588,15 @@ func groupVersionHasResource(client discovery.DiscoveryInterface, groupVersion,
586588
return false, nil
587589
}
588590

589-
func getAPIGroupPreferredVersion(client discovery.DiscoveryInterface, APIGroup string) (string, error) {
591+
func getCAPIGroupPreferredVersion(client discovery.DiscoveryInterface, APIGroup string) (string, error) {
590592
if version := os.Getenv(CAPIVersionEnvVar); version != "" {
591593
return version, nil
592594
}
593595

596+
return getAPIGroupPreferredVersion(client, APIGroup)
597+
}
598+
599+
func getAPIGroupPreferredVersion(client discovery.DiscoveryInterface, APIGroup string) (string, error) {
594600
groupList, err := client.ServerGroups()
595601
if err != nil {
596602
return "", fmt.Errorf("failed to get ServerGroups: %v", err)

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_controller_test.go

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ func mustCreateTestController(t testing.TB, testConfigs ...*testConfig) (*machin
107107
dynamicClientset := fakedynamic.NewSimpleDynamicClientWithCustomListKinds(
108108
runtime.NewScheme(),
109109
map[schema.GroupVersionResource]string{
110-
{Group: "cluster.x-k8s.io", Version: "v1alpha3", Resource: "machinedeployments"}: "kindList",
111-
{Group: "cluster.x-k8s.io", Version: "v1alpha3", Resource: "machines"}: "kindList",
112-
{Group: "cluster.x-k8s.io", Version: "v1alpha3", Resource: "machinesets"}: "kindList",
113-
{Group: "cluster.x-k8s.io", Version: "v1alpha3", Resource: "machinepools"}: "kindList",
114110
{Group: "cluster.x-k8s.io", Version: "v1beta1", Resource: "machinedeployments"}: "kindList",
115111
{Group: "cluster.x-k8s.io", Version: "v1beta1", Resource: "machines"}: "kindList",
116112
{Group: "cluster.x-k8s.io", Version: "v1beta1", Resource: "machinesets"}: "kindList",
113+
{Group: "cluster.x-k8s.io", Version: "v1beta2", Resource: "machinedeployments"}: "kindList",
114+
{Group: "cluster.x-k8s.io", Version: "v1beta2", Resource: "machines"}: "kindList",
115+
{Group: "cluster.x-k8s.io", Version: "v1beta2", Resource: "machinesets"}: "kindList",
116+
{Group: "cluster.x-k8s.io", Version: "v1beta2", Resource: "machinepools"}: "kindList",
117117
{Group: "custom.x-k8s.io", Version: "v1beta1", Resource: "machinepools"}: "kindList",
118118
{Group: "custom.x-k8s.io", Version: "v1beta1", Resource: "machinedeployments"}: "kindList",
119119
{Group: "custom.x-k8s.io", Version: "v1beta1", Resource: "machines"}: "kindList",
@@ -151,7 +151,7 @@ func mustCreateTestController(t testing.TB, testConfigs ...*testConfig) (*machin
151151
},
152152
},
153153
{
154-
GroupVersion: fmt.Sprintf("%s/v1alpha3", defaultCAPIGroup),
154+
GroupVersion: fmt.Sprintf("%s/v1beta2", defaultCAPIGroup),
155155
APIResources: []metav1.APIResource{
156156
{
157157
Name: resourceNameMachineDeployment,
@@ -191,7 +191,7 @@ func mustCreateTestController(t testing.TB, testConfigs ...*testConfig) (*machin
191191

192192
gvr := schema.GroupVersionResource{
193193
Group: action.GetResource().Group,
194-
Version: "v1alpha3",
194+
Version: "v1beta2",
195195
Resource: resource,
196196
}
197197

@@ -366,7 +366,7 @@ func createTestConfigs(specs ...testSpec) []*testConfig {
366366
config.machineSet = &unstructured.Unstructured{
367367
Object: map[string]interface{}{
368368
"kind": machineSetKind,
369-
"apiVersion": "cluster.x-k8s.io/v1alpha3",
369+
"apiVersion": "cluster.x-k8s.io/v1beta2",
370370
"metadata": map[string]interface{}{
371371
"name": spec.machineSetName,
372372
"namespace": spec.namespace,
@@ -404,7 +404,7 @@ func createTestConfigs(specs ...testSpec) []*testConfig {
404404
config.machineDeployment = &unstructured.Unstructured{
405405
Object: map[string]interface{}{
406406
"kind": machineDeploymentKind,
407-
"apiVersion": "cluster.x-k8s.io/v1alpha3",
407+
"apiVersion": "cluster.x-k8s.io/v1beta2",
408408
"metadata": map[string]interface{}{
409409
"name": spec.machineDeploymentName,
410410
"namespace": spec.namespace,
@@ -416,9 +416,9 @@ func createTestConfigs(specs ...testSpec) []*testConfig {
416416
"template": map[string]interface{}{
417417
"spec": map[string]interface{}{
418418
"infrastructureRef": map[string]interface{}{
419-
"apiVersion": "infrastructure.cluster.x-k8s.io/v1beta1",
420-
"kind": machineTemplateKind,
421-
"name": "TestMachineTemplate",
419+
"apiGroup": "infrastructure.cluster.x-k8s.io",
420+
"kind": machineTemplateKind,
421+
"name": "TestMachineTemplate",
422422
},
423423
},
424424
},
@@ -506,7 +506,7 @@ func makeLinkedNodeAndMachine(i int, namespace, clusterName string, owner metav1
506506
machine := &unstructured.Unstructured{
507507
Object: map[string]interface{}{
508508
"kind": machineKind,
509-
"apiVersion": "cluster.x-k8s.io/v1alpha3",
509+
"apiVersion": "cluster.x-k8s.io/v1beta2",
510510
"metadata": map[string]interface{}{
511511
"name": fmt.Sprintf("%s-%s-machine-%d", namespace, owner.Name, i),
512512
"namespace": namespace,
@@ -1550,7 +1550,7 @@ func TestGetAPIGroupPreferredVersion(t *testing.T) {
15501550
{
15511551
description: "find version for default API group",
15521552
APIGroup: defaultCAPIGroup,
1553-
preferredVersion: "v1alpha3",
1553+
preferredVersion: "v1beta2",
15541554
envVar: "",
15551555
error: false,
15561556
},
@@ -1584,7 +1584,7 @@ func TestGetAPIGroupPreferredVersion(t *testing.T) {
15841584
GroupVersion: fmt.Sprintf("%s/v1beta1", customCAPIGroup),
15851585
},
15861586
{
1587-
GroupVersion: fmt.Sprintf("%s/v1alpha3", defaultCAPIGroup),
1587+
GroupVersion: fmt.Sprintf("%s/v1beta2", defaultCAPIGroup),
15881588
},
15891589
{
15901590
GroupVersion: fmt.Sprintf("%s/%s", customCAPIGroup, customVersion),
@@ -1595,7 +1595,7 @@ func TestGetAPIGroupPreferredVersion(t *testing.T) {
15951595
for _, tc := range testCases {
15961596
t.Run(tc.description, func(t *testing.T) {
15971597
t.Setenv(CAPIVersionEnvVar, tc.envVar)
1598-
version, err := getAPIGroupPreferredVersion(discoveryClient, tc.APIGroup)
1598+
version, err := getCAPIGroupPreferredVersion(discoveryClient, tc.APIGroup)
15991599
if (err != nil) != tc.error {
16001600
t.Errorf("expected to have error: %t. Had an error: %t", tc.error, err != nil)
16011601
}
@@ -1617,14 +1617,14 @@ func TestGroupVersionHasResource(t *testing.T) {
16171617
{
16181618
description: "true when it finds resource",
16191619
resourceName: resourceNameMachineDeployment,
1620-
APIGroup: fmt.Sprintf("%s/v1alpha3", defaultCAPIGroup),
1620+
APIGroup: fmt.Sprintf("%s/v1beta2", defaultCAPIGroup),
16211621
expected: true,
16221622
error: false,
16231623
},
16241624
{
16251625
description: "false when it does not find resource",
16261626
resourceName: "resourceDoesNotExist",
1627-
APIGroup: fmt.Sprintf("%s/v1alpha3", defaultCAPIGroup),
1627+
APIGroup: fmt.Sprintf("%s/v1beta2", defaultCAPIGroup),
16281628
expected: false,
16291629
error: false,
16301630
},
@@ -1641,7 +1641,7 @@ func TestGroupVersionHasResource(t *testing.T) {
16411641
Fake: &clientgotesting.Fake{
16421642
Resources: []*metav1.APIResourceList{
16431643
{
1644-
GroupVersion: fmt.Sprintf("%s/v1alpha3", defaultCAPIGroup),
1644+
GroupVersion: fmt.Sprintf("%s/v1beta2", defaultCAPIGroup),
16451645
APIResources: []metav1.APIResource{
16461646
{
16471647
Name: resourceNameMachineDeployment,

cluster-autoscaler/cloudprovider/clusterapi/clusterapi_unstructured.go

Lines changed: 27 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -392,22 +392,44 @@ func (r unstructuredScalableResource) InstanceDRADriver() string {
392392
}
393393

394394
func (r unstructuredScalableResource) readInfrastructureReferenceResource() (*unstructured.Unstructured, error) {
395+
obKind := r.unstructured.GetKind()
396+
obName := r.unstructured.GetName()
397+
395398
infraref, found, err := unstructured.NestedStringMap(r.unstructured.Object, "spec", "template", "spec", "infrastructureRef")
396399
if !found || err != nil {
397400
return nil, nil
398401
}
399402

400-
apiversion, ok := infraref["apiVersion"]
401-
if !ok {
402-
return nil, nil
403+
var apiversion string
404+
405+
apiGroup, ok := infraref["apiGroup"]
406+
if ok {
407+
if apiversion, err = getAPIGroupPreferredVersion(r.controller.managementDiscoveryClient, apiGroup); err != nil {
408+
klog.V(4).Infof("Unable to read preferred version from api group %s, error: %v", apiGroup, err)
409+
return nil, err
410+
}
411+
apiversion = fmt.Sprintf("%s/%s", apiGroup, apiversion)
412+
} else {
413+
// Fall back to ObjectReference in capi v1beta1
414+
apiversion, ok = infraref["apiVersion"]
415+
if !ok {
416+
info := fmt.Sprintf("Missing apiVersion from %s %s's InfrastructureReference", obKind, obName)
417+
klog.V(4).Info(info)
418+
return nil, errors.New(info)
419+
}
403420
}
421+
404422
kind, ok := infraref["kind"]
405423
if !ok {
406-
return nil, nil
424+
info := fmt.Sprintf("Missing kind from %s %s's InfrastructureReference", obKind, obName)
425+
klog.V(4).Info(info)
426+
return nil, errors.New(info)
407427
}
408428
name, ok := infraref["name"]
409429
if !ok {
410-
return nil, nil
430+
info := fmt.Sprintf("Missing name from %s %s's InfrastructureReference", obKind, obName)
431+
klog.V(4).Info(info)
432+
return nil, errors.New(info)
411433
}
412434
// kind needs to be lower case and plural
413435
kind = fmt.Sprintf("%ss", strings.ToLower(kind))

0 commit comments

Comments
 (0)