This repository has been archived by the owner on Nov 16, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 58
/
create_serviceinstance.go
124 lines (108 loc) · 3.76 KB
/
create_serviceinstance.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
///////////////////////////////////////////////////////////////////////
// Copyright (c) 2017 VMware, Inc. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
///////////////////////////////////////////////////////////////////////
package cmd
import (
"encoding/json"
"fmt"
"io"
"github.com/spf13/cobra"
"golang.org/x/net/context"
"github.com/vmware/dispatch/pkg/api/v1"
"github.com/vmware/dispatch/pkg/client"
"github.com/vmware/dispatch/pkg/dispatchcli/i18n"
)
var (
createServiceInstanceLong = i18n.T(`Create service instance.`)
// TODO: add examples
createServiceInstanceExample = i18n.T(``)
servicePlan = i18n.T(``)
serviceParameters = i18n.T(``)
serviceSecrets = []string{}
bindingParamters = i18n.T(``)
bindingSecrets = []string{}
bindingSecretKey = i18n.T(``)
)
// CallCreateServiceInstance makes the API call to create a service instance
func CallCreateServiceInstance(c client.ServicesClient) ModelAction {
return func(s interface{}) error {
serviceInstanceModel := s.(*v1.ServiceInstance)
created, err := c.CreateServiceInstance(context.TODO(), dispatchConfig.Organization, serviceInstanceModel)
if err != nil {
return err
}
*serviceInstanceModel = *created
return nil
}
}
// NewCmdCreateServiceInstance creates command responsible for service instance creation.
func NewCmdCreateServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command {
cmd := &cobra.Command{
Use: "serviceinstance SERVICE_INSTANCE_NAME SERVICE_CLASS_NAME SERVICE_PLAN_NAME",
Short: i18n.T("Create serviceinstance"),
Long: createServiceInstanceLong,
Example: createServiceInstanceExample,
Args: cobra.MinimumNArgs(3),
Run: func(cmd *cobra.Command, args []string) {
c := serviceManagerClient()
err := createServiceInstance(out, errOut, cmd, args, c)
CheckErr(err)
},
}
cmd.Flags().StringVarP(&cmdFlagApplication, "application", "a", "", "associate with an application")
cmd.Flags().StringVarP(&serviceParameters, "params", "p", "", "service instance provisioning parameters (JSON)")
cmd.Flags().StringArrayVarP(&serviceSecrets, "secret", "s", []string{}, "service instance provisioning secrets")
cmd.Flags().StringVarP(&bindingParamters, "binding-params", "P", "", "service instance binding parameters (JSON)")
cmd.Flags().StringArrayVarP(&bindingSecrets, "binding-secret", "S", []string{}, "service instance binding secrets")
cmd.Flags().StringVarP(&bindingSecretKey, "binding-secret-key", "B", "", "service instance binding secret key")
return cmd
}
func parseParameters(p string) (map[string]interface{}, error) {
if p != "" {
m := make(map[string]interface{})
err := json.Unmarshal([]byte(p), &m)
if err != nil {
return nil, fmt.Errorf("parameters must be a JSON map: %s", p)
}
return m, nil
}
return nil, nil
}
func createServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.ServicesClient) error {
body := &v1.ServiceInstance{
Name: &args[0],
ServiceClass: &args[1],
ServicePlan: &args[2],
SecretParameters: serviceSecrets,
Binding: &v1.ServiceBinding{
SecretParameters: bindingSecrets,
BindingSecret: bindingSecretKey,
},
}
if cmdFlagApplication != "" {
body.Tags = append(body.Tags, &v1.Tag{
Key: "Application",
Value: cmdFlagApplication,
})
}
p, err := parseParameters(serviceParameters)
if err != nil {
return err
}
body.Parameters = p
p, err = parseParameters(bindingParamters)
if err != nil {
return err
}
body.Binding.Parameters = p
err = CallCreateServiceInstance(c)(body)
if err != nil {
return err
}
if w, err := formatOutput(out, false, body); w {
return err
}
fmt.Fprintf(out, "Created serviceinstance: %s\n", *body.Name)
return nil
}