Skip to content

Commit 5a0af0a

Browse files
authored
Merge pull request #31 from jianxiaoguo/main
feat(resources): resources command supprot -f arg, specify values in …
2 parents 3685ebc + 16454ec commit 5a0af0a

5 files changed

Lines changed: 71 additions & 16 deletions

File tree

cmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -119,11 +119,11 @@ type Commander interface {
119119
VolumesUnmount(string, string, []string) error
120120
ResourcesServices(int) error
121121
ResourcesPlans(string, int) error
122-
ResourcesCreate(string, string, string, []string) error
122+
ResourcesCreate(string, string, string, []string, string) error
123123
ResourcesList(string, int) error
124124
ResourceDelete(string, string) error
125125
ResourceGet(string, string) error
126-
ResourcePut(string, string, string, []string) error
126+
ResourcePut(string, string, string, []string, string) error
127127
ResourceBind(string, string) error
128128
ResourceUnbind(string, string) error
129129
}

cmd/resources.go

Lines changed: 55 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
package cmd
22

33
import (
4+
"encoding/base64"
45
"fmt"
6+
"io/ioutil"
7+
"os"
58
"regexp"
69
"strconv"
710
"strings"
811

912
"github.com/olekukonko/tablewriter"
13+
"sigs.k8s.io/yaml"
1014

1115
"github.com/drycc/controller-sdk-go/api"
1216
"github.com/drycc/controller-sdk-go/resources"
@@ -73,16 +77,39 @@ func (d *DryccCmd) ResourcesPlans(serviceName string, results int) error {
7377
}
7478

7579
// ResourcesCreate create a resource for the application
76-
func (d *DryccCmd) ResourcesCreate(appID, plan string, name string, params []string) error {
80+
func (d *DryccCmd) ResourcesCreate(appID, plan string, name string, params []string, values string) error {
7781
s, appID, err := load(d.ConfigFile, appID)
7882

7983
if err != nil {
8084
return err
8185
}
86+
if len(params) != 0 && len(values) != 0 {
87+
params = nil
88+
}
89+
paramsMap := make(map[string]interface{})
90+
if values != "" {
91+
valueFile, err := os.Stat(values)
92+
if err != nil {
93+
return err
94+
}
95+
if valueFile.Size() == 0 {
96+
return fmt.Errorf("%s is empty", values)
97+
}
98+
rawValues, err := ioutil.ReadFile(values)
99+
if err != nil {
100+
return err
101+
}
102+
parsed := make(map[string]interface{})
103+
err = yaml.Unmarshal(rawValues, &parsed)
104+
if err != nil {
105+
return err
106+
}
107+
paramsMap["rawValues"] = base64.StdEncoding.EncodeToString([]byte(rawValues))
108+
}
82109

83110
d.Printf("Creating %s to %s... ", name, appID)
84111

85-
paramsMap, err := parseParams(params)
112+
paramsMap, err = parseParams(paramsMap, params)
86113
if err != nil {
87114
return err
88115
}
@@ -171,16 +198,39 @@ func (d *DryccCmd) ResourceDelete(appID, name string) error {
171198
}
172199

173200
// ResourcePut update a resource for the application
174-
func (d *DryccCmd) ResourcePut(appID, plan string, name string, params []string) error {
201+
func (d *DryccCmd) ResourcePut(appID, plan string, name string, params []string, values string) error {
175202
s, appID, err := load(d.ConfigFile, appID)
176203

177204
if err != nil {
178205
return err
179206
}
207+
if len(params) != 0 && len(values) != 0 {
208+
params = nil
209+
}
210+
paramsMap := make(map[string]interface{})
211+
if values != "" {
212+
valueFile, err := os.Stat(values)
213+
if err != nil {
214+
return err
215+
}
216+
if valueFile.Size() == 0 {
217+
return fmt.Errorf("%s is empty", values)
218+
}
219+
rawValues, err := ioutil.ReadFile(values)
220+
if err != nil {
221+
return err
222+
}
223+
parsed := make(map[string]interface{})
224+
err = yaml.Unmarshal(rawValues, &parsed)
225+
if err != nil {
226+
return err
227+
}
228+
paramsMap["rawValues"] = base64.StdEncoding.EncodeToString([]byte(rawValues))
229+
}
180230

181231
d.Printf("Updating %s to %s... ", name, appID)
182232

183-
paramsMap, err := parseParams(params)
233+
paramsMap, err = parseParams(paramsMap, params)
184234
if err != nil {
185235
return err
186236
}
@@ -329,8 +379,7 @@ func maxNum(tempArray ...int) int {
329379
}
330380

331381
// parseParams transfer params to map
332-
func parseParams(params []string) (map[string]interface{}, error) {
333-
paramsMap := make(map[string]interface{})
382+
func parseParams(paramsMap map[string]interface{}, params []string) (map[string]interface{}, error) {
334383
regex := regexp.MustCompile(`^([A-z_]+[A-z0-9_]*[\.{1}[A-z0-9_]+]*)=([\s\S]*)$`)
335384
for _, param := range params {
336385
if regex.MatchString(param) {

cmd/resources_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ func TestResourcesCreate(t *testing.T) {
9999
w.Write([]byte("{}"))
100100
})
101101

102-
err = cmdr.ResourcesCreate("example-go", "mysql:5.6", "mysql", nil)
102+
err = cmdr.ResourcesCreate("example-go", "mysql:5.6", "mysql", nil, "")
103103
assert.NoError(t, err)
104104

105105
assert.Equal(t, testutil.StripProgress(b.String()), "Creating mysql to example-go... done\n", "output")
@@ -231,7 +231,7 @@ func TestResourcePut(t *testing.T) {
231231
w.Write([]byte("{}"))
232232
})
233233

234-
err = cmdr.ResourcePut("example-go", "mysql:5.7", "mysql", []string{"para1.para2=v1"})
234+
err = cmdr.ResourcePut("example-go", "mysql:5.7", "mysql", []string{"para1.para2=v1"}, "")
235235
assert.NoError(t, err)
236236

237237
assert.Equal(t, testutil.StripProgress(b.String()), "Updating mysql to example-go... done\n", "output")

parser/resources.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ Usage: drycc resources:create <plan> <name> [<param>=<value>...] [options]
123123
124124
Arguments:
125125
<plan>
126-
the resource's plan.
126+
the resource's plan, pattern: <service_name>:<plan_name>.
127127
<name>
128128
this resource instance alias.
129129
<param>
@@ -134,6 +134,8 @@ Arguments:
134134
Options:
135135
-a --app=<app>
136136
the uniquely identifiable name for the application.
137+
-f --values=<values_file>
138+
specify values in a YAML file. If set, params will be discard.
137139
`
138140

139141
args, err := docopt.Parse(usage, argv, true, "", false, true)
@@ -143,10 +145,11 @@ Options:
143145
}
144146

145147
app := safeGetValue(args, "--app")
148+
values := safeGetValue(args, "--values")
146149
plan := safeGetValue(args, "<plan>")
147150
name := safeGetValue(args, "<name>")
148151

149-
return cmdr.ResourcesCreate(app, plan, name, args["<param>=<value>"].([]string))
152+
return cmdr.ResourcesCreate(app, plan, name, args["<param>=<value>"].([]string), values)
150153
}
151154

152155
func resourcesList(argv []string, cmdr cmd.Commander) error {
@@ -216,7 +219,7 @@ Usage: drycc resources:update <plan> <name> [<param>=<value>...] [options]
216219
217220
Arguments:
218221
<plan>
219-
the resource's plan.
222+
the resource's plan, pattern: <service_name>:<plan_name>.
220223
<name>
221224
this resource instance alias.
222225
<param>
@@ -227,6 +230,8 @@ Arguments:
227230
Options:
228231
-a --app=<app>
229232
the uniquely identifiable name for the application.
233+
-f --values=<values_file>
234+
specify values in a YAML file. If set, params will be discard.
230235
`
231236

232237
args, err := docopt.Parse(usage, argv, true, "", false, true)
@@ -236,10 +241,11 @@ Options:
236241
}
237242

238243
app := safeGetValue(args, "--app")
244+
values := safeGetValue(args, "--values")
239245
plan := safeGetValue(args, "<plan>")
240246
name := safeGetValue(args, "<name>")
241247

242-
return cmdr.ResourcePut(app, plan, name, args["<param>=<value>"].([]string))
248+
return cmdr.ResourcePut(app, plan, name, args["<param>=<value>"].([]string), values)
243249
}
244250

245251
func resourceDelete(argv []string, cmdr cmd.Commander) error {

parser/resources_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ func (d FakeDryccCmd) ResourcesPlans(string, int) error {
2020
return errors.New("resources:plans")
2121
}
2222

23-
func (d FakeDryccCmd) ResourcesCreate(string, string, string, []string) error {
23+
func (d FakeDryccCmd) ResourcesCreate(string, string, string, []string, string) error {
2424
return errors.New("resources:create")
2525
}
2626

@@ -32,7 +32,7 @@ func (d FakeDryccCmd) ResourceGet(string, string) error {
3232
return errors.New("resources:describe")
3333
}
3434

35-
func (d FakeDryccCmd) ResourcePut(string, string, string, []string) error {
35+
func (d FakeDryccCmd) ResourcePut(string, string, string, []string, string) error {
3636
return errors.New("resources:update")
3737
}
3838

0 commit comments

Comments
 (0)