Skip to content

Commit 3a036dc

Browse files
committed
Implement devspace list package and fix several problems
1 parent 6da94a6 commit 3a036dc

7 files changed

Lines changed: 135 additions & 16 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,4 @@
1717

1818
devspace
1919
debug
20+
.DS_STORE

.vscode/launch.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,10 @@
99
"remotePath": "",
1010
"port": 2345,
1111
"host": "127.0.0.1",
12-
"cwd": "${workspaceFolder}/examples/nodejs",
12+
"cwd": "${workspaceFolder}",
1313
"program": "${workspaceFolder}/main.go",
1414
"env": {},
15-
"args": [""],
15+
"args": ["list", "package"],
1616
"showLog": true
1717
}
1818
]

cmd/add.go

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package cmd
22

33
import (
44
"fmt"
5+
"io/ioutil"
56
"os"
67
"path/filepath"
78
"strconv"
89
"strings"
910

11+
"github.com/covexo/devspace/pkg/util/yamlutil"
12+
1013
helmClient "github.com/covexo/devspace/pkg/devspace/clients/helm"
1114
"github.com/covexo/devspace/pkg/devspace/clients/kubectl"
1215
"github.com/covexo/devspace/pkg/devspace/config/configutil"
@@ -175,9 +178,6 @@ func (cmd *AddCmd) RunAddPackage(cobraCmd *cobra.Command, args []string) {
175178
}
176179

177180
log.Done("Chart found")
178-
entry := "- name: \"" + version.GetName() + "\"\n" +
179-
" version: \"" + version.GetVersion() + "\"\n" +
180-
" repository: \"" + repo.URL + "\"\n"
181181

182182
cwd, err := os.Getwd()
183183
if err != nil {
@@ -188,22 +188,45 @@ func (cmd *AddCmd) RunAddPackage(cobraCmd *cobra.Command, args []string) {
188188

189189
_, err = os.Stat(requirementsFile)
190190
if os.IsNotExist(err) {
191-
entry = "dependencies:\n" + entry
192-
}
191+
entry := "dependencies:\n" +
192+
"- name: \"" + version.GetName() + "\"\n" +
193+
" version: \"" + version.GetVersion() + "\"\n" +
194+
" repository: \"" + repo.URL + "\"\n"
193195

194-
f, err := os.OpenFile(requirementsFile, os.O_APPEND|os.O_WRONLY|os.O_CREATE, 0600)
195-
if err != nil {
196-
log.Fatal(err)
197-
}
196+
err = ioutil.WriteFile(requirementsFile, []byte(entry), 0600)
197+
if err != nil {
198+
log.Fatal(err)
199+
}
200+
} else {
201+
yamlContents := map[interface{}]interface{}{}
202+
err = yamlutil.ReadYamlFromFile(requirementsFile, yamlContents)
203+
if err != nil {
204+
log.Fatalf("Error parsing %s: %v", requirementsFile, err)
205+
}
198206

199-
defer f.Close()
207+
dependenciesArr := []interface{}{}
208+
if dependencies, ok := yamlContents["dependencies"]; ok {
209+
dependenciesArr, ok = dependencies.([]interface{})
210+
if ok == false {
211+
log.Fatalf("Error parsing %s: Key dependencies is not an array", requirementsFile)
212+
}
213+
}
200214

201-
if _, err = f.WriteString(entry); err != nil {
202-
log.Fatal(err)
215+
dependenciesArr = append(dependenciesArr, map[interface{}]interface{}{
216+
"name": version.GetName(),
217+
"version": version.GetVersion(),
218+
"repository": repo.URL,
219+
})
220+
yamlContents["dependencies"] = dependenciesArr
221+
222+
err = yamlutil.WriteYamlToFile(yamlContents, requirementsFile)
223+
if err != nil {
224+
log.Fatal(err)
225+
}
203226
}
204227

205-
log.StartWait("Building chart")
206-
err = helm.BuildDependencies(filepath.Join(cwd, "chart"))
228+
log.StartWait("Update chart dependencies")
229+
err = helm.UpdateDependencies(filepath.Join(cwd, "chart"))
207230
log.StopWait()
208231

209232
if err != nil {

cmd/list.go

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package cmd
22

33
import (
4+
"os"
5+
"path/filepath"
46
"strconv"
57

68
"github.com/covexo/devspace/pkg/devspace/config/configutil"
79
"github.com/covexo/devspace/pkg/util/log"
10+
"github.com/covexo/devspace/pkg/util/yamlutil"
811
"github.com/spf13/cobra"
912
)
1013

@@ -72,6 +75,63 @@ func init() {
7275
}
7376

7477
listCmd.AddCommand(listPortCmd)
78+
79+
listPackageCmd := &cobra.Command{
80+
Use: "package",
81+
Short: "Lists all added packages",
82+
Long: `
83+
#######################################################
84+
############### devspace list package #################
85+
#######################################################
86+
Lists the packages that were added to the devspace
87+
#######################################################
88+
`,
89+
Args: cobra.NoArgs,
90+
Run: cmd.RunListPackage,
91+
}
92+
93+
listCmd.AddCommand(listPackageCmd)
94+
}
95+
96+
// RunListPackage runs the list sync command logic
97+
func (cmd *ListCmd) RunListPackage(cobraCmd *cobra.Command, args []string) {
98+
headerColumnNames := []string{
99+
"Name",
100+
"Version",
101+
"Repository",
102+
}
103+
values := [][]string{}
104+
105+
cwd, err := os.Getwd()
106+
if err != nil {
107+
log.Fatal(err)
108+
}
109+
110+
requirementsFile := filepath.Join(cwd, "chart", "requirements.yaml")
111+
_, err = os.Stat(requirementsFile)
112+
if os.IsNotExist(err) == false {
113+
yamlContents := map[interface{}]interface{}{}
114+
err = yamlutil.ReadYamlFromFile(requirementsFile, yamlContents)
115+
if err != nil {
116+
log.Fatalf("Error parsing %s: %v", requirementsFile, err)
117+
}
118+
119+
if dependencies, ok := yamlContents["dependencies"]; ok {
120+
if dependenciesArr, ok := dependencies.([]interface{}); ok {
121+
for _, dependency := range dependenciesArr {
122+
if dependencyMap, ok := dependency.(map[interface{}]interface{}); ok {
123+
values = append(values, []string{
124+
dependencyMap["name"].(string),
125+
dependencyMap["version"].(string),
126+
dependencyMap["repository"].(string),
127+
})
128+
}
129+
}
130+
}
131+
}
132+
}
133+
134+
log.PrintTable(headerColumnNames, values)
75135
}
76136

77137
// RunListSync runs the list sync command logic

cmd/remove.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import (
66
"strconv"
77
"strings"
88

9+
helmClient "github.com/covexo/devspace/pkg/devspace/clients/helm"
10+
"github.com/covexo/devspace/pkg/devspace/clients/kubectl"
911
"github.com/covexo/devspace/pkg/devspace/config/configutil"
1012
"github.com/covexo/devspace/pkg/devspace/config/v1"
1113
"github.com/covexo/devspace/pkg/util/log"
@@ -162,6 +164,23 @@ func (cmd *RemoveCmd) RunRemovePackage(cobraCmd *cobra.Command, args []string) {
162164
}
163165

164166
// Rebuild dependencies
167+
kubectl, err := kubectl.NewClient()
168+
if err != nil {
169+
log.Fatalf("Unable to create new kubectl client: %v", err)
170+
}
171+
172+
helm, err := helmClient.NewClient(kubectl, false)
173+
if err != nil {
174+
log.Fatalf("Error initializing helm client: %v", err)
175+
}
176+
177+
log.StartWait("Update chart dependencies")
178+
err = helm.UpdateDependencies(filepath.Join(cwd, "chart"))
179+
log.StopWait()
180+
181+
if err != nil {
182+
log.Fatal(err)
183+
}
165184

166185
break
167186
}

pkg/devspace/clients/helm/client.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,18 @@ func (helmClientWrapper *HelmClientWrapper) BuildDependencies(chartPath string)
754754
return man.Build()
755755
}
756756

757+
// UpdateDependencies updates the dependencies
758+
func (helmClientWrapper *HelmClientWrapper) UpdateDependencies(chartPath string) error {
759+
man := &helmdownloader.Manager{
760+
Out: ioutil.Discard,
761+
ChartPath: chartPath,
762+
HelmHome: helmClientWrapper.Settings.Home,
763+
Getters: getter.All(*helmClientWrapper.Settings),
764+
}
765+
766+
return man.Update()
767+
}
768+
757769
// DeleteRelease deletes a helm release and optionally purges it
758770
func (helmClientWrapper *HelmClientWrapper) DeleteRelease(releaseName string, purge bool) (*rls.UninstallReleaseResponse, error) {
759771
return helmClientWrapper.Client.DeleteRelease(releaseName, k8shelm.DeletePurge(purge))

pkg/util/log/log.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,10 @@ func PrintTable(header []string, values [][]string) {
181181

182182
Write("\n")
183183

184+
if len(values) == 0 {
185+
Write(" No entries found\n")
186+
}
187+
184188
// Print Values
185189
for _, v := range values {
186190
for key, value := range v {

0 commit comments

Comments
 (0)