|
1 | 1 | package cmd |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "encoding/base64" |
4 | 5 | "fmt" |
| 6 | + "io/ioutil" |
| 7 | + "os" |
5 | 8 | "regexp" |
6 | 9 | "strconv" |
7 | 10 | "strings" |
8 | 11 |
|
9 | 12 | "github.com/olekukonko/tablewriter" |
| 13 | + "sigs.k8s.io/yaml" |
10 | 14 |
|
11 | 15 | "github.com/drycc/controller-sdk-go/api" |
12 | 16 | "github.com/drycc/controller-sdk-go/resources" |
@@ -73,16 +77,39 @@ func (d *DryccCmd) ResourcesPlans(serviceName string, results int) error { |
73 | 77 | } |
74 | 78 |
|
75 | 79 | // 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 { |
77 | 81 | s, appID, err := load(d.ConfigFile, appID) |
78 | 82 |
|
79 | 83 | if err != nil { |
80 | 84 | return err |
81 | 85 | } |
| 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 | + } |
82 | 109 |
|
83 | 110 | d.Printf("Creating %s to %s... ", name, appID) |
84 | 111 |
|
85 | | - paramsMap, err := parseParams(params) |
| 112 | + paramsMap, err = parseParams(paramsMap, params) |
86 | 113 | if err != nil { |
87 | 114 | return err |
88 | 115 | } |
@@ -171,16 +198,39 @@ func (d *DryccCmd) ResourceDelete(appID, name string) error { |
171 | 198 | } |
172 | 199 |
|
173 | 200 | // 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 { |
175 | 202 | s, appID, err := load(d.ConfigFile, appID) |
176 | 203 |
|
177 | 204 | if err != nil { |
178 | 205 | return err |
179 | 206 | } |
| 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 | + } |
180 | 230 |
|
181 | 231 | d.Printf("Updating %s to %s... ", name, appID) |
182 | 232 |
|
183 | | - paramsMap, err := parseParams(params) |
| 233 | + paramsMap, err = parseParams(paramsMap, params) |
184 | 234 | if err != nil { |
185 | 235 | return err |
186 | 236 | } |
@@ -329,8 +379,7 @@ func maxNum(tempArray ...int) int { |
329 | 379 | } |
330 | 380 |
|
331 | 381 | // 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) { |
334 | 383 | regex := regexp.MustCompile(`^([A-z_]+[A-z0-9_]*[\.{1}[A-z0-9_]+]*)=([\s\S]*)$`) |
335 | 384 | for _, param := range params { |
336 | 385 | if regex.MatchString(param) { |
|
0 commit comments