github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/servicekey/create_service_key.go (about) 1 package servicekey 2 3 import ( 4 "github.com/cloudfoundry/cli/cf/api" 5 "github.com/cloudfoundry/cli/cf/command_registry" 6 "github.com/cloudfoundry/cli/cf/configuration/core_config" 7 "github.com/cloudfoundry/cli/cf/errors" 8 "github.com/cloudfoundry/cli/cf/requirements" 9 "github.com/cloudfoundry/cli/cf/terminal" 10 "github.com/cloudfoundry/cli/flags" 11 "github.com/cloudfoundry/cli/flags/flag" 12 "github.com/cloudfoundry/cli/json" 13 14 . "github.com/cloudfoundry/cli/cf/i18n" 15 ) 16 17 type CreateServiceKey struct { 18 ui terminal.UI 19 config core_config.Reader 20 serviceRepo api.ServiceRepository 21 serviceKeyRepo api.ServiceKeyRepository 22 serviceInstanceRequirement requirements.ServiceInstanceRequirement 23 } 24 25 func init() { 26 command_registry.Register(&CreateServiceKey{}) 27 } 28 29 func (cmd *CreateServiceKey) MetaData() command_registry.CommandMetadata { 30 fs := make(map[string]flags.FlagSet) 31 fs["c"] = &cliFlags.StringFlag{Name: "c", Usage: T("Valid JSON object containing service-specific configuration parameters, provided either in-line or in a file. For a list of supported configuration parameters, see documentation for the particular service offering.")} 32 33 return command_registry.CommandMetadata{ 34 Name: "create-service-key", 35 ShortName: "csk", 36 Description: T("Create key for a service instance"), 37 Usage: T(`CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY [-c PARAMETERS_AS_JSON] 38 39 Optionally provide service-specific configuration parameters in a valid JSON object in-line. 40 CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c '{"name":"value","name":"value"}' 41 42 Optionally provide a file containing service-specific configuration parameters in a valid JSON object. The path to the parameters file can be an absolute or relative path to a file. 43 CF_NAME create-service-key SERVICE_INSTANCE SERVICE_KEY -c PATH_TO_FILE 44 45 Example of valid JSON object: 46 { 47 "permissions": "read-only" 48 } 49 50 EXAMPLE: 51 CF_NAME create-service-key mydb mykey -c '{"permissions":"read-only"}' 52 CF_NAME create-service-key mydb mykey -c ~/workspace/tmp/instance_config.json`), 53 Flags: fs, 54 } 55 } 56 57 func (cmd *CreateServiceKey) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 58 if len(fc.Args()) != 2 { 59 cmd.ui.Failed(T("Incorrect Usage. Requires SERVICE_INSTANCE and SERVICE_KEY as arguments\n\n") + command_registry.Commands.CommandUsage("create-service-key")) 60 } 61 62 loginRequirement := requirementsFactory.NewLoginRequirement() 63 cmd.serviceInstanceRequirement = requirementsFactory.NewServiceInstanceRequirement(fc.Args()[0]) 64 targetSpaceRequirement := requirementsFactory.NewTargetedSpaceRequirement() 65 66 reqs = []requirements.Requirement{loginRequirement, cmd.serviceInstanceRequirement, targetSpaceRequirement} 67 68 return 69 } 70 71 func (cmd *CreateServiceKey) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 72 cmd.ui = deps.Ui 73 cmd.config = deps.Config 74 cmd.serviceRepo = deps.RepoLocator.GetServiceRepository() 75 cmd.serviceKeyRepo = deps.RepoLocator.GetServiceKeyRepository() 76 return cmd 77 } 78 79 func (cmd *CreateServiceKey) Execute(c flags.FlagContext) { 80 serviceInstance := cmd.serviceInstanceRequirement.GetServiceInstance() 81 serviceKeyName := c.Args()[1] 82 params := c.String("c") 83 84 paramsMap, err := json.ParseJsonFromFileOrString(params) 85 if err != nil { 86 cmd.ui.Failed(T("Invalid configuration provided for -c flag. Please provide a valid JSON object or path to a file containing a valid JSON object.")) 87 } 88 89 cmd.ui.Say(T("Creating service key {{.ServiceKeyName}} for service instance {{.ServiceInstanceName}} as {{.CurrentUser}}...", 90 map[string]interface{}{ 91 "ServiceInstanceName": terminal.EntityNameColor(serviceInstance.Name), 92 "ServiceKeyName": terminal.EntityNameColor(serviceKeyName), 93 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 94 })) 95 96 err = cmd.serviceKeyRepo.CreateServiceKey(serviceInstance.Guid, serviceKeyName, paramsMap) 97 switch err.(type) { 98 case nil: 99 cmd.ui.Ok() 100 case *errors.ModelAlreadyExistsError: 101 cmd.ui.Ok() 102 cmd.ui.Warn(err.Error()) 103 default: 104 cmd.ui.Failed(err.Error()) 105 } 106 }