Skip to content

Commit 4295fce

Browse files
authored
Move CAPA userconfig values to global chart values (#1216)
* Move capa userconfig root fields to global fields * add CHANGELOG * Update CHANGELOG.md
1 parent 57f9bc7 commit 4295fce

File tree

7 files changed

+181
-168
lines changed

7 files changed

+181
-168
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project's packages adheres to [Semantic Versioning](http://semver.org/s
77

88
## [Unreleased]
99

10+
### Changed
11+
12+
- **BREAKING** All values of cluster userconfig for `CAPA` are moving under `global`.
13+
1014
## [2.48.1] - 2023-11-30
1115

1216
### Changed

cmd/template/cluster/provider/capa.go

Lines changed: 43 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ func templateClusterCAPA(ctx context.Context, k8sClient k8sclient.Interface, out
8383
return fmt.Errorf("management cluster's AWSCluster object had an invalid IPv4 in `.status.networkStatus.natGatewaysIPs`: %q", ip)
8484
}
8585

86-
if !slices.Contains(flagValues.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr) {
87-
flagValues.ControlPlane.LoadBalancerIngressAllowCIDRBlocks = append(flagValues.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr)
86+
if !slices.Contains(flagValues.Global.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr) {
87+
flagValues.Global.ControlPlane.LoadBalancerIngressAllowCIDRBlocks = append(flagValues.Global.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr)
8888
}
8989
}
9090

@@ -93,7 +93,7 @@ func templateClusterCAPA(ctx context.Context, k8sClient k8sclient.Interface, out
9393
// We allow specifying an empty value `--control-plane-load-balancer-ingress-allow-cidr-block ""`
9494
// to denote that only the management cluster's IPs should be allowed. Skip this value.
9595
} else if net.IsIPv4CIDRString(cidr) {
96-
flagValues.ControlPlane.LoadBalancerIngressAllowCIDRBlocks = append(flagValues.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr)
96+
flagValues.Global.ControlPlane.LoadBalancerIngressAllowCIDRBlocks = append(flagValues.Global.ControlPlane.LoadBalancerIngressAllowCIDRBlocks, cidr)
9797
} else {
9898
return fmt.Errorf("invalid CIDR (for single IPv4, please use `/32` suffix): %q", cidr)
9999
}
@@ -116,14 +116,14 @@ func templateClusterCAPA(ctx context.Context, k8sClient k8sclient.Interface, out
116116
return microerror.Mask(err)
117117
}
118118

119-
flagValues.Connectivity.Subnets = []capa.Subnet{
119+
flagValues.Global.Connectivity.Subnets = []capa.Subnet{
120120
{
121121
CidrBlocks: []capa.CIDRBlock{},
122122
},
123123
}
124124

125125
for i := 0; i < subnetCount; i++ {
126-
flagValues.Connectivity.Subnets[0].CidrBlocks = append(flagValues.Connectivity.Subnets[0].CidrBlocks, capa.CIDRBlock{
126+
flagValues.Global.Connectivity.Subnets[0].CidrBlocks = append(flagValues.Global.Connectivity.Subnets[0].CidrBlocks, capa.CIDRBlock{
127127
CIDR: subnets[i].CIDR().String(),
128128
AvailabilityZone: string(rune('a' + i)), // generate `a`, `b`, etc. based on which index we're at
129129
})
@@ -133,18 +133,18 @@ func templateClusterCAPA(ctx context.Context, k8sClient k8sclient.Interface, out
133133
if config.AWS.HttpProxy != "" {
134134
httpProxy = config.AWS.HttpProxy
135135
}
136-
flagValues.Connectivity.Proxy = &capa.Proxy{
136+
flagValues.Global.Connectivity.Proxy = &capa.Proxy{
137137
Enabled: true,
138138
HttpsProxy: config.AWS.HttpsProxy,
139139
HttpProxy: httpProxy,
140140
NoProxy: config.AWS.NoProxy,
141141
}
142142

143-
flagValues.ControlPlane.APIMode = defaultTo(config.AWS.APIMode, ModePrivate)
144-
flagValues.Connectivity.VPCMode = defaultTo(config.AWS.VPCMode, ModePrivate)
145-
flagValues.Connectivity.Topology.Mode = defaultTo(config.AWS.TopologyMode, gsannotation.NetworkTopologyModeGiantSwarmManaged)
146-
flagValues.Connectivity.Topology.PrefixListID = config.AWS.PrefixListID
147-
flagValues.Connectivity.Topology.TransitGatewayID = config.AWS.TransitGatewayID
143+
flagValues.Global.ControlPlane.APIMode = defaultTo(config.AWS.APIMode, ModePrivate)
144+
flagValues.Global.Connectivity.VPCMode = defaultTo(config.AWS.VPCMode, ModePrivate)
145+
flagValues.Global.Connectivity.Topology.Mode = defaultTo(config.AWS.TopologyMode, gsannotation.NetworkTopologyModeGiantSwarmManaged)
146+
flagValues.Global.Connectivity.Topology.PrefixListID = config.AWS.PrefixListID
147+
flagValues.Global.Connectivity.Topology.TransitGatewayID = config.AWS.TransitGatewayID
148148
}
149149

150150
configData, err := capa.GenerateClusterValues(flagValues)
@@ -209,38 +209,40 @@ func templateClusterCAPA(ctx context.Context, k8sClient k8sclient.Interface, out
209209

210210
func BuildCapaClusterConfig(config ClusterConfig) capa.ClusterConfig {
211211
return capa.ClusterConfig{
212-
Metadata: &capa.Metadata{
213-
Name: config.Name,
214-
Description: config.Description,
215-
Organization: config.Organization,
216-
},
217-
ProviderSpecific: &capa.ProviderSpecific{
218-
Region: config.Region,
219-
AWSClusterRoleIdentityName: config.AWS.AWSClusterRoleIdentityName,
220-
},
221-
Connectivity: &capa.Connectivity{
222-
AvailabilityZoneUsageLimit: config.AWS.NetworkAZUsageLimit,
223-
Bastion: &capa.Bastion{
224-
Enabled: true,
225-
InstanceType: config.BastionInstanceType,
226-
Replicas: config.BastionReplicas,
212+
Global: &capa.Global{
213+
Connectivity: &capa.Connectivity{
214+
AvailabilityZoneUsageLimit: config.AWS.NetworkAZUsageLimit,
215+
Bastion: &capa.Bastion{
216+
Enabled: true,
217+
InstanceType: config.BastionInstanceType,
218+
Replicas: config.BastionReplicas,
219+
},
220+
Network: &capa.Network{
221+
VPCCIDR: config.AWS.NetworkVPCCIDR,
222+
},
223+
Topology: &capa.Topology{},
227224
},
228-
Network: &capa.Network{
229-
VPCCIDR: config.AWS.NetworkVPCCIDR,
225+
ControlPlane: &capa.ControlPlane{
226+
InstanceType: config.ControlPlaneInstanceType,
230227
},
231-
Topology: &capa.Topology{},
232-
},
233-
ControlPlane: &capa.ControlPlane{
234-
InstanceType: config.ControlPlaneInstanceType,
235-
},
236-
NodePools: &map[string]capa.MachinePool{
237-
config.AWS.MachinePool.Name: {
238-
AvailabilityZones: config.AWS.MachinePool.AZs,
239-
InstanceType: config.AWS.MachinePool.InstanceType,
240-
MinSize: config.AWS.MachinePool.MinSize,
241-
MaxSize: config.AWS.MachinePool.MaxSize,
242-
RootVolumeSizeGB: config.AWS.MachinePool.RootVolumeSizeGB,
243-
CustomNodeLabels: config.AWS.MachinePool.CustomNodeLabels,
228+
Metadata: &capa.Metadata{
229+
Name: config.Name,
230+
Description: config.Description,
231+
Organization: config.Organization,
232+
},
233+
NodePools: &map[string]capa.MachinePool{
234+
config.AWS.MachinePool.Name: {
235+
AvailabilityZones: config.AWS.MachinePool.AZs,
236+
InstanceType: config.AWS.MachinePool.InstanceType,
237+
MinSize: config.AWS.MachinePool.MinSize,
238+
MaxSize: config.AWS.MachinePool.MaxSize,
239+
RootVolumeSizeGB: config.AWS.MachinePool.RootVolumeSizeGB,
240+
CustomNodeLabels: config.AWS.MachinePool.CustomNodeLabels,
241+
},
242+
},
243+
ProviderSpecific: &capa.ProviderSpecific{
244+
Region: config.Region,
245+
AWSClusterRoleIdentityName: config.AWS.AWSClusterRoleIdentityName,
244246
},
245247
},
246248
}

cmd/template/cluster/provider/templates/capa/functions.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@ import (
1010
)
1111

1212
func GenerateClusterValues(flagInputs ClusterConfig) (string, error) {
13-
if flagInputs.Connectivity.Topology.Mode != "" && flagInputs.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeGiantSwarmManaged && flagInputs.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeUserManaged && flagInputs.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeNone {
14-
return "", fmt.Errorf("invalid topology mode value %q", flagInputs.Connectivity.Topology.Mode)
13+
if flagInputs.Global.Connectivity.Topology.Mode != "" && flagInputs.Global.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeGiantSwarmManaged && flagInputs.Global.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeUserManaged && flagInputs.Global.Connectivity.Topology.Mode != gsannotation.NetworkTopologyModeNone {
14+
return "", fmt.Errorf("invalid topology mode value %q", flagInputs.Global.Connectivity.Topology.Mode)
1515
}
16-
if flagInputs.Connectivity.Topology.PrefixListID != "" && !strings.HasPrefix(flagInputs.Connectivity.Topology.PrefixListID, "pl-") {
17-
return "", fmt.Errorf("invalid AWS prefix list ID %q", flagInputs.Connectivity.Topology.PrefixListID)
16+
if flagInputs.Global.Connectivity.Topology.PrefixListID != "" && !strings.HasPrefix(flagInputs.Global.Connectivity.Topology.PrefixListID, "pl-") {
17+
return "", fmt.Errorf("invalid AWS prefix list ID %q", flagInputs.Global.Connectivity.Topology.PrefixListID)
1818
}
19-
if flagInputs.Connectivity.Topology.TransitGatewayID != "" && !strings.HasPrefix(flagInputs.Connectivity.Topology.TransitGatewayID, "tgw-") {
20-
return "", fmt.Errorf("invalid AWS transit gateway ID %q", flagInputs.Connectivity.Topology.TransitGatewayID)
19+
if flagInputs.Global.Connectivity.Topology.TransitGatewayID != "" && !strings.HasPrefix(flagInputs.Global.Connectivity.Topology.TransitGatewayID, "tgw-") {
20+
return "", fmt.Errorf("invalid AWS transit gateway ID %q", flagInputs.Global.Connectivity.Topology.TransitGatewayID)
2121
}
2222

2323
var flagConfigData map[string]interface{}

cmd/template/cluster/provider/templates/capa/types.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package capa
22

3-
type ClusterConfig struct {
3+
type Global struct {
44
Connectivity *Connectivity `json:"connectivity,omitempty"`
55
ControlPlane *ControlPlane `json:"controlPlane,omitempty"`
66
Metadata *Metadata `json:"metadata,omitempty"`
77
NodePools *map[string]MachinePool `json:"nodePools,omitempty"`
88
ProviderSpecific *ProviderSpecific `json:"providerSpecific,omitempty"`
99
}
1010

11+
type ClusterConfig struct {
12+
Global *Global `json:"global,omitempty"`
13+
}
14+
1115
type Metadata struct {
12-
Name string `json:"name,omitempty"`
1316
Description string `json:"description,omitempty"`
17+
Name string `json:"name,omitempty"`
1418
Organization string `json:"organization,omitempty"`
1519
}
1620

cmd/template/cluster/testdata/run_template_cluster_capa.golden

Lines changed: 27 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,33 @@
22
apiVersion: v1
33
data:
44
values: |
5-
connectivity:
6-
bastion:
7-
enabled: true
8-
network:
9-
vpcCidr: 10.123.0.0/16
10-
topology: {}
11-
controlPlane:
12-
instanceType: control-plane-instance-type
13-
metadata:
14-
description: just a test cluster
15-
name: test1
16-
organization: test
17-
nodePools:
18-
worker1:
19-
availabilityZones:
20-
- eu-west-1a
21-
- eu-west-1b
22-
customNodeLabels:
23-
- label=value
24-
instanceType: big-one
25-
maxSize: 5
26-
minSize: 2
27-
rootVolumeSizeGB: 200
28-
providerSpecific:
29-
awsClusterRoleIdentityName: default
30-
region: the-region
5+
global:
6+
connectivity:
7+
bastion:
8+
enabled: true
9+
network:
10+
vpcCidr: 10.123.0.0/16
11+
topology: {}
12+
controlPlane:
13+
instanceType: control-plane-instance-type
14+
metadata:
15+
description: just a test cluster
16+
name: test1
17+
organization: test
18+
nodePools:
19+
worker1:
20+
availabilityZones:
21+
- eu-west-1a
22+
- eu-west-1b
23+
customNodeLabels:
24+
- label=value
25+
instanceType: big-one
26+
maxSize: 5
27+
minSize: 2
28+
rootVolumeSizeGB: 200
29+
providerSpecific:
30+
awsClusterRoleIdentityName: default
31+
region: the-region
3132
kind: ConfigMap
3233
metadata:
3334
creationTimestamp: null

cmd/template/cluster/testdata/run_template_cluster_capa_2.golden

Lines changed: 46 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2,51 +2,52 @@
22
apiVersion: v1
33
data:
44
values: |
5-
connectivity:
6-
bastion:
7-
enabled: true
8-
network:
9-
vpcCidr: 10.123.0.0/16
10-
proxy:
11-
enabled: true
12-
httpProxy: http://internal-a1c90e5331e124481a14fb7ad80ae8eb-1778512673.eu-west-2.elb.amazonaws.com:4000
13-
httpsProxy: https://internal-a1c90e5331e124481a14fb7ad80ae8eb-1778512673.eu-west-2.elb.amazonaws.com:4000
14-
noProxy: test-domain.com
15-
subnets:
16-
- cidrBlocks:
17-
- availabilityZone: a
18-
cidr: 10.123.0.0/18
19-
- availabilityZone: b
20-
cidr: 10.123.64.0/18
21-
isPublic: false
22-
topology:
23-
mode: GiantSwarmManaged
24-
vpcMode: private
25-
controlPlane:
26-
apiMode: private
27-
instanceType: control-plane-instance-type
28-
loadBalancerIngressAllowCidrBlocks:
29-
- 1.2.3.4/32
30-
- 5.6.7.8/32
31-
- 9.10.11.12/32
32-
metadata:
33-
description: just a test cluster
34-
name: test1
35-
organization: test
36-
nodePools:
37-
worker1:
38-
availabilityZones:
39-
- eu-west-1a
40-
- eu-west-1b
41-
customNodeLabels:
42-
- label=value
43-
instanceType: big-one
44-
maxSize: 5
45-
minSize: 2
46-
rootVolumeSizeGB: 200
47-
providerSpecific:
48-
awsClusterRoleIdentityName: default
49-
region: the-region
5+
global:
6+
connectivity:
7+
bastion:
8+
enabled: true
9+
network:
10+
vpcCidr: 10.123.0.0/16
11+
proxy:
12+
enabled: true
13+
httpProxy: http://internal-a1c90e5331e124481a14fb7ad80ae8eb-1778512673.eu-west-2.elb.amazonaws.com:4000
14+
httpsProxy: https://internal-a1c90e5331e124481a14fb7ad80ae8eb-1778512673.eu-west-2.elb.amazonaws.com:4000
15+
noProxy: test-domain.com
16+
subnets:
17+
- cidrBlocks:
18+
- availabilityZone: a
19+
cidr: 10.123.0.0/18
20+
- availabilityZone: b
21+
cidr: 10.123.64.0/18
22+
isPublic: false
23+
topology:
24+
mode: GiantSwarmManaged
25+
vpcMode: private
26+
controlPlane:
27+
apiMode: private
28+
instanceType: control-plane-instance-type
29+
loadBalancerIngressAllowCidrBlocks:
30+
- 1.2.3.4/32
31+
- 5.6.7.8/32
32+
- 9.10.11.12/32
33+
metadata:
34+
description: just a test cluster
35+
name: test1
36+
organization: test
37+
nodePools:
38+
worker1:
39+
availabilityZones:
40+
- eu-west-1a
41+
- eu-west-1b
42+
customNodeLabels:
43+
- label=value
44+
instanceType: big-one
45+
maxSize: 5
46+
minSize: 2
47+
rootVolumeSizeGB: 200
48+
providerSpecific:
49+
awsClusterRoleIdentityName: default
50+
region: the-region
5051
kind: ConfigMap
5152
metadata:
5253
creationTimestamp: null

0 commit comments

Comments
 (0)