Skip to content

Commit d869e35

Browse files
feat: manage addons on stage level
1 parent 5c18b65 commit d869e35

2 files changed

Lines changed: 45 additions & 5 deletions

File tree

internal/menu/root.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ func RootMenu(config *project.ProjectConfig, eventCh chan<- Event) error {
130130
// update stage in config
131131
config.Environments[*envName].Stages[stage.Name] = stage
132132
eventCh <- newPostUpdateEvent(EventOriginStage, *envName, stage.Name, "")
133-
return errors.New("stage update not implemented")
133+
return nil
134134
}
135135

136136
delete := func() error {

internal/menu/stage.go

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,27 +37,67 @@ func (s *stageMenu) menuCreateStage(env string) (*project.Stage, error) {
3737
Properties: map[string]string{},
3838
Actions: project.Actions{},
3939
Clusters: map[string]*project.Cluster{},
40+
Addons: map[string]*project.ClusterAddon{},
4041
}
4142

42-
properties, err := s.menuProperties(stage)
43+
err = s.menuSettings(stage)
4344
if err != nil {
4445
return nil, err
4546
}
46-
stage.Properties = properties
4747

4848
return stage, nil
4949
}
5050

5151
func (s *stageMenu) menuUpdateStage(envName, stageName string) (*project.Stage, error) {
5252
stage := s.config.Environments[envName].Stages[stageName]
53-
properties, err := s.menuProperties(stage)
53+
stage.Name = stageName
54+
if stage.Addons == nil {
55+
stage.Addons = map[string]*project.ClusterAddon{}
56+
}
57+
err := s.menuSettings(stage)
5458
if err != nil {
5559
return nil, err
5660
}
57-
stage.Properties = properties
5861
return stage, nil
5962
}
6063

64+
// menuSettings creates a context menu to manage the settings of a cluster
65+
func (s *stageMenu) menuSettings(stage *project.Stage) error {
66+
for {
67+
prompt := promptui.Select{
68+
Label: "Settings",
69+
Items: []string{"Addons", "Properties", "Done"},
70+
}
71+
_, result, err := prompt.Run()
72+
if err != nil {
73+
return err
74+
}
75+
76+
switch result {
77+
case "Addons":
78+
addon := addonClusterMenu{
79+
writer: s.writer,
80+
reader: s.reader,
81+
config: s.config,
82+
}
83+
err := addon.menuManageAddons(stage)
84+
if err != nil {
85+
return err
86+
}
87+
case "Properties":
88+
properties, err := s.menuProperties(stage)
89+
if err != nil {
90+
return err
91+
}
92+
stage.Properties = properties
93+
case "Done":
94+
return nil
95+
default:
96+
return fmt.Errorf("invalid option %s", result)
97+
}
98+
}
99+
}
100+
61101
func (s *stageMenu) menuDeleteStage(env, stage string) error {
62102
// TODO: menu is missing to delete the stage (cascade delete)
63103
return errors.New("not implemented")

0 commit comments

Comments
 (0)