Skip to content
This repository was archived by the owner on Apr 11, 2024. It is now read-only.

Commit 3f673f9

Browse files
committed
feat: set default instance type for aws cp and workers
1 parent cdf1979 commit 3f673f9

File tree

7 files changed

+65
-13
lines changed

7 files changed

+65
-13
lines changed

api/v1alpha1/aws_node_types.go

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,17 @@
44
package v1alpha1
55

66
import (
7+
"github.com/d2iq-labs/cluster-api-runtime-extensions-nutanix/api/variables"
78
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
9+
"k8s.io/utils/ptr"
810
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
911
)
1012

13+
const (
14+
AWSControlPlaneInstanceType InstanceType = "m5.xlarge"
15+
AWSWorkerInstanceType InstanceType = "m5.xlarge"
16+
)
17+
1118
type AWSNodeSpec struct {
1219
// +optional
1320
IAMInstanceProfile *IAMInstanceProfile `json:"iamInstanceProfile,omitempty"`
@@ -49,21 +56,38 @@ func (AdditionalSecurityGroup) VariableSchema() clusterv1.VariableSchema {
4956
}
5057
}
5158

52-
func (AWSNodeSpec) VariableSchema() clusterv1.VariableSchema {
59+
func (a AWSNodeSpec) VariableSchema() clusterv1.VariableSchema {
60+
instanceType := InstanceType("")
61+
if a.InstanceType != nil {
62+
instanceType = *a.InstanceType
63+
}
64+
5365
return clusterv1.VariableSchema{
5466
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
5567
Description: "AWS Node configuration",
5668
Type: "object",
5769
Properties: map[string]clusterv1.JSONSchemaProps{
5870
"iamInstanceProfile": IAMInstanceProfile("").VariableSchema().OpenAPIV3Schema,
59-
"instanceType": InstanceType("").VariableSchema().OpenAPIV3Schema,
71+
"instanceType": instanceType.VariableSchema().OpenAPIV3Schema,
6072
"ami": AMISpec{}.VariableSchema().OpenAPIV3Schema,
6173
"additionalSecurityGroups": AdditionalSecurityGroup{}.VariableSchema().OpenAPIV3Schema,
6274
},
6375
},
6476
}
6577
}
6678

79+
func AWSControlPlaneNodeSpec() *AWSNodeSpec {
80+
return &AWSNodeSpec{
81+
InstanceType: ptr.To(AWSControlPlaneInstanceType),
82+
}
83+
}
84+
85+
func AWSWorkerNodeSpec() *AWSNodeSpec {
86+
return &AWSNodeSpec{
87+
InstanceType: ptr.To(AWSWorkerInstanceType),
88+
}
89+
}
90+
6791
type IAMInstanceProfile string
6892

6993
func (IAMInstanceProfile) VariableSchema() clusterv1.VariableSchema {
@@ -77,11 +101,24 @@ func (IAMInstanceProfile) VariableSchema() clusterv1.VariableSchema {
77101

78102
type InstanceType string
79103

80-
func (InstanceType) VariableSchema() clusterv1.VariableSchema {
104+
func (i InstanceType) VariableSchema() clusterv1.VariableSchema {
105+
return clusterv1.VariableSchema{
106+
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
107+
Type: "string",
108+
Description: "The AWS instance type to use for the cluster Machines",
109+
Default: variables.MustMarshal(string(i)),
110+
},
111+
}
112+
}
113+
114+
type ControlPlaneInstanceType string
115+
116+
func (ControlPlaneInstanceType) VariableSchema() clusterv1.VariableSchema {
81117
return clusterv1.VariableSchema{
82118
OpenAPIV3Schema: clusterv1.JSONSchemaProps{
83119
Type: "string",
84120
Description: "The AWS instance type to use for the cluster Machines",
121+
Default: variables.MustMarshal("m5.xlarge"),
85122
},
86123
}
87124
}

api/v1alpha1/clusterconfig_types.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,16 +57,16 @@ type ClusterConfigSpec struct {
5757

5858
func (s ClusterConfigSpec) VariableSchema() clusterv1.VariableSchema { //nolint:gocritic,lll // Passed by value for no potential side-effect.
5959
clusterConfigProps := GenericClusterConfig{}.VariableSchema()
60-
60+
if s.ControlPlane == nil {
61+
s.ControlPlane = &NodeConfigSpec{}
62+
}
6163
switch {
6264
case s.AWS != nil:
6365
maps.Copy(
6466
clusterConfigProps.OpenAPIV3Schema.Properties,
6567
map[string]clusterv1.JSONSchemaProps{
66-
AWSVariableName: AWSSpec{}.VariableSchema().OpenAPIV3Schema,
67-
"controlPlane": NodeConfigSpec{
68-
AWS: &AWSNodeSpec{},
69-
}.VariableSchema().OpenAPIV3Schema,
68+
AWSVariableName: s.AWS.VariableSchema().OpenAPIV3Schema,
69+
"controlPlane": s.ControlPlane.VariableSchema().OpenAPIV3Schema,
7070
},
7171
)
7272
case s.Docker != nil:
@@ -94,6 +94,15 @@ func (s ClusterConfigSpec) VariableSchema() clusterv1.VariableSchema { //nolint:
9494
return clusterConfigProps
9595
}
9696

97+
func DefaultAWSClusterConfigSpec() *ClusterConfigSpec {
98+
return &ClusterConfigSpec{
99+
AWS: &AWSSpec{},
100+
ControlPlane: &NodeConfigSpec{
101+
AWS: AWSControlPlaneNodeSpec(),
102+
},
103+
}
104+
}
105+
97106
// GenericClusterConfig defines the generic cluster configdesired.
98107
type GenericClusterConfig struct {
99108
// +optional

api/v1alpha1/node_types.go

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ func (s NodeConfigSpec) VariableSchema() clusterv1.VariableSchema {
4141
maps.Copy(
4242
nodeConfigProps.OpenAPIV3Schema.Properties,
4343
map[string]clusterv1.JSONSchemaProps{
44-
AWSVariableName: AWSNodeSpec{}.VariableSchema().OpenAPIV3Schema,
44+
AWSVariableName: s.AWS.VariableSchema().OpenAPIV3Schema,
4545
},
4646
)
4747
case s.Docker != nil:
@@ -63,6 +63,12 @@ func (s NodeConfigSpec) VariableSchema() clusterv1.VariableSchema {
6363
return nodeConfigProps
6464
}
6565

66+
func DefaultAWSWorkerConfigSpec() *NodeConfigSpec {
67+
return &NodeConfigSpec{
68+
AWS: AWSWorkerNodeSpec(),
69+
}
70+
}
71+
6672
type GenericNodeConfig struct{}
6773

6874
func (GenericNodeConfig) VariableSchema() clusterv1.VariableSchema {

pkg/handlers/aws/clusterconfig/variables.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (h *awsClusterConfigVariableHandler) DiscoverVariables(
4343
resp.Variables = append(resp.Variables, clusterv1.ClusterClassVariable{
4444
Name: clusterconfig.MetaVariableName,
4545
Required: true,
46-
Schema: v1alpha1.ClusterConfigSpec{AWS: &v1alpha1.AWSSpec{}}.VariableSchema(),
46+
Schema: v1alpha1.DefaultAWSClusterConfigSpec().VariableSchema(),
4747
})
4848
resp.SetStatus(runtimehooksv1.ResponseStatusSuccess)
4949
}

pkg/handlers/aws/mutation/instancetype/variables_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ func TestVariableValidation(t *testing.T) {
1818
capitest.ValidateDiscoverVariables(
1919
t,
2020
clusterconfig.MetaVariableName,
21-
ptr.To(v1alpha1.ClusterConfigSpec{AWS: &v1alpha1.AWSSpec{}}.VariableSchema()),
21+
ptr.To(v1alpha1.DefaultAWSClusterConfigSpec().VariableSchema()),
2222
true,
2323
awsclusterconfig.NewVariable,
2424
capitest.VariableTestDef{

pkg/handlers/aws/workerconfig/variables.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ func (h *awsWorkerConfigVariableHandler) DiscoverVariables(
4343
resp.Variables = append(resp.Variables, clusterv1.ClusterClassVariable{
4444
Name: workerconfig.MetaVariableName,
4545
Required: false,
46-
Schema: v1alpha1.NodeConfigSpec{AWS: &v1alpha1.AWSNodeSpec{}}.VariableSchema(),
46+
Schema: v1alpha1.DefaultAWSWorkerConfigSpec().VariableSchema(),
4747
})
4848
resp.SetStatus(runtimehooksv1.ResponseStatusSuccess)
4949
}

pkg/handlers/aws/workerconfig/variables_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ func TestVariableValidation(t *testing.T) {
1717
capitest.ValidateDiscoverVariables(
1818
t,
1919
workerconfig.MetaVariableName,
20-
ptr.To(v1alpha1.NodeConfigSpec{AWS: &v1alpha1.AWSNodeSpec{}}.VariableSchema()),
20+
ptr.To(v1alpha1.DefaultAWSWorkerConfigSpec().VariableSchema()),
2121
false,
2222
NewVariable,
2323
capitest.VariableTestDef{

0 commit comments

Comments
 (0)