Skip to content

Commit

Permalink
fix: also ignore VirtualIP in Nutanix CCM
Browse files Browse the repository at this point in the history
  • Loading branch information
dkoshkin committed Dec 9, 2024
1 parent 47f91f4 commit 9f3c8f7
Show file tree
Hide file tree
Showing 3 changed files with 74 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ prismCentralInsecure: {{ .PrismCentralInsecure }}
{{- with .PrismCentralAdditionalTrustBundle }}
prismCentralAdditionalTrustBundle: "{{ . }}"
{{- end }}
{{- with .ControlPlaneEndpointHost }}
ignoredNodeIPs: [ {{ printf "%q" . }} ]
{{- end }}
{{- with .IPsToIgnore }}
ignoredNodeIPs: [ {{ joinQuoted . }} ]
{{- end }}

# The Secret containing the credentials will be created by the handler.
createSecret: false
Expand Down
29 changes: 26 additions & 3 deletions pkg/handlers/generic/lifecycle/ccm/nutanix/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"context"
"errors"
"fmt"
"strings"
"text/template"

"github.com/go-logr/logr"
Expand Down Expand Up @@ -140,7 +141,15 @@ func templateValuesFunc(
nutanixConfig *v1alpha1.NutanixSpec,
) func(*clusterv1.Cluster, string) (string, error) {
return func(_ *clusterv1.Cluster, valuesTemplate string) (string, error) {
helmValuesTemplate, err := template.New("").Parse(valuesTemplate)
joinQuoted := template.FuncMap{
"joinQuoted": func(items []string) string {
for i, item := range items {
items[i] = fmt.Sprintf("%q", item)
}
return strings.Join(items, ", ")
},
}
helmValuesTemplate, err := template.New("").Funcs(joinQuoted).Parse(valuesTemplate)
if err != nil {
return "", fmt.Errorf("failed to parse Helm values template: %w", err)
}
Expand All @@ -150,7 +159,7 @@ func templateValuesFunc(
PrismCentralPort uint16
PrismCentralInsecure bool
PrismCentralAdditionalTrustBundle string
ControlPlaneEndpointHost string
IPsToIgnore []string
}

address, port, err := nutanixConfig.PrismCentralEndpoint.ParseURL()
Expand All @@ -162,7 +171,7 @@ func templateValuesFunc(
PrismCentralPort: port,
PrismCentralInsecure: nutanixConfig.PrismCentralEndpoint.Insecure,
PrismCentralAdditionalTrustBundle: nutanixConfig.PrismCentralEndpoint.AdditionalTrustBundle,
ControlPlaneEndpointHost: nutanixConfig.ControlPlaneEndpoint.Host,
IPsToIgnore: ipsToIgnore(nutanixConfig),
}

var b bytes.Buffer
Expand All @@ -174,3 +183,17 @@ func templateValuesFunc(
return b.String(), nil
}
}

func ipsToIgnore(nutanixConfig *v1alpha1.NutanixSpec) []string {
toIgnore := []string{nutanixConfig.ControlPlaneEndpoint.Host}
// Also ignore the virtual IP if it is set.
if nutanixConfig.ControlPlaneEndpoint.VirtualIPSpec != nil &&
nutanixConfig.ControlPlaneEndpoint.VirtualIPSpec.Configuration != nil &&
nutanixConfig.ControlPlaneEndpoint.VirtualIPSpec.Configuration.Address != "" {
toIgnore = append(
toIgnore,
nutanixConfig.ControlPlaneEndpoint.VirtualIPSpec.Configuration.Address,
)
}
return toIgnore
}
45 changes: 45 additions & 0 deletions pkg/handlers/generic/lifecycle/ccm/nutanix/handler_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,16 @@ prismCentralPort: 9440
prismCentralInsecure: true
ignoredNodeIPs: [ "1.2.3.4" ]
# The Secret containing the credentials will be created by the handler.
createSecret: false
secretName: nutanix-ccm-credentials
`

expectedWithVirtualIPSet = `prismCentralEndPoint: prism-central.nutanix.com
prismCentralPort: 9440
prismCentralInsecure: true
ignoredNodeIPs: [ "1.2.3.4", "5.6.7.8" ]
# The Secret containing the credentials will be created by the handler.
createSecret: false
secretName: nutanix-ccm-credentials
Expand Down Expand Up @@ -127,6 +137,41 @@ func Test_templateValues(t *testing.T) {
in: valuesTemplate,
expected: expectedWithoutAdditionalTrustBundle,
},
{
name: "With VirtualIP Set",
clusterConfig: &apivariables.ClusterConfigSpec{
Addons: &apivariables.Addons{
GenericAddons: v1alpha1.GenericAddons{
CCM: &v1alpha1.CCM{
Credentials: &v1alpha1.CCMCredentials{
SecretRef: v1alpha1.LocalObjectReference{
Name: "creds",
},
},
},
},
},
Nutanix: &v1alpha1.NutanixSpec{
PrismCentralEndpoint: v1alpha1.NutanixPrismCentralEndpointSpec{
URL: fmt.Sprintf(
"https://prism-central.nutanix.com:%d",
v1alpha1.DefaultPrismCentralPort,
),
Insecure: true,
},
ControlPlaneEndpoint: v1alpha1.ControlPlaneEndpointSpec{
Host: "1.2.3.4",
VirtualIPSpec: &v1alpha1.ControlPlaneVirtualIPSpec{
Configuration: &v1alpha1.ControlPlaneVirtualIPConfiguration{
Address: "5.6.7.8",
},
},
},
},
},
in: valuesTemplate,
expected: expectedWithVirtualIPSet,
},
}
for idx := range tests {
tt := tests[idx]
Expand Down

0 comments on commit 9f3c8f7

Please sign in to comment.