github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/create_user_provided_service_command.go (about)

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/command"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/resources"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
     8  )
     9  
    10  type CreateUserProvidedServiceCommand struct {
    11  	BaseCommand
    12  
    13  	RequiredArgs    flag.ServiceInstance   `positional-args:"yes"`
    14  	SyslogDrainURL  flag.OptionalString    `short:"l" description:"URL to which logs for bound applications will be streamed"`
    15  	Credentials     flag.CredentialsOrJSON `short:"p" description:"Credentials, provided inline or in a file, to be exposed in the VCAP_SERVICES environment variable for bound applications"`
    16  	RouteServiceURL flag.OptionalString    `short:"r" description:"URL to which requests for bound routes will be forwarded. Scheme for this URL must be https"`
    17  	Tags            flag.Tags              `short:"t" description:"User provided tags"`
    18  	usage           interface{}            `usage:"CF_NAME create-user-provided-service SERVICE_INSTANCE [-p CREDENTIALS] [-l SYSLOG_DRAIN_URL] [-r ROUTE_SERVICE_URL] [-t TAGS]\n\n   Pass comma separated credential parameter names to enable interactive mode:\n   CF_NAME create-user-provided-service SERVICE_INSTANCE -p \"comma, separated, parameter, names\"\n\n   Pass credential parameters as JSON to create a service non-interactively:\n   CF_NAME create-user-provided-service SERVICE_INSTANCE -p '{\"key1\":\"value1\",\"key2\":\"value2\"}'\n\n   Specify a path to a file containing JSON:\n   CF_NAME create-user-provided-service SERVICE_INSTANCE -p PATH_TO_FILE\n\nEXAMPLES:\n   CF_NAME create-user-provided-service my-db-mine -p \"username, password\"\n   CF_NAME create-user-provided-service my-db-mine -p /path/to/credentials.json\n   CF_NAME create-user-provided-service my-db-mine -t \"list, of, tags\"\n   CF_NAME create-user-provided-service my-drain-service -l syslog://example.com\n   CF_NAME create-user-provided-service my-route-service -r https://example.com\n\n   Linux/Mac:\n      CF_NAME create-user-provided-service my-db-mine -p '{\"username\":\"admin\",\"password\":\"pa55woRD\"}'\n\n   Windows Command Line:\n      CF_NAME create-user-provided-service my-db-mine -p \"{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}\"\n\n   Windows PowerShell:\n      CF_NAME create-user-provided-service my-db-mine -p '{\\\"username\\\":\\\"admin\\\",\\\"password\\\":\\\"pa55woRD\\\"}'"`
    19  	relatedCommands interface{}            `related_commands:"bind-service, services"`
    20  }
    21  
    22  func (cmd CreateUserProvidedServiceCommand) Execute(args []string) error {
    23  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    24  		return err
    25  	}
    26  
    27  	if err := PromptUserForCredentialsIfRequired(&cmd.Credentials, cmd.UI); err != nil {
    28  		return err
    29  	}
    30  
    31  	if err := cmd.displayMessage(); err != nil {
    32  		return err
    33  	}
    34  
    35  	serviceInstance := resources.ServiceInstance{
    36  		Name:            string(cmd.RequiredArgs.ServiceInstance),
    37  		SpaceGUID:       cmd.Config.TargetedSpace().GUID,
    38  		Tags:            types.OptionalStringSlice(cmd.Tags),
    39  		SyslogDrainURL:  types.OptionalString(cmd.SyslogDrainURL),
    40  		RouteServiceURL: types.OptionalString(cmd.RouteServiceURL),
    41  		Credentials:     cmd.Credentials.OptionalObject,
    42  	}
    43  
    44  	warnings, err := cmd.Actor.CreateUserProvidedServiceInstance(serviceInstance)
    45  	cmd.UI.DisplayWarnings(warnings)
    46  	if err != nil {
    47  		return err
    48  	}
    49  
    50  	cmd.UI.DisplayOK()
    51  	return nil
    52  }
    53  
    54  func (cmd CreateUserProvidedServiceCommand) displayMessage() error {
    55  	user, err := cmd.Actor.GetCurrentUser()
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	cmd.UI.DisplayTextWithFlavor("Creating user provided service {{.ServiceInstance}} in org {{.Org}} / space {{.Space}} as {{.User}}...",
    61  		map[string]interface{}{
    62  			"ServiceInstance": cmd.RequiredArgs.ServiceInstance,
    63  			"Org":             cmd.Config.TargetedOrganization().Name,
    64  			"Space":           cmd.Config.TargetedSpace().Name,
    65  			"User":            user.Name,
    66  		},
    67  	)
    68  
    69  	return nil
    70  }
    71  
    72  func PromptUserForCredentialsIfRequired(flag *flag.CredentialsOrJSON, ui command.UI) error {
    73  	if len(flag.UserPromptCredentials) > 0 {
    74  		flag.Value = make(map[string]interface{})
    75  
    76  		for _, key := range flag.UserPromptCredentials {
    77  			var err error
    78  			flag.Value[key], err = ui.DisplayPasswordPrompt(key)
    79  			if err != nil {
    80  				return err
    81  			}
    82  		}
    83  	}
    84  
    85  	return nil
    86  }