github.com/wanddynosios/cli/v8@v8.7.9-0.20240221182337-1a92e3a7017f/command/v7/create_service_broker_command.go (about) 1 package v7 2 3 import ( 4 "os" 5 6 "code.cloudfoundry.org/cli/actor/actionerror" 7 "code.cloudfoundry.org/cli/command" 8 "code.cloudfoundry.org/cli/command/flag" 9 "code.cloudfoundry.org/cli/resources" 10 "code.cloudfoundry.org/cli/util/configv3" 11 ) 12 13 type CreateServiceBrokerCommand struct { 14 BaseCommand 15 16 PositionalArgs flag.ServiceBrokerArgs `positional-args:"yes"` 17 SpaceScoped bool `long:"space-scoped" description:"Make the broker's service plans only visible within the targeted space"` 18 UpdateIfExists bool `long:"update-if-exists" description:"If the broker already exists, update it rather than failing. Ignores --space-scoped."` 19 usage any `usage:"CF_NAME create-service-broker SERVICE_BROKER USERNAME PASSWORD URL [--space-scoped]\n CF_NAME create-service-broker SERVICE_BROKER USERNAME URL [--space-scoped] (omit password to specify interactively or via environment variable)\n\nWARNING:\n Providing your password as a command line option is highly discouraged\n Your password may be visible to others and may be recorded in your shell history"` 20 relatedCommands any `related_commands:"enable-service-access, service-brokers, target"` 21 envPassword any `environmentName:"CF_BROKER_PASSWORD" environmentDescription:"Password associated with user. Overridden if PASSWORD argument is provided" environmentDefault:"password"` 22 } 23 24 func (cmd *CreateServiceBrokerCommand) Execute(args []string) error { 25 err := cmd.SharedActor.CheckTarget(cmd.SpaceScoped, cmd.SpaceScoped) 26 if err != nil { 27 return err 28 } 29 30 brokerName, username, password, url, err := promptUserForBrokerPasswordIfRequired(cmd.PositionalArgs, cmd.UI) 31 if err != nil { 32 return err 33 } 34 35 user, err := cmd.Actor.GetCurrentUser() 36 if err != nil { 37 return err 38 } 39 40 if cmd.UpdateIfExists { 41 serviceBroker, warnings, err := cmd.Actor.GetServiceBrokerByName(brokerName) 42 cmd.UI.DisplayWarnings(warnings) 43 switch err.(type) { 44 case nil: 45 return updateServiceBroker(cmd.UI, cmd.Actor, user.Name, serviceBroker.GUID, brokerName, username, password, url) 46 case actionerror.ServiceBrokerNotFoundError: // do nothing 47 default: 48 return err 49 } 50 } 51 52 var space configv3.Space 53 if cmd.SpaceScoped { 54 space = cmd.Config.TargetedSpace() 55 cmd.UI.DisplayTextWithFlavor( 56 "Creating service broker {{.ServiceBroker}} in org {{.Org}} / space {{.Space}} as {{.Username}}...", 57 map[string]any{ 58 "Username": user.Name, 59 "ServiceBroker": brokerName, 60 "Org": cmd.Config.TargetedOrganizationName(), 61 "Space": space.Name, 62 }, 63 ) 64 } else { 65 cmd.UI.DisplayTextWithFlavor( 66 "Creating service broker {{.ServiceBroker}} as {{.Username}}...", 67 map[string]any{ 68 "Username": user.Name, 69 "ServiceBroker": brokerName, 70 }, 71 ) 72 } 73 74 warnings, err := cmd.Actor.CreateServiceBroker( 75 resources.ServiceBroker{ 76 Name: brokerName, 77 Username: username, 78 Password: password, 79 URL: url, 80 SpaceGUID: space.GUID, 81 }, 82 ) 83 cmd.UI.DisplayWarnings(warnings) 84 if err != nil { 85 return err 86 } 87 88 cmd.UI.DisplayOK() 89 return nil 90 } 91 92 func promptUserForBrokerPasswordIfRequired(args flag.ServiceBrokerArgs, ui command.UI) (string, string, string, string, error) { 93 if args.URL != "" { 94 return args.ServiceBroker, args.Username, args.PasswordOrURL, args.URL, nil 95 } 96 97 if password, ok := os.LookupEnv("CF_BROKER_PASSWORD"); ok { 98 return args.ServiceBroker, args.Username, password, args.PasswordOrURL, nil 99 } 100 101 password, err := ui.DisplayPasswordPrompt("Service Broker Password") 102 if err != nil { 103 return "", "", "", "", err 104 } 105 106 return args.ServiceBroker, args.Username, password, args.PasswordOrURL, nil 107 }