Skip to content

Commit

Permalink
Move addons related tasks to actions package (eksctl-io#7077)
Browse files Browse the repository at this point in the history
* Move addons related tasks to actions package

* improve error message displaying format

Co-authored-by: Amine <hilalyamine@gmail.com>

* improve error message displaying format (2.0)

Co-authored-by: Amine <hilalyamine@gmail.com>

---------

Co-authored-by: Amine <hilalyamine@gmail.com>
  • Loading branch information
TiberiuGC and a-hilaly authored Sep 27, 2023
1 parent fb500f0 commit 29164ee
Show file tree
Hide file tree
Showing 8 changed files with 115 additions and 138 deletions.
19 changes: 17 additions & 2 deletions pkg/actions/addon/addon.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,42 @@ import (
"strings"
"time"

cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
"github.com/aws/aws-sdk-go-v2/service/eks"
"github.com/hashicorp/go-version"
"github.com/kris-nova/logger"
kubeclient "k8s.io/client-go/kubernetes"

api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/awsapi"
"github.com/weaveworks/eksctl/pkg/cfn/builder"
"github.com/weaveworks/eksctl/pkg/cfn/manager"
iamoidc "github.com/weaveworks/eksctl/pkg/iam/oidc"
)

// StackManager manages CloudFormation stacks for addons.
//
//go:generate go run github.com/maxbrunsfeld/counterfeiter/v6 -generate
//counterfeiter:generate -o fakes/fake_stack_manager.go . StackManager
type StackManager interface {
CreateStack(ctx context.Context, name string, stack builder.ResourceSetReader, tags, parameters map[string]string, errs chan error) error
DeleteStackBySpec(ctx context.Context, s *cfntypes.Stack) (*cfntypes.Stack, error)
DeleteStackBySpecSync(ctx context.Context, s *cfntypes.Stack, errs chan error) error
DescribeStack(ctx context.Context, i *cfntypes.Stack) (*cfntypes.Stack, error)
GetIAMAddonsStacks(ctx context.Context) ([]*cfntypes.Stack, error)
UpdateStack(ctx context.Context, options manager.UpdateStackOptions) error
}

type Manager struct {
clusterConfig *api.ClusterConfig
eksAPI awsapi.EKS
withOIDC bool
oidcManager *iamoidc.OpenIDConnectManager
stackManager manager.StackManager
stackManager StackManager
clientSet kubeclient.Interface
}

func New(clusterConfig *api.ClusterConfig, eksAPI awsapi.EKS, stackManager manager.StackManager, withOIDC bool, oidcManager *iamoidc.OpenIDConnectManager, clientSet kubeclient.Interface) (*Manager, error) {
func New(clusterConfig *api.ClusterConfig, eksAPI awsapi.EKS, stackManager StackManager, withOIDC bool, oidcManager *iamoidc.OpenIDConnectManager, clientSet kubeclient.Interface) (*Manager, error) {
return &Manager{
clusterConfig: clusterConfig,
eksAPI: eksAPI,
Expand Down
33 changes: 33 additions & 0 deletions pkg/actions/addon/delete.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/cfn/manager"
"github.com/weaveworks/eksctl/pkg/utils/tasks"
)

func (a *Manager) DeleteWithPreserve(ctx context.Context, addon *api.Addon) error {
Expand Down Expand Up @@ -69,3 +70,35 @@ func (a *Manager) deleteAddon(ctx context.Context, addon *api.Addon, preserve bo
}
return true, nil
}

type Remover struct {
stackManager StackManager
}

func NewRemover(stackManager StackManager) *Remover {
return &Remover{
stackManager: stackManager,
}
}

func (ar *Remover) DeleteAddonIAMTasks(ctx context.Context, wait bool) (*tasks.TaskTree, error) {
stacks, err := ar.stackManager.GetIAMAddonsStacks(ctx)
if err != nil {
return nil, err
}
taskTree := &tasks.TaskTree{Parallel: true}
for _, s := range stacks {
deleteStackTasks := &tasks.TaskTree{
Parallel: false,
IsSubTask: true,
}
deleteStackTasks.Append(&deleteAddonIAMTask{
ctx: ctx,
info: fmt.Sprintf("deleting addon IAM %q", *s.StackName),
stack: s,
stackManager: ar.stackManager,
wait: wait,
})
}
return taskTree, nil
}
26 changes: 26 additions & 0 deletions pkg/actions/addon/tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@ package addon

import (
"context"
"fmt"
"strings"
"time"

cfntypes "github.com/aws/aws-sdk-go-v2/service/cloudformation/types"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/eks"
"github.com/weaveworks/eksctl/pkg/utils/tasks"
Expand Down Expand Up @@ -105,3 +107,27 @@ func (t *createAddonTask) Do(errorCh chan error) error {
}()
return nil
}

type deleteAddonIAMTask struct {
ctx context.Context
info string
stack *cfntypes.Stack
stackManager StackManager
wait bool
}

func (t *deleteAddonIAMTask) Describe() string { return t.info }

func (t *deleteAddonIAMTask) Do(errorCh chan error) error {
errMsg := fmt.Sprintf("deleting addon IAM %q", *t.stack.StackName)
if t.wait {
if err := t.stackManager.DeleteStackBySpecSync(t.ctx, t.stack, errorCh); err != nil {
return fmt.Errorf("%s: %w", errMsg, err)
}
return nil
}
if _, err := t.stackManager.DeleteStackBySpec(t.ctx, t.stack); err != nil {
return fmt.Errorf("%s: %w", errMsg, err)
}
return nil
}
4 changes: 3 additions & 1 deletion pkg/actions/cluster/owned.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (

"github.com/kris-nova/logger"

"github.com/weaveworks/eksctl/pkg/actions/addon"
"github.com/weaveworks/eksctl/pkg/actions/nodegroup"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/cfn/manager"
Expand Down Expand Up @@ -119,7 +120,8 @@ func (c *OwnedCluster) Delete(ctx context.Context, _, podEvictionWaitPeriod time
newOIDCManager := func() (*iamoidc.OpenIDConnectManager, error) {
return c.ctl.NewOpenIDConnectManager(ctx, c.cfg)
}
tasks, err := c.stackManager.NewTasksToDeleteClusterWithNodeGroups(ctx, c.clusterStack, allStacks, clusterOperable, newOIDCManager, c.ctl.Status.ClusterInfo.Cluster, kubernetes.NewCachedClientSet(clientSet), wait, force, func(errs chan error, _ string) error {
newTasksToDeleteAddonIAM := addon.NewRemover(c.stackManager).DeleteAddonIAMTasks
tasks, err := c.stackManager.NewTasksToDeleteClusterWithNodeGroups(ctx, c.clusterStack, allStacks, clusterOperable, newOIDCManager, newTasksToDeleteAddonIAM, c.ctl.Status.ClusterInfo.Cluster, kubernetes.NewCachedClientSet(clientSet), wait, force, func(errs chan error, _ string) error {
logger.Info("trying to cleanup dangling network interfaces")
stack, err := c.stackManager.DescribeClusterStack(ctx)
if err != nil {
Expand Down
3 changes: 2 additions & 1 deletion pkg/actions/cluster/unowned.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
"github.com/kris-nova/logger"
"github.com/pkg/errors"

"github.com/weaveworks/eksctl/pkg/actions/addon"
"github.com/weaveworks/eksctl/pkg/actions/nodegroup"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/cfn/manager"
Expand Down Expand Up @@ -184,7 +185,7 @@ func (c *UnownedCluster) deleteIAMAndOIDC(ctx context.Context, wait bool, cluste
}
}

deleteAddonIAMTasks, err := c.stackManager.NewTaskToDeleteAddonIAM(ctx, wait)
deleteAddonIAMTasks, err := addon.NewRemover(c.stackManager).DeleteAddonIAMTasks(ctx, wait)
if err != nil {
return err
}
Expand Down
50 changes: 15 additions & 35 deletions pkg/cfn/manager/delete_tasks.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,21 @@ func deleteAll(_ string) bool { return true }

type NewOIDCManager func() (*iamoidc.OpenIDConnectManager, error)

// NewTasksToDeleteAddonIAM temporary type, to be removed after moving NewTasksToDeleteClusterWithNodeGroups to actions package
type NewTasksToDeleteAddonIAM func(ctx context.Context, wait bool) (*tasks.TaskTree, error)

// NewTasksToDeleteClusterWithNodeGroups defines tasks required to delete the given cluster along with all of its resources
func (c *StackCollection) NewTasksToDeleteClusterWithNodeGroups(ctx context.Context, clusterStack *Stack, nodeGroupStacks []NodeGroupStack, clusterOperable bool, newOIDCManager NewOIDCManager, cluster *ekstypes.Cluster, clientSetGetter kubernetes.ClientSetGetter, wait, force bool, cleanup func(chan error, string) error) (*tasks.TaskTree, error) {
func (c *StackCollection) NewTasksToDeleteClusterWithNodeGroups(
ctx context.Context,
clusterStack *Stack,
nodeGroupStacks []NodeGroupStack,
clusterOperable bool,
newOIDCManager NewOIDCManager,
newTasksToDeleteAddonIAM NewTasksToDeleteAddonIAM,
cluster *ekstypes.Cluster,
clientSetGetter kubernetes.ClientSetGetter,
wait, force bool,
cleanup func(chan error, string) error) (*tasks.TaskTree, error) {
taskTree := &tasks.TaskTree{Parallel: false}

nodeGroupTasks, err := c.NewTasksToDeleteNodeGroups(nodeGroupStacks, deleteAll, true, cleanup)
Expand All @@ -52,7 +65,7 @@ func (c *StackCollection) NewTasksToDeleteClusterWithNodeGroups(ctx context.Cont
}
}

deleteAddonIAMTasks, err := c.NewTaskToDeleteAddonIAM(ctx, wait)
deleteAddonIAMTasks, err := newTasksToDeleteAddonIAM(ctx, wait)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -323,39 +336,6 @@ func stacksToServiceAccountMap(stacks []*types.Stack) map[string]*types.Stack {
return stackMap
}

// NewTaskToDeleteAddonIAM defines tasks required to delete all of the addons
func (c *StackCollection) NewTaskToDeleteAddonIAM(ctx context.Context, wait bool) (*tasks.TaskTree, error) {
stacks, err := c.GetIAMAddonsStacks(ctx)
if err != nil {
return nil, err
}
taskTree := &tasks.TaskTree{Parallel: true}
for _, s := range stacks {
info := fmt.Sprintf("delete addon IAM %q", *s.StackName)

deleteStackTasks := &tasks.TaskTree{
Parallel: false,
IsSubTask: true,
}
if wait {
deleteStackTasks.Append(&taskWithStackSpec{
info: info,
stack: s,
call: c.DeleteStackBySpecSync,
})
} else {
deleteStackTasks.Append(&asyncTaskWithStackSpec{
info: info,
stack: s,
call: c.DeleteStackBySpec,
})
}
taskTree.Append(deleteStackTasks)
}
return taskTree, nil

}

func clusterHasOIDCProvider(cluster *ekstypes.Cluster) (hasOIDC bool, found bool) {
for k, v := range cluster.Tags {
if k == api.ClusterOIDCEnabledTag {
Expand Down
Loading

0 comments on commit 29164ee

Please sign in to comment.