Skip to content

Commit

Permalink
Enable taints support in snow
Browse files Browse the repository at this point in the history
  • Loading branch information
jiayiwang7 committed Jun 13, 2022
1 parent e84230a commit cf1d599
Show file tree
Hide file tree
Showing 14 changed files with 564 additions and 182 deletions.
3 changes: 3 additions & 0 deletions pkg/clusterapi/apibuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -146,11 +146,13 @@ func KubeadmControlPlane(clusterSpec *cluster.Spec, infrastructureObject APIObje
InitConfiguration: &bootstrapv1.InitConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: clusterSpec.Cluster.Spec.ControlPlaneConfiguration.Taints,
},
},
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: clusterSpec.Cluster.Spec.ControlPlaneConfiguration.Taints,
},
},
PreKubeadmCommands: []string{},
Expand Down Expand Up @@ -193,6 +195,7 @@ func KubeadmConfigTemplate(clusterSpec *cluster.Spec, workerNodeGroupConfig v1al
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: workerNodeGroupConfig.Taints,
},
},
PreKubeadmCommands: []string{},
Expand Down
40 changes: 40 additions & 0 deletions pkg/clusterapi/apibuilder_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,14 @@ func newApiBuilerTest(t *testing.T) apiBuilerTest {
Host: "1.2.3.4",
},
Count: 3,
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
KubernetesVersion: "1.21",
},
Expand All @@ -94,6 +102,14 @@ func newApiBuilerTest(t *testing.T) apiBuilerTest {
workerNodeGroupConfig := &v1alpha1.WorkerNodeGroupConfiguration{
Name: "wng-1",
Count: 3,
Taints: []v1.Taint{
{
Key: "key2",
Value: "val2",
Effect: v1.TaintEffectNoSchedule,
TimeAdded: nil,
},
},
}

kubeadmConfigTemplate := &bootstrapv1.KubeadmConfigTemplate{
Expand Down Expand Up @@ -231,11 +247,27 @@ func wantKubeadmControlPlane() *controlplanev1.KubeadmControlPlane {
InitConfiguration: &bootstrapv1.InitConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
PreKubeadmCommands: []string{},
Expand Down Expand Up @@ -283,6 +315,14 @@ func wantKubeadmConfigTemplate() *bootstrapv1.KubeadmConfigTemplate {
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key2",
Value: "val2",
Effect: v1.TaintEffectNoSchedule,
TimeAdded: nil,
},
},
},
},
PreKubeadmCommands: []string{},
Expand Down
39 changes: 39 additions & 0 deletions pkg/clusterapi/fetch.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package clusterapi

import (
"context"

apierrors "k8s.io/apimachinery/pkg/api/errors"
clusterv1 "sigs.k8s.io/cluster-api/api/v1beta1"
bootstrapv1 "sigs.k8s.io/cluster-api/bootstrap/kubeadm/api/v1beta1"

"github.com/aws/eks-anywhere/pkg/api/v1alpha1"
"github.com/aws/eks-anywhere/pkg/clients/kubernetes"
"github.com/aws/eks-anywhere/pkg/cluster"
"github.com/aws/eks-anywhere/pkg/constants"
)

func MachineDeploymentInCluster(ctx context.Context, kubeclient kubernetes.Client, clusterSpec *cluster.Spec, workerNodeGroupConfig v1alpha1.WorkerNodeGroupConfiguration) (*clusterv1.MachineDeployment, error) {
md := &clusterv1.MachineDeployment{}
err := kubeclient.Get(ctx, MachineDeploymentName(clusterSpec, workerNodeGroupConfig), constants.EksaSystemNamespace, md)
if apierrors.IsNotFound(err) {
return nil, nil
}
return md, err
}

func KubeadmConfigTemplateInCluster(ctx context.Context, kubeclient kubernetes.Client, clusterSpec *cluster.Spec, md *clusterv1.MachineDeployment) (*bootstrapv1.KubeadmConfigTemplate, error) {
if md == nil {
return nil, nil
}

kct := &bootstrapv1.KubeadmConfigTemplate{}
err := kubeclient.Get(ctx, md.Spec.Template.Spec.Bootstrap.ConfigRef.Name, constants.EksaSystemNamespace, kct)
if apierrors.IsNotFound(err) {
return nil, nil
}
if err != nil {
return nil, err
}
return kct, nil
}
48 changes: 48 additions & 0 deletions pkg/clusterapi/identity_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -111,11 +111,27 @@ func TestConfigureAWSIAMAuthInKubeadmControlPlane(t *testing.T) {
InitConfiguration: &bootstrapv1.InitConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
PreKubeadmCommands: []string{},
Expand Down Expand Up @@ -279,11 +295,27 @@ func TestConfigureOIDCInKubeadmControlPlane(t *testing.T) {
InitConfiguration: &bootstrapv1.InitConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
PreKubeadmCommands: []string{},
Expand Down Expand Up @@ -374,11 +406,27 @@ func TestConfigurePodIamAuthInKubeadmControlPlane(t *testing.T) {
InitConfiguration: &bootstrapv1.InitConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
JoinConfiguration: &bootstrapv1.JoinConfiguration{
NodeRegistration: bootstrapv1.NodeRegistrationOptions{
KubeletExtraArgs: map[string]string{},
Taints: []v1.Taint{
{
Key: "key1",
Value: "val1",
Effect: v1.TaintEffectNoExecute,
TimeAdded: nil,
},
},
},
},
PreKubeadmCommands: []string{},
Expand Down
8 changes: 8 additions & 0 deletions pkg/clusterapi/name.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,3 +50,11 @@ func DefaultKubeadmConfigTemplateName(clusterSpec *cluster.Spec, workerNodeGroup
func clusterWorkerNodeGroupName(clusterSpec *cluster.Spec, workerNodeGroupConfig v1alpha1.WorkerNodeGroupConfiguration) string {
return fmt.Sprintf("%s-%s", clusterSpec.Cluster.Name, workerNodeGroupConfig.Name)
}

func ControlPlaneMachineTemplateName(clusterSpec *cluster.Spec) string {
return DefaultObjectName(fmt.Sprintf("%s-control-plane", clusterSpec.Cluster.Name))
}

func WorkerMachineTemplateName(clusterSpec *cluster.Spec, workerNodeGroupConfig v1alpha1.WorkerNodeGroupConfiguration) string {
return DefaultObjectName(fmt.Sprintf("%s-%s", clusterSpec.Cluster.Name, workerNodeGroupConfig.Name))
}
36 changes: 36 additions & 0 deletions pkg/clusterapi/name_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,3 +137,39 @@ func TestDefaultKubeadmConfigTemplateName(t *testing.T) {
})
}
}

func TestControlPlaneMachineTemplateName(t *testing.T) {
tests := []struct {
name string
want string
}{
{
name: "test cluster",
want: "test-cluster-control-plane-1",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := newApiBuilerTest(t)
g.Expect(clusterapi.ControlPlaneMachineTemplateName(g.clusterSpec)).To(Equal(tt.want))
})
}
}

func TestWorkerMachineTemplateName(t *testing.T) {
tests := []struct {
name string
want string
}{
{
name: "wng 1",
want: "test-cluster-wng-1-1",
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
g := newApiBuilerTest(t)
g.Expect(clusterapi.WorkerMachineTemplateName(g.clusterSpec, *g.workerNodeGroupConfig)).To(Equal(tt.want))
})
}
}
29 changes: 3 additions & 26 deletions pkg/providers/snow/apibuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -91,19 +91,6 @@ func kubeadmConfigTemplate(clusterSpec *cluster.Spec, workerNodeGroupConfig v1al
return kct, nil
}

func KubeadmConfigTemplates(clusterSpec *cluster.Spec) (map[string]*bootstrapv1.KubeadmConfigTemplate, error) {
m := make(map[string]*bootstrapv1.KubeadmConfigTemplate, len(clusterSpec.Cluster.Spec.WorkerNodeGroupConfigurations))

for _, workerNodeGroupConfig := range clusterSpec.Cluster.Spec.WorkerNodeGroupConfigurations {
template, err := kubeadmConfigTemplate(clusterSpec, workerNodeGroupConfig)
if err != nil {
return nil, err
}
m[workerNodeGroupConfig.Name] = template
}
return m, nil
}

func machineDeployment(clusterSpec *cluster.Spec, workerNodeGroupConfig v1alpha1.WorkerNodeGroupConfiguration, kubeadmConfigTemplate *bootstrapv1.KubeadmConfigTemplate, snowMachineTemplate *snowv1.AWSSnowMachineTemplate) clusterv1.MachineDeployment {
md := clusterapi.MachineDeployment(clusterSpec, workerNodeGroupConfig, kubeadmConfigTemplate, snowMachineTemplate)
return md
Expand All @@ -115,7 +102,7 @@ func MachineDeployments(clusterSpec *cluster.Spec, kubeadmConfigTemplates map[st
for _, workerNodeGroupConfig := range clusterSpec.Cluster.Spec.WorkerNodeGroupConfigurations {
deployment := machineDeployment(clusterSpec, workerNodeGroupConfig,
kubeadmConfigTemplates[workerNodeGroupConfig.Name],
machineTemplates[workerNodeGroupConfig.MachineGroupRef.Name],
machineTemplates[workerNodeGroupConfig.Name],
)
m[workerNodeGroupConfig.Name] = &deployment
}
Expand Down Expand Up @@ -143,25 +130,15 @@ func SnowCluster(clusterSpec *cluster.Spec) *snowv1.AWSSnowCluster {
return cluster
}

func SnowMachineTemplates(clusterSpec *cluster.Spec) map[string]*snowv1.AWSSnowMachineTemplate {
m := map[string]*snowv1.AWSSnowMachineTemplate{}

for _, workerNodeGroupConfig := range clusterSpec.Cluster.Spec.WorkerNodeGroupConfigurations {
smt := SnowMachineTemplate(clusterSpec.SnowMachineConfigs[workerNodeGroupConfig.MachineGroupRef.Name])
m[workerNodeGroupConfig.MachineGroupRef.Name] = smt
}
return m
}

func SnowMachineTemplate(machineConfig *v1alpha1.SnowMachineConfig) *snowv1.AWSSnowMachineTemplate {
func SnowMachineTemplate(name string, machineConfig *v1alpha1.SnowMachineConfig) *snowv1.AWSSnowMachineTemplate {
networkConnector := string(machineConfig.Spec.PhysicalNetworkConnector)
return &snowv1.AWSSnowMachineTemplate{
TypeMeta: metav1.TypeMeta{
APIVersion: clusterapi.InfrastructureAPIVersion(),
Kind: SnowMachineTemplateKind,
},
ObjectMeta: metav1.ObjectMeta{
Name: clusterapi.DefaultObjectName(machineConfig.GetName()),
Name: name,
Namespace: constants.EksaSystemNamespace,
},
Spec: snowv1.AWSSnowMachineTemplateSpec{
Expand Down
Loading

0 comments on commit cf1d599

Please sign in to comment.