Skip to content

Commit 3b35c07

Browse files
committed
added prism central endpoint mutation
1 parent 76659e2 commit 3b35c07

File tree

7 files changed

+183
-3
lines changed

7 files changed

+183
-3
lines changed

api/v1alpha1/nutanix_clusterconfig_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import (
1010
type NutanixSpec struct {
1111
PrismCentralEndpoint *NutanixPrismCentralEndpointSpec `json:"prismCentralEndpoint,omitempty"`
1212
ControlPlaneEndpoint *NutanixControlPlaneEndpointSpec `json:"controlPlaneEndpoint,omitempty"`
13-
FailureDomains []NutanixFailureDomain `json:"faultDomains,omitempty"`
13+
FailureDomains []NutanixFailureDomain `json:"failureDomains,omitempty"`
1414
}
1515

1616
func (NutanixSpec) VariableSchema() clusterv1.VariableSchema {

examples/capi-quick-start/nutanix-final-example.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ spec:
5959
controlPlaneEndpoint:
6060
host: "api-server-ip-fqdn"
6161
port: 6443
62-
faultDomains:
62+
failureDomains:
6363
- name: fd1
6464
cluster:
6565
name: PE1

pkg/handlers/nutanix/mutation/controlplaneendpoint/inject.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ func (h *nutanixControlPlaneEndpoint) Mutate(
9191
log.WithValues(
9292
"patchedObjectKind", obj.GetObjectKind().GroupVersionKind().String(),
9393
"patchedObjectName", client.ObjectKeyFromObject(obj),
94-
).Info("setting controlPlaneEndpoint in NutanixCluster spec")
94+
).Info("setting controlPlaneEndpoint in NutanixClusterTemplate spec")
9595

9696
obj.Spec.Template.Spec.ControlPlaneEndpoint.Host = controlPlaneEndpointVar.Host
9797
obj.Spec.Template.Spec.ControlPlaneEndpoint.Port = controlPlaneEndpointVar.Port

pkg/handlers/nutanix/mutation/metapatch_handler_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@ import (
2828
nutanixclusterconfig "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/clusterconfig"
2929
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/mutation/controlplaneendpoint"
3030
controlplaneendpointtests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/mutation/controlplaneendpoint/tests"
31+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/mutation/prismcentralendpoint"
32+
prismcentralendpointtests "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/mutation/prismcentralendpoint/tests"
3133
)
3234

3335
func metaPatchGeneratorFunc(mgr manager.Manager) func() mutation.GeneratePatches {
@@ -60,6 +62,14 @@ func TestGeneratePatches(t *testing.T) {
6062
controlplaneendpoint.VariableName,
6163
)
6264

65+
prismcentralendpointtests.TestGeneratePatches(
66+
t,
67+
metaPatchGeneratorFunc(mgr),
68+
clusterconfig.MetaVariableName,
69+
nutanixclusterconfig.NutanixVariableName,
70+
prismcentralendpoint.VariableName,
71+
)
72+
6373
auditpolicytests.TestGeneratePatches(
6474
t,
6575
metaPatchGeneratorFunc(mgr),
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package prismcentralendpoint
5+
6+
import (
7+
"context"
8+
9+
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
10+
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
11+
runtimehooksv1 "sigs.k8s.io/cluster-api/exp/runtime/hooks/api/v1alpha1"
12+
ctrl "sigs.k8s.io/controller-runtime"
13+
"sigs.k8s.io/controller-runtime/pkg/client"
14+
15+
capxv1 "github.com/d2iq-labs/capi-runtime-extensions/api/external/github.com/nutanix-cloud-native/cluster-api-provider-nutanix/api/v1beta1"
16+
"github.com/d2iq-labs/capi-runtime-extensions/api/v1alpha1"
17+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/patches"
18+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/patches/selectors"
19+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/variables"
20+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/clusterconfig"
21+
)
22+
23+
const (
24+
// VariableName is the external patch variable name.
25+
VariableName = "prismCentralEndpoint"
26+
)
27+
28+
type nutanixPrismCentralEndpoint struct {
29+
variableName string
30+
variableFieldPath []string
31+
}
32+
33+
func NewPatch() *nutanixPrismCentralEndpoint {
34+
return newNutanixPrismCentralEndpoint(
35+
clusterconfig.MetaVariableName,
36+
v1alpha1.NutanixVariableName,
37+
VariableName,
38+
)
39+
}
40+
41+
func newNutanixPrismCentralEndpoint(
42+
variableName string,
43+
variableFieldPath ...string,
44+
) *nutanixPrismCentralEndpoint {
45+
return &nutanixPrismCentralEndpoint{
46+
variableName: variableName,
47+
variableFieldPath: variableFieldPath,
48+
}
49+
}
50+
51+
func (h *nutanixPrismCentralEndpoint) Mutate(
52+
ctx context.Context,
53+
obj *unstructured.Unstructured,
54+
vars map[string]apiextensionsv1.JSON,
55+
holderRef runtimehooksv1.HolderReference,
56+
_ client.ObjectKey,
57+
) error {
58+
log := ctrl.LoggerFrom(ctx).WithValues(
59+
"holderRef", holderRef,
60+
)
61+
62+
prismCentralEndpointVar, found, err := variables.Get[v1alpha1.NutanixPrismCentralEndpointSpec](
63+
vars,
64+
h.variableName,
65+
h.variableFieldPath...,
66+
)
67+
if err != nil {
68+
return err
69+
}
70+
if !found {
71+
log.V(5).Info("Nutanix PrismCentralEndpoint variable not defined")
72+
return nil
73+
}
74+
75+
log = log.WithValues(
76+
"variableName",
77+
h.variableName,
78+
"variableFieldPath",
79+
h.variableFieldPath,
80+
"variableValue",
81+
prismCentralEndpointVar,
82+
)
83+
84+
return patches.MutateIfApplicable(
85+
obj,
86+
vars,
87+
&holderRef,
88+
selectors.InfrastructureCluster(capxv1.GroupVersion.Version, "NutanixClusterTemplate"),
89+
log,
90+
func(obj *capxv1.NutanixClusterTemplate) error {
91+
log.WithValues(
92+
"patchedObjectKind", obj.GetObjectKind().GroupVersionKind().String(),
93+
"patchedObjectName", client.ObjectKeyFromObject(obj),
94+
).Info("setting prismCentralEndpoint in NutanixClusterTemplate spec")
95+
96+
obj.Spec.Template.Spec.PrismCentral.Address = prismCentralEndpointVar.Host
97+
obj.Spec.Template.Spec.PrismCentral.Port = prismCentralEndpointVar.Port
98+
obj.Spec.Template.Spec.PrismCentral.Insecure = prismCentralEndpointVar.Insecure
99+
// TODO obj.Spec.Template.Spec.PrismCentral.AdditionalTrustBundle = prismCentralEndpointVar.AdditionalTrustBundle
100+
101+
return nil
102+
},
103+
)
104+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package tests
5+
6+
import (
7+
"testing"
8+
9+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/capi/clustertopology/handlers/mutation"
10+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest"
11+
)
12+
13+
func TestGeneratePatches(
14+
t *testing.T,
15+
generatorFunc func() mutation.GeneratePatches,
16+
variableName string,
17+
variablePath ...string,
18+
) {
19+
t.Helper()
20+
21+
capitest.ValidateGeneratePatches(
22+
t,
23+
generatorFunc,
24+
capitest.PatchTestDef{
25+
Name: "unset variable",
26+
},
27+
)
28+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// Copyright 2023 D2iQ, Inc. All rights reserved.
2+
// SPDX-License-Identifier: Apache-2.0
3+
4+
package prismcentralendpoint
5+
6+
import (
7+
"testing"
8+
9+
"k8s.io/utils/ptr"
10+
11+
"github.com/d2iq-labs/capi-runtime-extensions/api/v1alpha1"
12+
"github.com/d2iq-labs/capi-runtime-extensions/common/pkg/testutils/capitest"
13+
"github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/generic/clusterconfig"
14+
nutanixclusterconfig "github.com/d2iq-labs/capi-runtime-extensions/pkg/handlers/nutanix/clusterconfig"
15+
)
16+
17+
func TestVariableValidation(t *testing.T) {
18+
capitest.ValidateDiscoverVariables(
19+
t,
20+
clusterconfig.MetaVariableName,
21+
ptr.To(v1alpha1.ClusterConfigSpec{Nutanix: &v1alpha1.NutanixSpec{}}.VariableSchema()),
22+
true,
23+
nutanixclusterconfig.NewVariable,
24+
capitest.VariableTestDef{
25+
Name: "valid PC host or port",
26+
Vals: v1alpha1.ClusterConfigSpec{
27+
Nutanix: &v1alpha1.NutanixSpec{
28+
PrismCentralEndpoint: &v1alpha1.NutanixPrismCentralEndpointSpec{
29+
Host: "prism-central.nutanix.com",
30+
Port: 9440,
31+
Insecure: false,
32+
AdditionalTrustBundle: "",
33+
},
34+
},
35+
},
36+
},
37+
)
38+
}

0 commit comments

Comments
 (0)