Skip to content

Commit 3b120ec

Browse files
committed
Control plane overrides for VKS 3.2
Signed-off-by: Hongsheng Xie <hongsheng.xie@broadcom.com>
1 parent 86f2f1a commit 3b120ec

File tree

9 files changed

+61
-21
lines changed

9 files changed

+61
-21
lines changed

docs/data-sources/tanzu_kubernetes_cluster.md

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ Optional:
100100

101101
- `meta` (Block List, Max: 1) Metadata for the resource (see [below for nested schema](#nestedblock--spec--topology--control_plane--meta))
102102
- `os_image` (Block List, Max: 1) OS image block (see [below for nested schema](#nestedblock--spec--topology--control_plane--os_image))
103+
- `overrides` (String) Overrides can be used to override cluster level variables.
103104

104105
<a id="nestedblock--spec--topology--control_plane--meta"></a>
105106
### Nested Schema for `spec.topology.control_plane.meta`

docs/resources/tanzu_kubernetes_cluster.md

+1
Original file line numberDiff line numberDiff line change
@@ -398,6 +398,7 @@ Optional:
398398

399399
- `meta` (Block List, Max: 1) Metadata for the resource (see [below for nested schema](#nestedblock--spec--topology--control_plane--meta))
400400
- `os_image` (Block List, Max: 1) OS image block (see [below for nested schema](#nestedblock--spec--topology--control_plane--os_image))
401+
- `overrides` (String) Overrides can be used to override cluster level variables.
401402

402403
<a id="nestedblock--spec--topology--control_plane--meta"></a>
403404
### Nested Schema for `spec.topology.control_plane.meta`

internal/models/tanzukubernetescluster/control_plane.go

+3
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@ type VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesCluster
2121
// The OS image of the control plane.
2222
OsImage *tkccommon.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterOSImage `json:"osImage,omitempty"`
2323

24+
// Overrides can be used to override cluster level variables.
25+
Overrides []*tkccommon.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterClusterVariable `json:"overrides"`
26+
2427
// The replicas of the control plane.
2528
Replicas int32 `json:"replicas,omitempty"`
2629
}

internal/resources/tanzukubernetescluster/converter_mapping.go

+4
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,10 @@ var tfModelResourceMap = &tfModelConverterHelper.BlockToStruct{
7878
common.LabelsKey: tfModelConverterHelper.BuildDefaultModelPath("spec", "topology", "controlPlane", "metadata", "labels"),
7979
common.AnnotationsKey: tfModelConverterHelper.BuildDefaultModelPath("spec", "topology", "controlPlane", "metadata", "annotations"),
8080
},
81+
OverridesKey: &tfModelConverterHelper.EvaluatedField{
82+
Field: tfModelConverterHelper.BuildDefaultModelPath("spec", "topology", "controlPlane", tfModelConverterHelper.BuildArrayField("overrides")),
83+
EvalFunc: tfModelConverterHelper.EvaluationFunc(evaluateClusterVariables),
84+
},
8185
},
8286
ClusterVariablesKey: &tfModelConverterHelper.EvaluatedField{
8387
Field: tfModelConverterHelper.BuildDefaultModelPath("spec", "topology", tfModelConverterHelper.BuildArrayField("variables")),

internal/resources/tanzukubernetescluster/helper.go

+29-13
Original file line numberDiff line numberDiff line change
@@ -393,25 +393,41 @@ func removeUnspecifiedNodePoolsOverrides(nodePools []interface{}, kubernetesClus
393393
tfNodePoolOverrides := tfNodePoolSpec[OverridesKey]
394394

395395
if tfNodePoolOverrides != nil && tfNodePoolOverrides.(string) != "" {
396-
tfOverridesVariablesJSON := make(map[string]interface{})
397-
_ = json.Unmarshal([]byte(tfNodePoolOverrides.(string)), &tfOverridesVariablesJSON)
396+
overridesToKeep := excludeUnspecifiedOverrides(tfNodePoolOverrides.(string), kubernetesClusterModel.Spec.Topology.NodePools[i].Spec.Overrides)
397+
kubernetesClusterModel.Spec.Topology.NodePools[i].Spec.Overrides = overridesToKeep
398+
}
399+
}
400+
}
398401

399-
overridesToKeep := make([]*tkccommonmodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterClusterVariable, 0)
402+
// removeUnspecifiedControlPlaneOverrides removed node pools overrides returning in the API which do not exist in the Cluster Class schema.
403+
func removeUnspecifiedControlPlaneOverrides(controlPlane interface{}, kubernetesClusterModel *tanzukubernetesclustermodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterTanzuKubernetesCluster) {
404+
tfControlPlaneOverrides := controlPlane.(map[string]interface{})[OverridesKey]
400405

401-
for _, modelOverride := range kubernetesClusterModel.Spec.Topology.NodePools[i].Spec.Overrides {
402-
varKey := modelOverride.Name
406+
if tfControlPlaneOverrides != nil && tfControlPlaneOverrides.(string) != "" {
407+
overridesToKeep := excludeUnspecifiedOverrides(tfControlPlaneOverrides.(string), kubernetesClusterModel.Spec.Topology.ControlPlane.Overrides)
408+
kubernetesClusterModel.Spec.Topology.ControlPlane.Overrides = overridesToKeep
409+
}
410+
}
403411

404-
if tfOverridesVariableValue, exist := tfOverridesVariablesJSON[varKey]; exist {
405-
// This is necessary because some inner values have defaults and are being returned even when not filled
406-
modifiedModelVariableValue := modifyModelVariable(tfOverridesVariableValue, modelOverride.Value)
407-
modelOverride.Value = modifiedModelVariableValue
408-
overridesToKeep = append(overridesToKeep, modelOverride)
409-
}
410-
}
412+
// excludeUnspecifiedOverrides removed overrides returning in the API which do not exist in the Cluster Class schema.
413+
func excludeUnspecifiedOverrides(overridesResource string, overrides []*tkccommonmodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterClusterVariable) []*tkccommonmodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterClusterVariable {
414+
tfOverridesVariablesJSON := make(map[string]interface{})
415+
_ = json.Unmarshal([]byte(overridesResource), &tfOverridesVariablesJSON)
411416

412-
kubernetesClusterModel.Spec.Topology.NodePools[i].Spec.Overrides = overridesToKeep
417+
overridesToKeep := make([]*tkccommonmodels.VmwareTanzuManageV1alpha1ManagementClusterProvisionerTanzukubernetesClusterCommonClusterClusterVariable, 0)
418+
419+
for _, modelOverride := range overrides {
420+
varKey := modelOverride.Name
421+
422+
if tfOverridesVariableValue, exist := tfOverridesVariablesJSON[varKey]; exist {
423+
// This is necessary because some inner values have defaults and are being returned even when not filled
424+
modifiedModelVariableValue := modifyModelVariable(tfOverridesVariableValue, modelOverride.Value)
425+
modelOverride.Value = modifiedModelVariableValue
426+
overridesToKeep = append(overridesToKeep, modelOverride)
413427
}
414428
}
429+
430+
return overridesToKeep
415431
}
416432

417433
// modifyModelVariable helps when certain variables do no return from the API or in a case where some values are returning

internal/resources/tanzukubernetescluster/resource_tanzu_kuberenetes_cluster.go

+2
Original file line numberDiff line numberDiff line change
@@ -147,9 +147,11 @@ func resourceTanzuKubernetesClusterRead(ctx context.Context, data *schema.Resour
147147
specData := data.Get(SpecKey).([]interface{})[0].(map[string]interface{})
148148
topologyData := specData[TopologyKey].([]interface{})[0].(map[string]interface{})
149149
clusterVariablesData := topologyData[ClusterVariablesKey].(string)
150+
controlPlaneData := topologyData[ControlPlaneKey].([]interface{})[0]
150151
nodePoolsData := topologyData[NodePoolKey].([]interface{})
151152

152153
removeUnspecifiedClusterVariables(clusterVariablesData, kubernetesClusterModel)
154+
removeUnspecifiedControlPlaneOverrides(controlPlaneData, kubernetesClusterModel)
153155
removeUnspecifiedNodePoolsOverrides(nodePoolsData, kubernetesClusterModel)
154156

155157
err = tfModelResourceConverter.FillTFSchema(kubernetesClusterModel, data)

internal/resources/tanzukubernetescluster/schema.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,13 @@ const (
2121
ResourceName = "tanzu-mission-control_tanzu_kubernetes_cluster"
2222

2323
// Common Keys.
24-
NameKey = "name"
25-
SpecKey = "spec"
26-
VersionKey = "version"
27-
ReplicasKey = "replicas"
28-
OSImageKey = "os_image"
29-
OSArchKey = "arch"
24+
NameKey = "name"
25+
SpecKey = "spec"
26+
VersionKey = "version"
27+
ReplicasKey = "replicas"
28+
OSImageKey = "os_image"
29+
OSArchKey = "arch"
30+
OverridesKey = "overrides"
3031

3132
// Root Keys.
3233
ManagementClusterNameKey = "management_cluster_name"
@@ -57,7 +58,6 @@ const (
5758
// Node Pool Directive Keys.
5859
WorkerClassKey = "worker_class"
5960
FailureDomainKey = "failure_domain"
60-
OverridesKey = "overrides"
6161

6262
// Network Directive Keys.
6363
PodCIDRBlocksKey = "pod_cidr_blocks"
@@ -266,6 +266,14 @@ var ControlPlaneSchema = &schema.Schema{
266266
ReplicasKey: ReplicasSchema,
267267
OSImageKey: OSImageSchema,
268268
common.MetaKey: common.Meta,
269+
OverridesKey: {
270+
Type: schema.TypeString,
271+
Description: "Overrides can be used to override cluster level variables.",
272+
Optional: true,
273+
ValidateDiagFunc: validateJSONString,
274+
DiffSuppressOnRefresh: true,
275+
DiffSuppressFunc: isVariablesValuesEqual,
276+
},
269277
},
270278
},
271279
}

internal/resources/tanzukubernetescluster/tests/cluster_env_vars.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ const (
3737
TKGSOSImageVersionEnv ClusterEnvVar = "TKGS_OS_IMAGE_VERSION"
3838
TKGSOSImageArchEnv ClusterEnvVar = "TKGS_OS_IMAGE_ARCH"
3939
TKGSWorkerClassEnv ClusterEnvVar = "TKGS_WORKER_CLASS"
40+
TKGSControlPlaneOverridesEnv ClusterEnvVar = "TKGS_CONTROL_PLANE_OVERRIDES"
4041
TKGSNodePoolOverridesEnv ClusterEnvVar = "TKGS_NODE_POOL_OVERRIDES"
4142
)
4243

@@ -81,7 +82,8 @@ var (
8182
TKGSWorkerClassEnv: true,
8283
},
8384
OptionalEnvVar: {
84-
TKGSNodePoolOverridesEnv: true,
85+
TKGSControlPlaneOverridesEnv: true,
86+
TKGSNodePoolOverridesEnv: true,
8587
},
8688
},
8789
}

internal/resources/tanzukubernetescluster/tests/resource_tf_configs.go

+3
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,8 @@ func (builder *ResourceTFConfigBuilder) GetTKGSClusterConfig(tkgsEnvVars map[Clu
168168
version = "%s"
169169
arch = "%s"
170170
}
171+
172+
overrides = jsonencode(%s)
171173
}
172174
173175
%s
@@ -199,6 +201,7 @@ func (builder *ResourceTFConfigBuilder) GetTKGSClusterConfig(tkgsEnvVars map[Clu
199201
tkgsEnvVars[TKGSOSImageNameEnv],
200202
tkgsEnvVars[TKGSOSImageVersionEnv],
201203
tkgsEnvVars[TKGSOSImageArchEnv],
204+
tkgsEnvVars[TKGSControlPlaneOverridesEnv],
202205
nodePools,
203206
)
204207
}

0 commit comments

Comments
 (0)