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

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/api/cloudcontroller/ccerror"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/resources"
     8  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
     9  )
    10  
    11  type UpdateUserProvidedServiceCommand struct {
    12  	BaseCommand
    13  
    14  	RequiredArgs    flag.ServiceInstance   `positional-args:"yes"`
    15  	SyslogDrainURL  flag.OptionalString    `short:"l" description:"URL to which logs for bound applications will be streamed"`
    16  	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. Provided credentials will override existing credentials."`
    17  	RouteServiceURL flag.OptionalString    `short:"r" description:"URL to which requests for bound routes will be forwarded. Scheme for this URL must be https"`
    18  	Tags            flag.Tags              `short:"t" description:"User provided tags"`
    19  	usage           interface{}            `usage:"CF_NAME update-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 update-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 update-user-provided-service SERVICE_INSTANCE -p '{\"key1\":\"value1\",\"key2\":\"value2\"}'\n\n   Specify a path to a file containing JSON:\n   CF_NAME update-user-provided-service SERVICE_INSTANCE -p PATH_TO_FILE\n\nEXAMPLES:\n   CF_NAME update-user-provided-service my-db-mine -p '{\"username\":\"admin\", \"password\":\"pa55woRD\"}'\n   CF_NAME update-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 update-user-provided-service my-drain-service -l syslog://example.com\n   CF_NAME update-user-provided-service my-route-service -r https://example.com"`
    20  	relatedCommands interface{}            `related_commands:"rename-service, services, update-service"`
    21  }
    22  
    23  func (cmd *UpdateUserProvidedServiceCommand) Execute(args []string) error {
    24  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    25  		return err
    26  	}
    27  
    28  	if err := PromptUserForCredentialsIfRequired(&cmd.Credentials, cmd.UI); err != nil {
    29  		return err
    30  	}
    31  
    32  	if err := cmd.displayMessage(); err != nil {
    33  		return err
    34  	}
    35  
    36  	if cmd.noFlagsProvided() {
    37  		cmd.UI.DisplayText("No flags specified. No changes were made.")
    38  		cmd.UI.DisplayOK()
    39  		return nil
    40  	}
    41  
    42  	serviceInstanceName := string(cmd.RequiredArgs.ServiceInstance)
    43  
    44  	warnings, err := cmd.Actor.UpdateUserProvidedServiceInstance(serviceInstanceName, cmd.Config.TargetedSpace().GUID, resources.ServiceInstance{
    45  		Tags:            types.OptionalStringSlice(cmd.Tags),
    46  		SyslogDrainURL:  types.OptionalString(cmd.SyslogDrainURL),
    47  		RouteServiceURL: types.OptionalString(cmd.RouteServiceURL),
    48  		Credentials:     cmd.Credentials.OptionalObject,
    49  	})
    50  	cmd.UI.DisplayWarnings(warnings)
    51  	switch err.(type) {
    52  	case ccerror.ServiceInstanceNotFoundError:
    53  		return actionerror.ServiceInstanceNotFoundError{Name: serviceInstanceName}
    54  	default:
    55  		return err
    56  	case nil:
    57  	}
    58  
    59  	cmd.UI.DisplayOK()
    60  	cmd.UI.DisplayText("TIP: Use 'cf restage' for any bound apps to ensure your env variable changes take effect")
    61  
    62  	return nil
    63  }
    64  
    65  func (cmd UpdateUserProvidedServiceCommand) displayMessage() error {
    66  	user, err := cmd.Actor.GetCurrentUser()
    67  	if err != nil {
    68  		return err
    69  	}
    70  
    71  	cmd.UI.DisplayTextWithFlavor("Updating user provided service {{.ServiceInstance}} in org {{.Org}} / space {{.Space}} as {{.User}}...",
    72  		map[string]interface{}{
    73  			"ServiceInstance": cmd.RequiredArgs.ServiceInstance,
    74  			"Org":             cmd.Config.TargetedOrganization().Name,
    75  			"Space":           cmd.Config.TargetedSpace().Name,
    76  			"User":            user.Name,
    77  		},
    78  	)
    79  
    80  	return nil
    81  }
    82  
    83  func (cmd *UpdateUserProvidedServiceCommand) noFlagsProvided() bool {
    84  	return !cmd.SyslogDrainURL.IsSet && !cmd.RouteServiceURL.IsSet && !cmd.Tags.IsSet && !cmd.Credentials.IsSet
    85  }