Skip to content

Commit

Permalink
move create into pkg/actions/iam and move tasks around
Browse files Browse the repository at this point in the history
  • Loading branch information
aclevername committed Jan 14, 2021
1 parent 68b9ef4 commit 329a3ac
Show file tree
Hide file tree
Showing 12 changed files with 214 additions and 209 deletions.
80 changes: 76 additions & 4 deletions pkg/actions/iam/create.go
Original file line number Diff line number Diff line change
@@ -1,18 +1,90 @@
package iam

import (
"fmt"

"github.com/pkg/errors"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/ctl/cmdutils"
iamoidc "github.com/weaveworks/eksctl/pkg/iam/oidc"
"github.com/weaveworks/eksctl/pkg/kubernetes"
"github.com/weaveworks/eksctl/pkg/utils/tasks"

kubewrapper "github.com/weaveworks/eksctl/pkg/kubernetes"
)

func (a *Manager) CreateIAMServiceAccount(iamServiceAccounts []*api.ClusterIAMServiceAccount, plan bool) error {
taskTree := a.stackManager.NewTasksToCreateIAMServiceAccounts(iamServiceAccounts, a.oidcManager, kubernetes.NewCachedClientSet(a.clientSet))
func (m *Manager) CreateIAMServiceAccount(iamServiceAccounts []*api.ClusterIAMServiceAccount, plan bool) error {
taskTree := m.NewTasksToCreateIAMServiceAccounts(iamServiceAccounts, kubernetes.NewCachedClientSet(m.clientSet))
taskTree.PlanMode = plan

err := doTasks(taskTree)

cmdutils.LogPlanModeWarning(plan && len(iamServiceAccounts) > 0)
LogPlanModeWarning(plan && len(iamServiceAccounts) > 0)

return err
}

func (m *Manager) NewTasksToCreateIAMServiceAccounts(serviceAccounts []*api.ClusterIAMServiceAccount, clientSetGetter kubernetes.ClientSetGetter) *tasks.TaskTree {
taskTree := &tasks.TaskTree{Parallel: true}

for i := range serviceAccounts {
sa := serviceAccounts[i]
saTasks := &tasks.TaskTree{
Parallel: false,
IsSubTask: true,
}

saTasks.Append(&createIAMServiceAccountTask{
info: fmt.Sprintf("create IAM role for serviceaccount %q", sa.NameString()),
serviceAccount: sa,
oidc: m.oidcManager,
stackManager: m.stackManager,
})

saTasks.Append(&kubernetesTask{
info: fmt.Sprintf("create serviceaccount %q", sa.NameString()),
kubernetes: clientSetGetter,
call: func(clientSet kubernetes.Interface) error {
sa.SetAnnotations()
if err := kubernetes.MaybeCreateServiceAccountOrUpdateMetadata(clientSet, sa.ClusterIAMMeta.AsObjectMeta()); err != nil {
return errors.Wrapf(err, "failed to create service account %s", sa.NameString())
}
return nil
},
})

taskTree.Append(saTasks)
}
return taskTree
}

type createIAMServiceAccountTask struct {
info string
serviceAccount *api.ClusterIAMServiceAccount
oidc *iamoidc.OpenIDConnectManager
stackManager StackManager
}

func (t *createIAMServiceAccountTask) Describe() string { return t.info }
func (t *createIAMServiceAccountTask) Do(errs chan error) error {
return t.stackManager.CreateIAMServiceAccount(errs, t.serviceAccount, t.oidc)
}

type kubernetesTask struct {
info string
kubernetes kubewrapper.ClientSetGetter
call func(kubernetes.Interface) error
}

func (t *kubernetesTask) Describe() string { return t.info }
func (t *kubernetesTask) Do(errs chan error) error {
if t.kubernetes == nil {
return fmt.Errorf("cannot start task %q as Kubernetes client configurtaion wasn't provided", t.Describe())
}
clientSet, err := t.kubernetes.ClientSet()
if err != nil {
return err
}
err = t.call(clientSet)
close(errs)
return err
}
163 changes: 78 additions & 85 deletions pkg/actions/iam/fakes/fake_stack_manager.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

14 changes: 9 additions & 5 deletions pkg/actions/iam/iam.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,14 @@ import (
"github.com/kris-nova/logger"
api "github.com/weaveworks/eksctl/pkg/apis/eksctl.io/v1alpha5"
"github.com/weaveworks/eksctl/pkg/cfn/manager"
"github.com/weaveworks/eksctl/pkg/eks"
iamoidc "github.com/weaveworks/eksctl/pkg/iam/oidc"
"github.com/weaveworks/eksctl/pkg/kubernetes"
"github.com/weaveworks/eksctl/pkg/utils/tasks"
kubeclient "k8s.io/client-go/kubernetes"
)

type Manager struct {
clusterName string
clusterProvider *eks.ClusterProvider
clusterProvider api.ClusterProvider
oidcManager *iamoidc.OpenIDConnectManager
stackManager StackManager
clientSet kubeclient.Interface
Expand All @@ -25,10 +23,10 @@ type Manager struct {
type StackManager interface {
ListStacksMatching(nameRegex string, statusFilters ...string) ([]*manager.Stack, error)
UpdateStack(stackName, changeSetName, description string, templateData manager.TemplateData, parameters map[string]string) error
NewTasksToCreateIAMServiceAccounts(serviceAccounts []*api.ClusterIAMServiceAccount, oidc *iamoidc.OpenIDConnectManager, clientSetGetter kubernetes.ClientSetGetter) *tasks.TaskTree
CreateIAMServiceAccount(errs chan error, spec *api.ClusterIAMServiceAccount, oidc *iamoidc.OpenIDConnectManager) error
}

func New(clusterName string, clusterProvider *eks.ClusterProvider, stackManager StackManager, oidcManager *iamoidc.OpenIDConnectManager, clientSet kubeclient.Interface) *Manager {
func New(clusterName string, clusterProvider api.ClusterProvider, stackManager StackManager, oidcManager *iamoidc.OpenIDConnectManager, clientSet kubeclient.Interface) *Manager {
return &Manager{
clusterName: clusterName,
clusterProvider: clusterProvider,
Expand All @@ -49,3 +47,9 @@ func doTasks(taskTree *tasks.TaskTree) error {
}
return nil
}

func LogPlanModeWarning(plan bool) {
if plan {
logger.Warning("no changes were applied, run again with '--approve' to apply the changes")
}
}
43 changes: 0 additions & 43 deletions pkg/actions/iam/tasks.go

This file was deleted.

0 comments on commit 329a3ac

Please sign in to comment.