Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions pkg/ctl/cmdutils/configfile.go
Original file line number Diff line number Diff line change
Expand Up @@ -829,6 +829,64 @@ func NewUpdateNodegroupLoader(cmd *Cmd) ClusterConfigLoader {
return l
}

// NewGetNodegroupLoader loads config file and validates command for `eksctl get nodegroup`.
func NewGetNodegroupLoader(cmd *Cmd, ng *api.NodeGroup) ClusterConfigLoader {
l := newCommonClusterConfigLoader(cmd)

l.validateWithoutConfigFile = func() error {
meta := cmd.ClusterConfig.Metadata

if meta.Name != "" && cmd.NameArg != "" {
return ErrClusterFlagAndArg(cmd, meta.Name, cmd.NameArg)
}

if meta.Name == "" {
return ErrMustBeSet(ClusterNameFlag(cmd))
}

if ng.Name != "" && cmd.NameArg != "" {
return ErrFlagAndArg("--name", ng.Name, cmd.NameArg)
}

if cmd.NameArg != "" {
ng.Name = cmd.NameArg
}

// prevent creation of invalid config object with unnamed nodegroup
if ng.Name != "" {
cmd.ClusterConfig.NodeGroups = append(cmd.ClusterConfig.NodeGroups, ng)
}

return nil
}

return l
}

// NewGetLabelsLoader loads config file and validates command for `eksctl get labels`.
func NewGetLabelsLoader(cmd *Cmd, ngName string) ClusterConfigLoader {
l := newCommonClusterConfigLoader(cmd)
l.validateWithoutConfigFile = func() error {
meta := cmd.ClusterConfig.Metadata

if meta.Name == "" {
return ErrMustBeSet(ClusterNameFlag(cmd))
}

if ngName == "" {
return ErrMustBeSet("--nodegroup")
}

if cmd.NameArg != "" {
return ErrUnsupportedNameArg()
}

return nil
}

return l
}

// validateSupportedConfigFields parses a config file's fields, evaluates if non-empty fields are supported,
// and returns an error if a field is not supported.
func validateSupportedConfigFields(obj interface{}, supportedFields []string, unsupportedFields []string) ([]string, error) {
Expand Down
14 changes: 4 additions & 10 deletions pkg/ctl/get/labels.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,24 +34,18 @@ func getLabelsCmd(cmd *cmdutils.Cmd) {

cmdutils.AddRegionFlag(fs, &cmd.ProviderConfig)
cmdutils.AddTimeoutFlag(fs, &cmd.ProviderConfig.WaitTimeout)
cmdutils.AddConfigFileFlag(fs, &cmd.ClusterConfigFile)
})

cmdutils.AddCommonFlagsForAWS(cmd.FlagSetGroup, &cmd.ProviderConfig, false)

}

func getLabels(cmd *cmdutils.Cmd, nodeGroupName string) error {
cfg := cmd.ClusterConfig
if cfg.Metadata.Name == "" {
return cmdutils.ErrMustBeSet(cmdutils.ClusterNameFlag(cmd))
}
if nodeGroupName == "" {
return cmdutils.ErrMustBeSet("--nodegroup")
}

if cmd.NameArg != "" {
return cmdutils.ErrUnsupportedNameArg()
if err := cmdutils.NewGetLabelsLoader(cmd, nodeGroupName).Load(); err != nil {
return err
}
cfg := cmd.ClusterConfig

ctl, err := cmd.NewProviderForExistingCluster()
if err != nil {
Expand Down
21 changes: 21 additions & 0 deletions pkg/ctl/get/labels_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package get

import (
"os"

. "github.com/onsi/ginkgo"
. "github.com/onsi/gomega"
)
Expand Down Expand Up @@ -34,5 +36,24 @@ var _ = Describe("get", func() {
Expect(err).To(HaveOccurred())
Expect(err.Error()).To(ContainSubstring("Error: name argument is not supported"))
})

It("setting --cluster and --config-file at the same time", func() {
f, err := os.CreateTemp("", "configfile")
Expect(err).NotTo(HaveOccurred())
_, err = f.WriteString(labelsGetConfigFile)
Expect(err).NotTo(HaveOccurred())
cmd := newMockCmd("labels", "--cluster", "name", "--nodegroup", "name", "--config-file", f.Name())
_, err = cmd.execute()
Expect(err).To(MatchError(ContainSubstring("Error: cannot use --cluster when --config-file/-f is set")))
})
})
})

var labelsGetConfigFile = `apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig

metadata:
name: test-nodegroup-cluster-config
region: us-west-2
version: '1.20'
`
20 changes: 1 addition & 19 deletions pkg/ctl/get/nodegroup.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,29 +45,11 @@ func getNodeGroupCmd(cmd *cmdutils.Cmd) {
}

func doGetNodeGroup(cmd *cmdutils.Cmd, ng *api.NodeGroup, params *getCmdParams) error {
if err := cmdutils.NewMetadataLoader(cmd).Load(); err != nil {
if err := cmdutils.NewGetNodegroupLoader(cmd, ng).Load(); err != nil {
return err
}
cfg := cmd.ClusterConfig

// TODO: move this into a loader when --config-file gets added to this command
if cfg.Metadata.Name == "" {
return cmdutils.ErrMustBeSet(cmdutils.ClusterNameFlag(cmd))
}

if ng.Name != "" && cmd.NameArg != "" {
return cmdutils.ErrFlagAndArg("--name", ng.Name, cmd.NameArg)
}

if cmd.NameArg != "" {
ng.Name = cmd.NameArg
}

// prevent creation of invalid config object with unnamed nodegroup
if ng.Name != "" {
cfg.NodeGroups = append(cfg.NodeGroups, ng)
}

ctl, err := cmd.NewProviderForExistingCluster()
if err != nil {
return err
Expand Down
8 changes: 1 addition & 7 deletions pkg/ctl/get/nodegroup_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,8 @@ var _ = Describe("get", func() {
Expect(err).To(MatchError(ContainSubstring("Error: --cluster must be set")))
})

It("setting --name and argument at the same time", func() {
cmd := newMockCmd("nodegroup", "ng", "--name", "ng")
_, err := cmd.execute()
Expect(err).To(MatchError(ContainSubstring("Error: --name=ng and argument ng cannot be used at the same time")))
})

It("setting --cluster and argument at the same time", func() {
cmd := newMockCmd("nodegroup", "ng", "--cluster", "name")
cmd := newMockCmd("nodegroup", "ng", "--cluster", "name", "--name", "ng")
_, err := cmd.execute()
Expect(err).To(MatchError(ContainSubstring("Error: --cluster=name and argument ng cannot be used at the same time")))
})
Expand Down