diff --git a/pkg/client/secrets.go b/pkg/client/secrets.go index 566185c0a..cc5e63edd 100644 --- a/pkg/client/secrets.go +++ b/pkg/client/secrets.go @@ -80,6 +80,7 @@ func (c *DefaultSecretsClient) UpdateSecret(ctx context.Context, organizationID Context: ctx, XDispatchOrg: c.getOrgID(organizationID), Secret: secret, + SecretName: *secret.Name, } response, err := c.client.Secret.UpdateSecret(¶ms, c.auth) if err != nil { diff --git a/pkg/dispatchcli/cmd/create.go b/pkg/dispatchcli/cmd/create.go index 964ea01c7..7169daf6e 100644 --- a/pkg/dispatchcli/cmd/create.go +++ b/pkg/dispatchcli/cmd/create.go @@ -276,13 +276,15 @@ func NewCmdCreate(out io.Writer, errOut io.Writer) *cobra.Command { imgClient := imageManagerClient() eventClient := eventManagerClient() apiClient := apiManagerClient() + secClient := secretStoreClient() + svcClient := serviceManagerClient() createMap := map[string]ModelAction{ utils.ImageKind: CallCreateImage(imgClient), utils.BaseImageKind: CallCreateBaseImage(imgClient), utils.FunctionKind: CallCreateFunction(fnClient), - utils.SecretKind: CallCreateSecret, - utils.ServiceInstanceKind: CallCreateServiceInstance, + utils.SecretKind: CallCreateSecret(secClient), + utils.ServiceInstanceKind: CallCreateServiceInstance(svcClient), utils.PolicyKind: CallCreatePolicy, utils.ApplicationKind: CallCreateApplication, utils.ServiceAccountKind: CallCreateServiceAccount, diff --git a/pkg/dispatchcli/cmd/create_baseimage.go b/pkg/dispatchcli/cmd/create_baseimage.go index 0d56aeb35..d670ede22 100644 --- a/pkg/dispatchcli/cmd/create_baseimage.go +++ b/pkg/dispatchcli/cmd/create_baseimage.go @@ -54,7 +54,7 @@ func CallCreateBaseImage(c client.ImagesClient) ModelAction { created, err := c.CreateBaseImage(context.TODO(), dispatchConfig.Organization, baseImage) if err != nil { - return formatAPIError(err, baseImage.Name) + return formatAPIError(err, *baseImage.Name) } *baseImage = *created return nil diff --git a/pkg/dispatchcli/cmd/create_secret.go b/pkg/dispatchcli/cmd/create_secret.go index 40359f39e..37d59aa27 100644 --- a/pkg/dispatchcli/cmd/create_secret.go +++ b/pkg/dispatchcli/cmd/create_secret.go @@ -15,8 +15,8 @@ import ( "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" - secret "github.com/vmware/dispatch/pkg/secret-store/gen/client/secret" ) var ( @@ -32,25 +32,6 @@ var ( createSecretExample = i18n.T(`create a secret`) ) -// CallCreateSecret makes the API call to create a secret -func CallCreateSecret(s interface{}) error { - client := secretStoreClient() - body := s.(*v1.Secret) - - params := &secret.AddSecretParams{ - Secret: body, - Context: context.Background(), - } - - created, err := client.Secret.AddSecret(params, GetAuthInfoWriter()) - if err != nil { - return formatAPIError(err, params) - } - - *body = *created.Payload - return nil -} - // NewCmdCreateSecret creates command responsible for secret creation. func NewCmdCreateSecret(out io.Writer, errOut io.Writer) *cobra.Command { cmd := &cobra.Command{ @@ -60,7 +41,8 @@ func NewCmdCreateSecret(out io.Writer, errOut io.Writer) *cobra.Command { Example: createSecretExample, Args: cobra.MinimumNArgs(2), Run: func(cmd *cobra.Command, args []string) { - err := createSecret(out, errOut, cmd, args) + c := secretStoreClient() + err := createSecret(out, errOut, cmd, args, c) CheckErr(err) }, } @@ -68,7 +50,22 @@ func NewCmdCreateSecret(out io.Writer, errOut io.Writer) *cobra.Command { return cmd } -func createSecret(out, errOut io.Writer, cmd *cobra.Command, args []string) error { +// CallCreateSecret makes the API call to create a secret +func CallCreateSecret(c client.SecretsClient) ModelAction { + return func(s interface{}) error { + secretModel := s.(*v1.Secret) + + created, err := c.CreateSecret(context.TODO(), dispatchConfig.Organization, secretModel) + if err != nil { + return formatAPIError(err, *secretModel.Name) + } + + *secretModel = *created + return nil + } +} + +func createSecret(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.SecretsClient) error { secretPath := args[1] body := &v1.Secret{ @@ -93,7 +90,7 @@ func createSecret(out, errOut io.Writer, cmd *cobra.Command, args []string) erro Value: cmdFlagApplication, }) } - err := CallCreateSecret(body) + err := CallCreateSecret(c)(body) if err != nil { return err } diff --git a/pkg/dispatchcli/cmd/create_secret_test.go b/pkg/dispatchcli/cmd/create_secret_test.go index 412acf0ae..7fedf013c 100644 --- a/pkg/dispatchcli/cmd/create_secret_test.go +++ b/pkg/dispatchcli/cmd/create_secret_test.go @@ -6,11 +6,17 @@ package cmd import ( "bytes" + "encoding/json" + "io/ioutil" "os" "strings" "testing" + "github.com/go-openapi/swag" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/vmware/dispatch/pkg/api/v1" + "github.com/vmware/dispatch/pkg/client/mocks" ) func TestCmdCreateSecret(t *testing.T) { @@ -23,3 +29,39 @@ func TestCmdCreateSecret(t *testing.T) { assert.Nil(t, err) assert.True(t, strings.Contains(buf.String(), "Create a dispatch secret")) } + +func TestCreateSecret(t *testing.T) { + var stdout, stderr bytes.Buffer + + cli := NewCLI(os.Stdin, &stdout, &stderr) + + sc := &mocks.SecretsClient{} + + body := map[string]string{"secretKey": "secretValue"} + + tmpfile, err := ioutil.TempFile("", "createSecret") + assert.NoError(t, err) + defer os.Remove(tmpfile.Name()) // clean up + + enc := json.NewEncoder(tmpfile) + err = enc.Encode(body) + assert.NoError(t, err) + + args := []string{"test", tmpfile.Name()} + dispatchConfig.JSON = true + + secret := &v1.Secret{ + Name: swag.String(args[0]), + Secrets: body, + } + + sc.On("CreateSecret", mock.Anything, mock.Anything, secret).Once().Return(secret, nil) + err = createSecret(&stdout, &stderr, cli, args, sc) + assert.NoError(t, err) + + secObj := make(map[string]interface{}) + err = json.Unmarshal(stdout.Bytes(), &secObj) + assert.NoError(t, err) + assert.EqualValues(t, "test", secObj["name"]) + assert.EqualValues(t, map[string]interface{}{"secretKey": "secretValue"}, secObj["secrets"]) +} diff --git a/pkg/dispatchcli/cmd/create_serviceinstance.go b/pkg/dispatchcli/cmd/create_serviceinstance.go index 0b8d4a8f4..329f62a77 100644 --- a/pkg/dispatchcli/cmd/create_serviceinstance.go +++ b/pkg/dispatchcli/cmd/create_serviceinstance.go @@ -14,8 +14,8 @@ import ( "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" - serviceinstance "github.com/vmware/dispatch/pkg/service-manager/gen/client/service_instance" ) var ( @@ -32,22 +32,18 @@ var ( ) // CallCreateServiceInstance makes the API call to create a service instance -func CallCreateServiceInstance(s interface{}) error { - client := serviceManagerClient() - body := s.(*v1.ServiceInstance) +func CallCreateServiceInstance(c client.ServicesClient) ModelAction { + return func(s interface{}) error { + serviceInstanceModel := s.(*v1.ServiceInstance) - params := &serviceinstance.AddServiceInstanceParams{ - Body: body, - Context: context.Background(), - } + created, err := c.CreateServiceInstance(context.TODO(), serviceInstanceModel) + if err != nil { + return formatAPIError(err, *serviceInstanceModel.Name) + } - created, err := client.ServiceInstance.AddServiceInstance(params, GetAuthInfoWriter()) - if err != nil { - return formatAPIError(err, params) + *serviceInstanceModel = *created + return nil } - - *body = *created.Payload - return nil } // NewCmdCreateServiceInstance creates command responsible for service instance creation. @@ -59,7 +55,8 @@ func NewCmdCreateServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command Example: createServiceInstanceExample, Args: cobra.MinimumNArgs(3), Run: func(cmd *cobra.Command, args []string) { - err := createServiceInstance(out, errOut, cmd, args) + c := serviceManagerClient() + err := createServiceInstance(out, errOut, cmd, args, c) CheckErr(err) }, } @@ -84,7 +81,7 @@ func parseParameters(p string) (map[string]interface{}, error) { return nil, nil } -func createServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string) error { +func createServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.ServicesClient) error { body := &v1.ServiceInstance{ Name: &args[0], ServiceClass: &args[1], @@ -115,7 +112,7 @@ func createServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []str } body.Binding.Parameters = p - err = CallCreateServiceInstance(body) + err = CallCreateServiceInstance(c)(body) if err != nil { return err } diff --git a/pkg/dispatchcli/cmd/create_test.go b/pkg/dispatchcli/cmd/create_test.go index 11d895b59..8b2b21c69 100644 --- a/pkg/dispatchcli/cmd/create_test.go +++ b/pkg/dispatchcli/cmd/create_test.go @@ -7,11 +7,17 @@ package cmd import ( "bytes" "fmt" + "io/ioutil" "os" "strings" "testing" + "github.com/go-openapi/swag" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/mock" + "github.com/vmware/dispatch/pkg/api/v1" + "github.com/vmware/dispatch/pkg/client/mocks" + "github.com/vmware/dispatch/pkg/utils" ) func TestCmdCreate(t *testing.T) { @@ -26,3 +32,43 @@ func TestCmdCreate(t *testing.T) { assert.Nil(t, err) assert.True(t, strings.Contains(buf.String(), "Create a resource")) } + +var secretSeed = `kind: Secret +name: open-sesame +secrets: + password: OpenSesame +tags: + - key: role + value: test` + +func TestCreateBatchSecret(t *testing.T) { + var stdout, stderr bytes.Buffer + + cli := NewCLI(os.Stdin, &stdout, &stderr) + + tmpfile, err := ioutil.TempFile("", "seed") + assert.NoError(t, err) + defer os.Remove(tmpfile.Name()) // clean up + + _, err = tmpfile.Write([]byte(secretSeed)) + assert.NoError(t, err) + + sc := &mocks.SecretsClient{} + + createMap := map[string]ModelAction{ + utils.SecretKind: CallCreateSecret(sc), + } + + secret := &v1.Secret{ + Kind: utils.SecretKind, + Name: swag.String("open-sesame"), + Secrets: map[string]string{"password": "OpenSesame"}, + Tags: []*v1.Tag{&v1.Tag{Key: "role", Value: "test"}}, + } + + sc.On("CreateSecret", mock.Anything, mock.Anything, secret).Once().Return(secret, nil) + + file = tmpfile.Name() + err = importFile(&stdout, &stderr, cli, nil, createMap, "Created") + assert.Nil(t, err) +} diff --git a/pkg/dispatchcli/cmd/delete.go b/pkg/dispatchcli/cmd/delete.go index 9c93553de..606f321e8 100644 --- a/pkg/dispatchcli/cmd/delete.go +++ b/pkg/dispatchcli/cmd/delete.go @@ -42,16 +42,18 @@ func NewCmdDelete(out io.Writer, errOut io.Writer) *cobra.Command { imgClient := imageManagerClient() eventClient := eventManagerClient() apiClient := apiManagerClient() + secClient := secretStoreClient() + svcClient := serviceManagerClient() deleteMap := map[string]ModelAction{ utils.ImageKind: CallDeleteImage(imgClient), utils.BaseImageKind: CallDeleteBaseImage(imgClient), utils.FunctionKind: CallDeleteFunction(fnClient), - utils.SecretKind: CallDeleteSecret, + utils.SecretKind: CallDeleteSecret(secClient), utils.ApplicationKind: CallDeleteApplication, utils.PolicyKind: CallDeletePolicy, utils.ServiceAccountKind: CallDeleteServiceAccount, - utils.ServiceInstanceKind: CallDeleteServiceInstance, + utils.ServiceInstanceKind: CallDeleteServiceInstance(svcClient), utils.DriverTypeKind: CallDeleteEventDriverType(eventClient), utils.DriverKind: CallDeleteEventDriver(eventClient), utils.SubscriptionKind: CallDeleteSubscription(eventClient), diff --git a/pkg/dispatchcli/cmd/delete_secret.go b/pkg/dispatchcli/cmd/delete_secret.go index 70e6f0ca9..7eb155b1b 100644 --- a/pkg/dispatchcli/cmd/delete_secret.go +++ b/pkg/dispatchcli/cmd/delete_secret.go @@ -14,9 +14,8 @@ import ( "golang.org/x/net/context" "github.com/vmware/dispatch/pkg/api/v1" - "github.com/vmware/dispatch/pkg/dispatchcli/cmd/utils" + "github.com/vmware/dispatch/pkg/client" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" - secret "github.com/vmware/dispatch/pkg/secret-store/gen/client/secret" ) var ( @@ -36,7 +35,8 @@ func NewCmdDeleteSecret(out io.Writer, errOut io.Writer) *cobra.Command { Args: cobra.ExactArgs(1), Aliases: []string{"secrets"}, Run: func(cmd *cobra.Command, args []string) { - err := deleteSecret(out, errOut, cmd, args) + c := secretStoreClient() + err := deleteSecret(out, errOut, cmd, args, c) CheckErr(err) }, } @@ -45,31 +45,26 @@ func NewCmdDeleteSecret(out io.Writer, errOut io.Writer) *cobra.Command { } // CallDeleteSecret makes the API call to delete a secret -func CallDeleteSecret(s interface{}) error { - client := secretStoreClient() - secretModel := s.(*v1.Secret) - params := &secret.DeleteSecretParams{ - SecretName: *secretModel.Name, - Context: context.Background(), - Tags: []string{}, - } - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) +func CallDeleteSecret(c client.SecretsClient) ModelAction { + return func(s interface{}) error { + secretModel := s.(*v1.Secret) - _, err := client.Secret.DeleteSecret(params, GetAuthInfoWriter()) - if err != nil { - return formatAPIError(err, params) + err := c.DeleteSecret(context.TODO(), dispatchConfig.Organization, *secretModel.Name) + if err != nil { + return formatAPIError(err, *secretModel.Name) + } + // No content is returned from secret... should return secret payload + // like all other endpoints. + // *secretModel = *deleted.Payload + return nil } - // No content is returned from secret... should return secret payload - // like all other endpoints. - // *secretModel = *deleted.Payload - return nil } -func deleteSecret(out, errOut io.Writer, cmd *cobra.Command, args []string) error { +func deleteSecret(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.SecretsClient) error { secretModel := v1.Secret{ Name: &args[0], } - err := CallDeleteSecret(&secretModel) + err := CallDeleteSecret(c)(&secretModel) if err != nil { return err } diff --git a/pkg/dispatchcli/cmd/delete_serviceinstance.go b/pkg/dispatchcli/cmd/delete_serviceinstance.go index c913438a1..34381573e 100644 --- a/pkg/dispatchcli/cmd/delete_serviceinstance.go +++ b/pkg/dispatchcli/cmd/delete_serviceinstance.go @@ -15,8 +15,8 @@ import ( "github.com/spf13/cobra" "github.com/vmware/dispatch/pkg/api/v1" + "github.com/vmware/dispatch/pkg/client" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" - serviceinstance "github.com/vmware/dispatch/pkg/service-manager/gen/client/service_instance" ) var ( @@ -36,7 +36,8 @@ func NewCmdDeleteServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command Args: cobra.ExactArgs(1), Aliases: []string{"serviceinstances"}, Run: func(cmd *cobra.Command, args []string) { - err := deleteServiceInstance(out, errOut, cmd, args) + c := serviceManagerClient() + err := deleteServiceInstance(out, errOut, cmd, args, c) CheckErr(err) }, } @@ -45,26 +46,23 @@ func NewCmdDeleteServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command } // CallDeleteServiceInstance makes the API call to create an image -func CallDeleteServiceInstance(i interface{}) error { - client := serviceManagerClient() - serviceInstanceModel := i.(*v1.ServiceInstance) - params := &serviceinstance.DeleteServiceInstanceByNameParams{ - ServiceInstanceName: *serviceInstanceModel.Name, - Context: context.Background(), - } - deleted, err := client.ServiceInstance.DeleteServiceInstanceByName(params, GetAuthInfoWriter()) - if err != nil { - return formatAPIError(err, params) +func CallDeleteServiceInstance(c client.ServicesClient) ModelAction { + return func(i interface{}) error { + serviceInstanceModel := i.(*v1.ServiceInstance) + + err := c.DeleteServiceInstance(context.TODO(), *serviceInstanceModel.Name) + if err != nil { + return formatAPIError(err, *serviceInstanceModel.Name) + } + return nil } - *serviceInstanceModel = *deleted.Payload - return nil } -func deleteServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string) error { +func deleteServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.ServicesClient) error { serviceInstanceModel := v1.ServiceInstance{ Name: &args[0], } - err := CallDeleteServiceInstance(&serviceInstanceModel) + err := CallDeleteServiceInstance(c)(&serviceInstanceModel) if err != nil { return err } diff --git a/pkg/dispatchcli/cmd/errors.go b/pkg/dispatchcli/cmd/errors.go index 633980457..6570a3d1b 100644 --- a/pkg/dispatchcli/cmd/errors.go +++ b/pkg/dispatchcli/cmd/errors.go @@ -33,7 +33,7 @@ func formatAPIError(err error, params interface{}) error { if err == nil { return nil } - switch v := err.(type) { + switch v := errors.Cause(err).(type) { // BaseImage // Add case *baseimage.AddBaseImageBadRequest: @@ -43,24 +43,24 @@ func formatAPIError(err error, params interface{}) error { case *baseimage.AddBaseImageDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) case *baseimage.UpdateBaseImageByNameNotFound: - p := params.(*baseimage.UpdateBaseImageByNameParams) - return i18n.Errorf("[Code: %d] Base image not found: %s", 404, p.BaseImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Base image not found: %s", 404, p) case *baseimage.UpdateBaseImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) // Delete case *baseimage.DeleteBaseImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *baseimage.DeleteBaseImageByNameNotFound: - p := params.(*baseimage.DeleteBaseImageByNameParams) - return i18n.Errorf("[Code: %d] Base image not found: %s", v.Payload.Code, p.BaseImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Base image not found: %s", 404, p) case *baseimage.DeleteBaseImageByNameDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // Get case *baseimage.GetBaseImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *baseimage.GetBaseImageByNameNotFound: - p := params.(*baseimage.GetBaseImageByNameParams) - return i18n.Errorf("[Code: %d] Base image not found: %s", v.Payload.Code, p.BaseImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Base image not found: %s", 404, p) case *baseimage.GetBaseImageByNameDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // List @@ -78,24 +78,24 @@ func formatAPIError(err error, params interface{}) error { case *image.UpdateImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *image.UpdateImageByNameNotFound: - p := params.(*image.UpdateImageByNameParams) - return i18n.Errorf("[Code: %d] Image not found: %s", v.Payload.Code, p.ImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Image not found: %s", 404, p) case *image.UpdateImageByNameDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // Delete case *image.DeleteImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *image.DeleteImageByNameNotFound: - p := params.(*image.DeleteImageByNameParams) - return i18n.Errorf("[Code: %d] Image not found: %s", v.Payload.Code, p.ImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Image not found: %s", 404, p) case *image.DeleteImageByNameDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // Get case *image.GetImageByNameBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *image.GetImageByNameNotFound: - p := params.(*image.GetImageByNameParams) - return i18n.Errorf("[Code: %d] Image not found: %s", v.Payload.Code, p.ImageName) + p := params.(string) + return i18n.Errorf("[Code: %d] Image not found: %s", 404, p) case *image.GetImageByNameDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // List @@ -115,44 +115,44 @@ func formatAPIError(err error, params interface{}) error { case *function.UpdateFunctionBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *function.UpdateFunctionNotFound: - p := params.(*function.UpdateFunctionParams) - return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p.FunctionName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p) case *function.UpdateFunctionInternalServerError: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // Delete case *function.DeleteFunctionBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *function.DeleteFunctionNotFound: - p := params.(*function.DeleteFunctionParams) - return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p.FunctionName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p) // Get case *function.GetFunctionBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *function.GetFunctionNotFound: - p := params.(*function.GetFunctionParams) - return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p.FunctionName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function not found: %s", v.Payload.Code, p) // List case *function.GetFunctionsDefault: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // Runner // Get case *runner.GetRunNotFound: - p := params.(*runner.GetRunParams) - return i18n.Errorf("[Code: %d] Function execution not found: %s", v.Payload.Code, p.RunName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function execution not found: %s", v.Payload.Code, p) // Exec case *runner.RunFunctionBadRequest: return i18n.Errorf("[Code: %d] Bad request: %s", v.Payload.Code, msg(v.Payload.Message)) case *runner.RunFunctionNotFound: - p := params.(*runner.RunFunctionParams) - return i18n.Errorf("[Code: %d] Function execution not found: %s", v.Payload.Code, *p.FunctionName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function execution not found: %s", v.Payload.Code, p) case *runner.RunFunctionInternalServerError: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) case *runner.RunFunctionBadGateway: return i18n.Errorf("[Code: %d] Error: %s", v.Payload.Code, msg(v.Payload.Message)) // List case *runner.GetRunsNotFound: - p := params.(*runner.GetRunsParams) - return i18n.Errorf("[Code: %d] Function executions not found: %s", v.Payload.Code, *p.FunctionName) + p := params.(string) + return i18n.Errorf("[Code: %d] Function executions not found: %s", v.Payload.Code, p) // Secret // Get case *secret.GetSecretNotFound: diff --git a/pkg/dispatchcli/cmd/get_secret.go b/pkg/dispatchcli/cmd/get_secret.go index 5e3ade221..7b74da6ed 100644 --- a/pkg/dispatchcli/cmd/get_secret.go +++ b/pkg/dispatchcli/cmd/get_secret.go @@ -13,7 +13,7 @@ import ( "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" "github.com/vmware/dispatch/pkg/api/v1" - "github.com/vmware/dispatch/pkg/dispatchcli/cmd/utils" + "github.com/vmware/dispatch/pkg/client" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" secret "github.com/vmware/dispatch/pkg/secret-store/gen/client/secret" "golang.org/x/net/context" @@ -39,10 +39,11 @@ func NewCmdGetSecret(out io.Writer, errOut io.Writer) *cobra.Command { Aliases: []string{"secrets"}, Run: func(cmd *cobra.Command, args []string) { var err error + c := secretStoreClient() if len(args) == 1 { - err = getSecret(out, errOut, cmd, args) + err = getSecret(out, errOut, cmd, args, c) } else { - err = getSecrets(out, errOut, cmd) + err = getSecrets(out, errOut, cmd, c) } CheckErr(err) }, @@ -52,48 +53,35 @@ func NewCmdGetSecret(out io.Writer, errOut io.Writer) *cobra.Command { return cmd } -func getSecret(out, errOut io.Writer, cmd *cobra.Command, args []string) error { - client := secretStoreClient() - params := &secret.GetSecretParams{ - Context: context.Background(), - SecretName: args[0], - Tags: []string{}, - } - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) +func getSecret(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.SecretsClient) error { + secretName := args[0] - resp, err := client.Secret.GetSecret(params, GetAuthInfoWriter()) + resp, err := c.GetSecret(context.TODO(), dispatchConfig.Organization, secretName) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, secretName) } - if resp.Payload.Name == nil { + if resp.Name == nil { err := secret.NewGetSecretNotFound() err.Payload = &v1.Error{ Code: 404, Message: &args[0], } - return formatAPIError(err, params) + return formatAPIError(err, secretName) } - return formatSecretOutput(out, false, []*v1.Secret{resp.Payload}) + return formatSecretOutput(out, false, []v1.Secret{*resp}) } -func getSecrets(out, errOut io.Writer, cmd *cobra.Command) error { - client := secretStoreClient() - params := &secret.GetSecretsParams{ - Context: context.Background(), - Tags: []string{}, - } - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) - - resp, err := client.Secret.GetSecrets(params, GetAuthInfoWriter()) +func getSecrets(out, errOut io.Writer, cmd *cobra.Command, c client.SecretsClient) error { + resp, err := c.ListSecrets(context.TODO(), dispatchConfig.Organization) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, nil) } - return formatSecretOutput(out, true, resp.Payload) + return formatSecretOutput(out, true, resp) } -func formatSecretOutput(out io.Writer, list bool, secrets []*v1.Secret) error { +func formatSecretOutput(out io.Writer, list bool, secrets []v1.Secret) error { if getSecretContent || dispatchConfig.JSON { encoder := json.NewEncoder(out) diff --git a/pkg/dispatchcli/cmd/get_serviceclass.go b/pkg/dispatchcli/cmd/get_serviceclass.go index 65eabcb6b..247667698 100644 --- a/pkg/dispatchcli/cmd/get_serviceclass.go +++ b/pkg/dispatchcli/cmd/get_serviceclass.go @@ -14,7 +14,7 @@ import ( "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" "github.com/vmware/dispatch/pkg/api/v1" - "github.com/vmware/dispatch/pkg/dispatchcli/cmd/utils" + "github.com/vmware/dispatch/pkg/client" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" serviceclass "github.com/vmware/dispatch/pkg/service-manager/gen/client/service_class" "golang.org/x/net/context" @@ -38,10 +38,11 @@ func NewCmdGetServiceClass(out io.Writer, errOut io.Writer) *cobra.Command { Aliases: []string{"serviceclasses"}, Run: func(cmd *cobra.Command, args []string) { var err error + c := serviceManagerClient() if len(args) == 1 { - err = getServiceClass(out, errOut, cmd, args) + err = getServiceClass(out, errOut, cmd, args, c) } else { - err = getServiceClasses(out, errOut, cmd) + err = getServiceClasses(out, errOut, cmd, c) } CheckErr(err) }, @@ -49,46 +50,35 @@ func NewCmdGetServiceClass(out io.Writer, errOut io.Writer) *cobra.Command { return cmd } -func getServiceClass(out, errOut io.Writer, cmd *cobra.Command, args []string) error { - client := serviceManagerClient() - params := &serviceclass.GetServiceClassByNameParams{ - Context: context.Background(), - ServiceClassName: args[0], - } +func getServiceClass(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.ServicesClient) error { + serviceClassName := args[0] - resp, err := client.ServiceClass.GetServiceClassByName(params, GetAuthInfoWriter()) + resp, err := c.GetServiceClass(context.TODO(), serviceClassName) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, serviceClassName) } - if resp.Payload.Name == nil { + if resp.Name == nil { err := serviceclass.NewGetServiceClassByNameNotFound() err.Payload = &v1.Error{ Code: 404, Message: &args[0], } - return formatAPIError(err, params) + return formatAPIError(err, serviceClassName) } - return formatServiceClassOutput(out, false, []*v1.ServiceClass{resp.Payload}) + return formatServiceClassOutput(out, false, []v1.ServiceClass{*resp}) } -func getServiceClasses(out, errOut io.Writer, cmd *cobra.Command) error { - client := serviceManagerClient() - params := &serviceclass.GetServiceClassesParams{ - Context: context.Background(), - Tags: []string{}, - } - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) - - resp, err := client.ServiceClass.GetServiceClasses(params, GetAuthInfoWriter()) +func getServiceClasses(out, errOut io.Writer, cmd *cobra.Command, c client.ServicesClient) error { + resp, err := c.ListServiceClasses(context.TODO()) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, nil) } - return formatServiceClassOutput(out, true, resp.Payload) + return formatServiceClassOutput(out, true, resp) } -func formatServiceClassOutput(out io.Writer, list bool, serviceClasses []*v1.ServiceClass) error { +func formatServiceClassOutput(out io.Writer, list bool, serviceClasses []v1.ServiceClass) error { if dispatchConfig.JSON { encoder := json.NewEncoder(out) diff --git a/pkg/dispatchcli/cmd/get_serviceinstance.go b/pkg/dispatchcli/cmd/get_serviceinstance.go index c3460ad27..857bfe7b2 100644 --- a/pkg/dispatchcli/cmd/get_serviceinstance.go +++ b/pkg/dispatchcli/cmd/get_serviceinstance.go @@ -13,7 +13,7 @@ import ( "github.com/olekukonko/tablewriter" "github.com/spf13/cobra" "github.com/vmware/dispatch/pkg/api/v1" - "github.com/vmware/dispatch/pkg/dispatchcli/cmd/utils" + "github.com/vmware/dispatch/pkg/client" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" serviceinstance "github.com/vmware/dispatch/pkg/service-manager/gen/client/service_instance" "golang.org/x/net/context" @@ -37,10 +37,11 @@ func NewCmdGetServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command { Aliases: []string{"serviceinstances"}, Run: func(cmd *cobra.Command, args []string) { var err error + c := serviceManagerClient() if len(args) == 1 { - err = getServiceInstance(out, errOut, cmd, args) + err = getServiceInstance(out, errOut, cmd, args, c) } else { - err = getServiceInstances(out, errOut, cmd) + err = getServiceInstances(out, errOut, cmd, c) } CheckErr(err) }, @@ -48,46 +49,35 @@ func NewCmdGetServiceInstance(out io.Writer, errOut io.Writer) *cobra.Command { return cmd } -func getServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string) error { - client := serviceManagerClient() - params := &serviceinstance.GetServiceInstanceByNameParams{ - Context: context.Background(), - ServiceInstanceName: args[0], - } +func getServiceInstance(out, errOut io.Writer, cmd *cobra.Command, args []string, c client.ServicesClient) error { + serviceInstanceName := args[0] - resp, err := client.ServiceInstance.GetServiceInstanceByName(params, GetAuthInfoWriter()) + resp, err := c.GetServiceInstance(context.TODO(), serviceInstanceName) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, serviceInstanceName) } - if resp.Payload.Name == nil { + if resp.Name == nil { err := serviceinstance.NewGetServiceInstanceByNameNotFound() err.Payload = &v1.Error{ Code: 404, Message: &args[0], } - return formatAPIError(err, params) + return formatAPIError(err, serviceInstanceName) } - return formatServiceInstanceOutput(out, false, []*v1.ServiceInstance{resp.Payload}) + return formatServiceInstanceOutput(out, false, []v1.ServiceInstance{*resp}) } -func getServiceInstances(out, errOut io.Writer, cmd *cobra.Command) error { - client := serviceManagerClient() - params := &serviceinstance.GetServiceInstancesParams{ - Context: context.Background(), - Tags: []string{}, - } - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) - - resp, err := client.ServiceInstance.GetServiceInstances(params, GetAuthInfoWriter()) +func getServiceInstances(out, errOut io.Writer, cmd *cobra.Command, c client.ServicesClient) error { + resp, err := c.ListServiceInstances(context.TODO()) if err != nil { - return formatAPIError(err, params) + return formatAPIError(err, nil) } - return formatServiceInstanceOutput(out, true, resp.Payload) + return formatServiceInstanceOutput(out, true, resp) } -func formatServiceInstanceOutput(out io.Writer, list bool, serviceInstances []*v1.ServiceInstance) error { +func formatServiceInstanceOutput(out io.Writer, list bool, serviceInstances []v1.ServiceInstance) error { if dispatchConfig.JSON { encoder := json.NewEncoder(out) diff --git a/pkg/dispatchcli/cmd/rest_clients.go b/pkg/dispatchcli/cmd/rest_clients.go index 17058a5b4..7be2b216a 100644 --- a/pkg/dispatchcli/cmd/rest_clients.go +++ b/pkg/dispatchcli/cmd/rest_clients.go @@ -16,8 +16,6 @@ import ( applicationclient "github.com/vmware/dispatch/pkg/application-manager/gen/client" identitymanager "github.com/vmware/dispatch/pkg/identity-manager/gen/client" - secretclient "github.com/vmware/dispatch/pkg/secret-store/gen/client" - serviceclient "github.com/vmware/dispatch/pkg/service-manager/gen/client" ) // NO TEST @@ -68,12 +66,12 @@ func imageManagerClient() client.ImagesClient { return client.NewImagesClient(getDispatchHost(), GetAuthInfoWriter(), getOrganization()) } -func secretStoreClient() *secretclient.SecretStore { - return secretclient.New(httpTransport(secretclient.DefaultBasePath), strfmt.Default) +func secretStoreClient() client.SecretsClient { + return client.NewSecretsClient(getDispatchHost(), GetAuthInfoWriter(), getOrganization()) } -func serviceManagerClient() *serviceclient.ServiceManager { - return serviceclient.New(httpTransport(serviceclient.DefaultBasePath), strfmt.Default) +func serviceManagerClient() client.ServicesClient { + return client.NewServicesClient(getDispatchHost(), GetAuthInfoWriter(), getOrganization()) } func apiManagerClient() client.APIsClient { diff --git a/pkg/dispatchcli/cmd/update.go b/pkg/dispatchcli/cmd/update.go index e1e4b9569..c98c25b5c 100644 --- a/pkg/dispatchcli/cmd/update.go +++ b/pkg/dispatchcli/cmd/update.go @@ -14,11 +14,9 @@ import ( "github.com/vmware/dispatch/pkg/api/v1" "github.com/vmware/dispatch/pkg/application-manager/gen/client/application" "github.com/vmware/dispatch/pkg/client" - "github.com/vmware/dispatch/pkg/dispatchcli/cmd/utils" "github.com/vmware/dispatch/pkg/dispatchcli/i18n" "github.com/vmware/dispatch/pkg/identity-manager/gen/client/policy" "github.com/vmware/dispatch/pkg/identity-manager/gen/client/serviceaccount" - "github.com/vmware/dispatch/pkg/secret-store/gen/client/secret" pkgUtils "github.com/vmware/dispatch/pkg/utils" ) @@ -46,6 +44,7 @@ func NewCmdUpdate(out io.Writer, errOut io.Writer) *cobra.Command { imgClient := imageManagerClient() eventClient := eventManagerClient() apiClient := apiManagerClient() + secClient := secretStoreClient() updateMap := map[string]ModelAction{ pkgUtils.APIKind: CallUpdateAPI(apiClient), @@ -55,7 +54,7 @@ func NewCmdUpdate(out io.Writer, errOut io.Writer) *cobra.Command { pkgUtils.DriverTypeKind: CallUpdateDriverType(eventClient), pkgUtils.FunctionKind: CallUpdateFunction(fnClient), pkgUtils.ImageKind: CallUpdateImage(imgClient), - pkgUtils.SecretKind: CallUpdateSecret, + pkgUtils.SecretKind: CallUpdateSecret(secClient), pkgUtils.SubscriptionKind: CallUpdateSubscription(eventClient), pkgUtils.PolicyKind: CallUpdatePolicy, pkgUtils.ServiceAccountKind: CallUpdateServiceAccount, @@ -196,23 +195,17 @@ func CallUpdateServiceAccount(p interface{}) error { } // CallUpdateSecret makes the API call to update a secret -func CallUpdateSecret(input interface{}) error { - client := secretStoreClient() - secretBody := input.(*v1.Secret) - - params := secret.NewUpdateSecretParams() - params.Secret = secretBody - params.SecretName = *secretBody.Name - params.Tags = []string{} - utils.AppendApplication(¶ms.Tags, cmdFlagApplication) +func CallUpdateSecret(c client.SecretsClient) ModelAction { + return func(input interface{}) error { + secretModel := input.(*v1.Secret) - _, err := client.Secret.UpdateSecret(params, GetAuthInfoWriter()) + _, err := c.UpdateSecret(context.TODO(), "", secretModel) - if err != nil { - return formatAPIError(err, params) + if err != nil { + return formatAPIError(err, secretModel.Name) + } + return err } - - return err } // CallUpdateSubscription makes the API call to update a subscription