-
Notifications
You must be signed in to change notification settings - Fork 2
/
nodeGroups.go
70 lines (60 loc) · 3.05 KB
/
nodeGroups.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package eks
import (
"strings"
"github.com/DataDog/test-infra-definitions/common/config"
"github.com/DataDog/test-infra-definitions/common/utils"
"github.com/DataDog/test-infra-definitions/resources/aws"
awsEks "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/eks"
awsIam "github.com/pulumi/pulumi-aws/sdk/v6/go/aws/iam"
"github.com/pulumi/pulumi-eks/sdk/v2/go/eks"
"github.com/pulumi/pulumi/sdk/v3/go/pulumi"
)
const (
amazonLinux2AMD64AmiType = "AL2_x86_64"
amazonLinux2ARM64AmiType = "AL2_ARM_64"
bottlerocketAmiType = "BOTTLEROCKET_x86_64"
windowsAmiType = "WINDOWS_CORE_2022_x86_64"
)
func NewLinuxNodeGroup(e aws.Environment, cluster *eks.Cluster, nodeRole *awsIam.Role, opts ...pulumi.ResourceOption) (*eks.ManagedNodeGroup, error) {
return newManagedNodeGroup(e, "linux", cluster, nodeRole, amazonLinux2AMD64AmiType, e.DefaultInstanceType(), opts...)
}
func NewLinuxARMNodeGroup(e aws.Environment, cluster *eks.Cluster, nodeRole *awsIam.Role, opts ...pulumi.ResourceOption) (*eks.ManagedNodeGroup, error) {
return newManagedNodeGroup(e, "linux-arm", cluster, nodeRole, amazonLinux2ARM64AmiType, e.DefaultARMInstanceType(), opts...)
}
func NewBottlerocketNodeGroup(e aws.Environment, cluster *eks.Cluster, nodeRole *awsIam.Role, opts ...pulumi.ResourceOption) (*eks.ManagedNodeGroup, error) {
return newManagedNodeGroup(e, "bottlerocket", cluster, nodeRole, bottlerocketAmiType, e.DefaultInstanceType(), opts...)
}
func NewWindowsNodeGroup(e aws.Environment, cluster *eks.Cluster, nodeRole *awsIam.Role, opts ...pulumi.ResourceOption) (*eks.ManagedNodeGroup, error) {
return newManagedNodeGroup(e, "windows", cluster, nodeRole, windowsAmiType, e.DefaultInstanceType(), opts...)
}
func newManagedNodeGroup(e aws.Environment, name string, cluster *eks.Cluster, nodeRole *awsIam.Role, amiType, instanceType string, opts ...pulumi.ResourceOption) (*eks.ManagedNodeGroup, error) {
taints := awsEks.NodeGroupTaintArray{}
if strings.Contains(amiType, "WINDOWS") {
taints = append(taints,
awsEks.NodeGroupTaintArgs{
Key: pulumi.String("node.kubernetes.io/os"),
Value: pulumi.String("windows"),
Effect: pulumi.String("NO_SCHEDULE"),
},
)
}
return eks.NewManagedNodeGroup(e.Ctx(), e.Namer.ResourceName(name), &eks.ManagedNodeGroupArgs{
AmiType: pulumi.StringPtr(amiType),
Cluster: cluster.Core,
DiskSize: pulumi.Int(80),
InstanceTypes: pulumi.ToStringArray([]string{instanceType}),
ForceUpdateVersion: pulumi.BoolPtr(true),
NodeGroupNamePrefix: e.CommonNamer().DisplayName(37, pulumi.String(name), pulumi.String("ng")),
ScalingConfig: awsEks.NodeGroupScalingConfigArgs{
DesiredSize: pulumi.Int(1),
MaxSize: pulumi.Int(1),
MinSize: pulumi.Int(0),
},
NodeRole: nodeRole,
RemoteAccess: awsEks.NodeGroupRemoteAccessArgs{
Ec2SshKey: pulumi.String(e.DefaultKeyPairName()),
SourceSecurityGroupIds: pulumi.ToStringArray(e.EKSAllowedInboundSecurityGroups()),
},
Taints: taints,
}, utils.MergeOptions(opts, e.WithProviders(config.ProviderAWS, config.ProviderEKS))...)
}