github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/service/update_user_provided_service.go (about)

     1  package service
     2  
     3  import (
     4  	"encoding/json"
     5  
     6  	. "github.com/cloudfoundry/cli/cf/i18n"
     7  	"github.com/cloudfoundry/cli/flags"
     8  	"github.com/cloudfoundry/cli/flags/flag"
     9  
    10  	"github.com/cloudfoundry/cli/cf"
    11  	"github.com/cloudfoundry/cli/cf/api"
    12  	"github.com/cloudfoundry/cli/cf/command_registry"
    13  	"github.com/cloudfoundry/cli/cf/configuration/core_config"
    14  	"github.com/cloudfoundry/cli/cf/requirements"
    15  	"github.com/cloudfoundry/cli/cf/terminal"
    16  )
    17  
    18  type UpdateUserProvidedService struct {
    19  	ui                              terminal.UI
    20  	config                          core_config.Reader
    21  	userProvidedServiceInstanceRepo api.UserProvidedServiceInstanceRepository
    22  	serviceInstanceReq              requirements.ServiceInstanceRequirement
    23  }
    24  
    25  func init() {
    26  	command_registry.Register(&UpdateUserProvidedService{})
    27  }
    28  
    29  func (cmd *UpdateUserProvidedService) MetaData() command_registry.CommandMetadata {
    30  	fs := make(map[string]flags.FlagSet)
    31  	fs["p"] = &cliFlags.StringFlag{Name: "p", Usage: T("Credentials")}
    32  	fs["l"] = &cliFlags.StringFlag{Name: "l", Usage: T("Syslog Drain Url")}
    33  
    34  	return command_registry.CommandMetadata{
    35  		Name:        "update-user-provided-service",
    36  		ShortName:   "uups",
    37  		Description: T("Update user-provided service instance name value pairs"),
    38  		Usage: T(`CF_NAME update-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG-DRAIN-URL]'
    39  
    40  EXAMPLE:
    41     CF_NAME update-user-provided-service my-db-mine -p '{"username":"admin","password":"pa55woRD"}'
    42     CF_NAME update-user-provided-service my-drain-service -l syslog://example.com`),
    43  		Flags: fs,
    44  	}
    45  }
    46  
    47  func (cmd *UpdateUserProvidedService) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) ([]requirements.Requirement, error) {
    48  	if len(fc.Args()) != 1 {
    49  		cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("update-user-provided-service"))
    50  	}
    51  
    52  	cmd.serviceInstanceReq = requirementsFactory.NewServiceInstanceRequirement(fc.Args()[0])
    53  
    54  	reqs := []requirements.Requirement{
    55  		requirementsFactory.NewLoginRequirement(),
    56  		cmd.serviceInstanceReq,
    57  	}
    58  	return reqs, nil
    59  }
    60  
    61  func (cmd *UpdateUserProvidedService) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command {
    62  	cmd.ui = deps.Ui
    63  	cmd.config = deps.Config
    64  	cmd.userProvidedServiceInstanceRepo = deps.RepoLocator.GetUserProvidedServiceInstanceRepository()
    65  	return cmd
    66  }
    67  
    68  func (cmd *UpdateUserProvidedService) Execute(c flags.FlagContext) {
    69  	serviceInstance := cmd.serviceInstanceReq.GetServiceInstance()
    70  	if !serviceInstance.IsUserProvided() {
    71  		cmd.ui.Failed(T("Service Instance is not user provided"))
    72  		return
    73  	}
    74  
    75  	drainUrl := c.String("l")
    76  	params := c.String("p")
    77  
    78  	paramsMap := make(map[string]interface{})
    79  	if params != "" {
    80  
    81  		err := json.Unmarshal([]byte(params), &paramsMap)
    82  		if err != nil {
    83  			cmd.ui.Failed(T("JSON is invalid: {{.ErrorDescription}}", map[string]interface{}{"ErrorDescription": err.Error()}))
    84  			return
    85  		}
    86  	}
    87  
    88  	cmd.ui.Say(T("Updating user provided service {{.ServiceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.CurrentUser}}...",
    89  		map[string]interface{}{
    90  			"ServiceName": terminal.EntityNameColor(serviceInstance.Name),
    91  			"OrgName":     terminal.EntityNameColor(cmd.config.OrganizationFields().Name),
    92  			"SpaceName":   terminal.EntityNameColor(cmd.config.SpaceFields().Name),
    93  			"CurrentUser": terminal.EntityNameColor(cmd.config.Username()),
    94  		}))
    95  
    96  	serviceInstance.Params = paramsMap
    97  	serviceInstance.SysLogDrainUrl = drainUrl
    98  
    99  	apiErr := cmd.userProvidedServiceInstanceRepo.Update(serviceInstance.ServiceInstanceFields)
   100  	if apiErr != nil {
   101  		cmd.ui.Failed(apiErr.Error())
   102  		return
   103  	}
   104  
   105  	cmd.ui.Ok()
   106  	cmd.ui.Say(T("TIP: Use '{{.CFRestageCommand}}' for any bound apps to ensure your env variable changes take effect",
   107  		map[string]interface{}{
   108  			"CFRestageCommand": terminal.CommandColor(cf.Name() + " restage"),
   109  		}))
   110  
   111  	if params == "" && drainUrl == "" {
   112  		cmd.ui.Warn(T("No flags specified. No changes were made."))
   113  	}
   114  }