Skip to content

Commit e862614

Browse files
chore: improve env, stage and cluster gathering
1 parent 8efdb9b commit e862614

File tree

9 files changed

+63
-33
lines changed

9 files changed

+63
-33
lines changed

cmd/main.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func main() {
117117
}
118118

119119
if event.Environment != "" && event.Stage == "" && event.Cluster == "" {
120-
env := projectConfig.Environments[event.Environment]
120+
env := projectConfig.GetEnvironment(event.Environment)
121121
err := executeHook(os.Stdout, os.Stderr, event.Type, event.Runtime, env.Actions)
122122
if err != nil {
123123
fmt.Println(err)
@@ -126,7 +126,7 @@ func main() {
126126
}
127127

128128
if event.Environment != "" && event.Stage != "" && event.Cluster == "" {
129-
stage := projectConfig.Environments[event.Environment].Stages[event.Stage]
129+
stage := projectConfig.GetStage(event.Environment, event.Stage)
130130
err := executeHook(os.Stdout, os.Stderr, event.Type, event.Runtime, stage.Actions)
131131
if err != nil {
132132
fmt.Println(err)
@@ -135,7 +135,7 @@ func main() {
135135
}
136136

137137
if event.Environment != "" && event.Stage != "" && event.Cluster != "" {
138-
cluster := projectConfig.Cluster(event.Environment, event.Stage, event.Cluster)
138+
cluster := projectConfig.GetCluster(event.Environment, event.Stage, event.Cluster)
139139
if event.Type == menu.EventTypeCreate || event.Type == menu.EventTypeUpdate {
140140
err := cluster.Render(projectConfig, event.Environment, event.Stage)
141141
if err != nil {

internal/menu/cluster.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ func (c *clusterMenu) menuSettings(env, stage string, cluster *project.Cluster)
8787

8888
// menuUpdateCluster creates a context menu to update an existing cluster
8989
func (c *clusterMenu) menuUpdateCluster(envName, stageName, clusterName string) (*project.Cluster, error) {
90-
cluster := c.config.Cluster(envName, stageName, clusterName)
90+
cluster := c.config.GetCluster(envName, stageName, clusterName)
9191
if cluster.Name == "" {
9292
cluster.Name = clusterName
9393
}
@@ -108,7 +108,7 @@ func (c *clusterMenu) menuDeleteCluster(env, stage, cluster string) (*project.Cl
108108
if !confirmation {
109109
return nil, fmt.Errorf("confirmation denied")
110110
}
111-
return c.config.Cluster(env, stage, cluster), nil
111+
return c.config.GetCluster(env, stage, cluster), nil
112112
}
113113

114114
func (c *clusterMenu) menuClusterSettingsProperties(env, stage string, cluster *project.Cluster) (map[string]string, error) {

internal/menu/environment.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (e *environmentMenu) menuCreateEnvironment() (*project.Environment, error)
2323
if s == "" {
2424
return fmt.Errorf("environment name cannot be empty")
2525
}
26-
if _, ok := e.config.Environments[s]; ok {
26+
if e.config.HasEnvironment(s) {
2727
return fmt.Errorf("environment already exists")
2828
}
2929
return nil
@@ -48,8 +48,7 @@ func (e *environmentMenu) menuCreateEnvironment() (*project.Environment, error)
4848
}
4949

5050
func (e *environmentMenu) menuUpdateEnvironment(envName string) (*project.Environment, error) {
51-
environment := e.config.Environments[envName]
52-
environment.Name = envName
51+
environment := e.config.GetEnvironment(envName)
5352
if environment.Addons == nil {
5453
environment.Addons = map[string]*project.ClusterAddon{}
5554
}
@@ -105,9 +104,9 @@ func (e *environmentMenu) menuDeleteEnvironment(envName string) (*project.Enviro
105104
if !confirmation {
106105
return nil, fmt.Errorf("confirmation denied")
107106
}
108-
environment := *e.config.Environments[envName]
107+
environment := e.config.GetEnvironment(envName)
109108
environment.Name = envName
110-
return &environment, errors.New("menuDeleteEnvironment not implemented")
109+
return environment, errors.New("menuDeleteEnvironment not implemented")
111110
}
112111

113112
func (e *environmentMenu) menuEnvironmentProperties(env *project.Environment) (map[string]string, error) {

internal/menu/root.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func RootMenu(config *project.ProjectConfig, eventCh chan<- Event) error {
6767
}
6868

6969
eventCh <- newPreUpdateEvent(EventOriginEnvironment, environment.Name, "", "")
70-
config.Environments[*env].Properties = environment.Properties
70+
config.GetEnvironment(environment.Name).Properties = environment.Properties
7171
eventCh <- newPostUpdateEvent(EventOriginEnvironment, environment.Name, "", "")
7272
return nil
7373
}
@@ -110,7 +110,7 @@ func RootMenu(config *project.ProjectConfig, eventCh chan<- Event) error {
110110

111111
eventCh <- newPreCreateEvent(EventOriginStage, *envName, stage.Name, "")
112112
// add stage to config
113-
config.Environments[*envName].Stages[stage.Name] = stage
113+
config.GetEnvironment(*envName).Stages[stage.Name] = stage
114114
eventCh <- newPostCreateEvent(EventOriginStage, *envName, stage.Name, "")
115115
return nil
116116
}
@@ -128,7 +128,7 @@ func RootMenu(config *project.ProjectConfig, eventCh chan<- Event) error {
128128

129129
eventCh <- newPreUpdateEvent(EventOriginStage, *envName, *stageName, "")
130130
// update stage in config
131-
config.Environments[*envName].Stages[stage.Name] = stage
131+
config.GetEnvironment(*envName).Stages[stage.Name] = stage
132132
eventCh <- newPostUpdateEvent(EventOriginStage, *envName, stage.Name, "")
133133
return nil
134134
}
@@ -295,7 +295,7 @@ func menuSelectEnvironment(config *project.ProjectConfig) (*string, error) {
295295
func menuSelectStage(config *project.ProjectConfig, environment string) (*string, error) {
296296
prompt := promptui.Select{
297297
Label: "Select Stage",
298-
Items: append(utils.MapKeysToList(config.Environments[environment].Stages), rootOptionDone),
298+
Items: append(utils.MapKeysToList(config.GetEnvironment(environment).Stages), rootOptionDone),
299299
}
300300
_, result, err := prompt.Run()
301301
if err != nil {
@@ -329,7 +329,7 @@ func menuHierarchySelectEnvironmentStage(config *project.ProjectConfig) (*string
329329
func menuSelectCluster(config *project.ProjectConfig, environment, stage string) (*string, error) {
330330
prompt := promptui.Select{
331331
Label: "Select Cluster",
332-
Items: append(utils.MapKeysToList(config.Environments[environment].Stages[stage].Clusters), rootOptionDone),
332+
Items: append(utils.MapKeysToList(config.GetStage(environment, stage).Clusters), rootOptionDone),
333333
}
334334
_, result, err := prompt.Run()
335335
if err != nil {

internal/menu/stage.go

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ func (s *stageMenu) menuCreateStage(env string) (*project.Stage, error) {
2323
if str == "" {
2424
return fmt.Errorf("stage name cannot be empty")
2525
}
26-
if _, ok := s.config.Environments[env].Stages[str]; ok {
26+
if s.config.GetEnvironment(env).HasStage(str) {
2727
return fmt.Errorf("stage already exists")
2828
}
2929
return nil
@@ -49,8 +49,7 @@ func (s *stageMenu) menuCreateStage(env string) (*project.Stage, error) {
4949
}
5050

5151
func (s *stageMenu) menuUpdateStage(envName, stageName string) (*project.Stage, error) {
52-
stage := s.config.Environments[envName].Stages[stageName]
53-
stage.Name = stageName
52+
stage := s.config.GetStage(envName, stageName)
5453
if stage.Addons == nil {
5554
stage.Addons = map[string]*project.ClusterAddon{}
5655
}

internal/project/environment.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,14 @@ func (e *Environment) GetAddons() ClusterAddons {
5050
func (e *Environment) GetAddon(name string) *ClusterAddon {
5151
return e.Addons[name]
5252
}
53+
54+
// HasStage checks if a stage exists in the environment
55+
func (e *Environment) HasStage(name string) bool {
56+
_, ok := e.Stages[name]
57+
return ok
58+
}
59+
60+
// GetStage returns the stage by name
61+
func (e *Environment) GetStage(name string) *Stage {
62+
return e.Stages[name]
63+
}

internal/project/stage.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,8 @@ func (s *Stage) GetAddons() ClusterAddons {
5050
func (s *Stage) GetAddon(name string) *ClusterAddon {
5151
return s.Addons[name]
5252
}
53+
54+
// GetCluster returns the cluster by name
55+
func (s *Stage) GetCluster(name string) *Cluster {
56+
return s.Clusters[name]
57+
}

internal/project/type.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,29 +22,25 @@ type ProjectConfig struct {
2222

2323
// HasCluster checks if a cluster exists in the given environment and stage
2424
func (p ProjectConfig) HasCluster(env, stage, cluster string) bool {
25-
_, ok := p.Environments[env].Stages[stage].Clusters[cluster]
25+
_, ok := p.GetStage(env, stage).Clusters[cluster]
2626
return ok
2727
}
2828

29-
func (p ProjectConfig) Cluster(env, stage, cluster string) *Cluster {
30-
return p.Environments[env].Stages[stage].Clusters[cluster]
31-
}
32-
3329
// SetCluster sets the cluster for the given environment and stage
3430
func (p *ProjectConfig) SetCluster(env, stage string, cluster *Cluster) {
35-
if p.Environments[env].Stages[stage].Clusters == nil {
36-
p.Environments[env].Stages[stage].Clusters = map[string]*Cluster{}
31+
if p.GetStage(env, stage).Clusters == nil {
32+
p.GetStage(env, stage).Clusters = map[string]*Cluster{}
3733
}
38-
p.Environments[env].Stages[stage].Clusters[cluster.Name] = cluster
34+
p.GetStage(env, stage).Clusters[cluster.Name] = cluster
3935
}
4036

4137
func (p *ProjectConfig) DeleteCluster(env, stage, cluster string) {
42-
delete(p.Environments[env].Stages[stage].Clusters, cluster)
38+
delete(p.GetStage(env, stage).Clusters, cluster)
4339
}
4440

4541
// EnvStageProperty merges the properties of the environment and stage and returns them as a map
4642
func (pc *ProjectConfig) EnvStageProperty(environment, stage string) map[string]string {
47-
return utils.MergeMaps(pc.Environments[environment].Properties, pc.Environments[environment].Stages[stage].Properties)
43+
return utils.MergeMaps(pc.GetEnvironment(environment).Properties, pc.GetStage(environment, stage).Properties)
4844
}
4945

5046
// AddonGroups returns a list of addon groups that have been defined in the addons
@@ -58,3 +54,23 @@ func (p ProjectConfig) AddonGroups() []string {
5854
}
5955
return utils.MapKeysToList(groups)
6056
}
57+
58+
// HasEnvironment checks if an environment exists in the project
59+
func (p ProjectConfig) HasEnvironment(name string) bool {
60+
_, ok := p.Environments[name]
61+
return ok
62+
}
63+
64+
func (p *ProjectConfig) GetEnvironment(name string) *Environment {
65+
p.Environments[name].Name = name
66+
return p.Environments[name]
67+
}
68+
69+
func (p *ProjectConfig) GetStage(env, stage string) *Stage {
70+
p.GetEnvironment(env).GetStage(stage).Name = stage
71+
return p.GetEnvironment(env).GetStage(stage)
72+
}
73+
74+
func (p *ProjectConfig) GetCluster(env, stage, cluster string) *Cluster {
75+
return p.GetStage(env, stage).GetCluster(cluster)
76+
}

internal/project/type_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ func TestProjectConfig_HasCluster(t *testing.T) {
8888
}
8989
}
9090

91-
func TestProjectConfig_Cluster(t *testing.T) {
91+
func TestProjectConfig_GetCluster(t *testing.T) {
9292
type fields struct {
9393
BasePath string
9494
TemplateBasePath string
@@ -172,10 +172,10 @@ func TestProjectConfig_Cluster(t *testing.T) {
172172
Environments: tt.fields.Environments,
173173
}
174174

175-
got := p.Cluster(tt.args.env, tt.args.stage, tt.args.cluster)
175+
got := p.GetCluster(tt.args.env, tt.args.stage, tt.args.cluster)
176176
diff := cmp.Diff(got, tt.want)
177177
if diff != "" {
178-
t.Errorf("ProjectConfig.Cluster() mismatch (-got +want):\n%s", diff)
178+
t.Errorf("ProjectConfig.GetCluster() mismatch (-got +want):\n%s", diff)
179179
return
180180
}
181181
})
@@ -241,7 +241,7 @@ func TestProjectConfig_SetCluster(t *testing.T) {
241241
}
242242
p.SetCluster(tt.args.env, tt.args.stage, tt.args.cluster)
243243

244-
diff := cmp.Diff(p.Environments[tt.args.env].Stages[tt.args.stage].Clusters[tt.args.cluster.Name], tt.want)
244+
diff := cmp.Diff(p.GetCluster(tt.args.env, tt.args.stage, tt.args.cluster.Name), tt.want)
245245
if diff != "" {
246246
t.Errorf("ProjectConfig.SetCluster() mismatch (-got +want):\n%s", diff)
247247
return
@@ -327,7 +327,7 @@ func TestProjectConfig_DeleteCluster(t *testing.T) {
327327
}
328328
p.DeleteCluster(tt.args.env, tt.args.stage, tt.args.cluster)
329329

330-
diff := cmp.Diff(p.Environments[tt.args.env].Stages[tt.args.stage].Clusters, tt.want)
330+
diff := cmp.Diff(p.GetStage(tt.args.env, tt.args.stage).Clusters, tt.want)
331331
if diff != "" {
332332
t.Errorf("ProjectConfig.DeleteCluster() mismatch (-got +want):\n%s", diff)
333333
return

0 commit comments

Comments
 (0)