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

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/translatableerror"
     7  )
     8  
     9  type UpgradeServiceCommand struct {
    10  	BaseCommand
    11  
    12  	RequiredArgs flag.ServiceInstance `positional-args:"yes"`
    13  	Force        bool                 `short:"f" long:"force" description:"Force upgrade without asking for confirmation"`
    14  
    15  	relatedCommands interface{} `related_commands:"services, update-service, update-user-provided-service"`
    16  }
    17  
    18  func (cmd UpgradeServiceCommand) Execute(args []string) error {
    19  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    20  		return err
    21  	}
    22  
    23  	if !cmd.Force {
    24  		upgrade, err := cmd.displayPrompt()
    25  		if err != nil {
    26  			return err
    27  		}
    28  
    29  		if !upgrade {
    30  			cmd.UI.DisplayText("Upgrade cancelled")
    31  			return nil
    32  		}
    33  	}
    34  
    35  	if err := cmd.displayEvent(); err != nil {
    36  		return err
    37  	}
    38  
    39  	serviceInstanceName := string(cmd.RequiredArgs.ServiceInstance)
    40  
    41  	warnings, actorError := cmd.Actor.UpgradeManagedServiceInstance(
    42  		serviceInstanceName,
    43  		cmd.Config.TargetedSpace().GUID,
    44  	)
    45  	cmd.UI.DisplayWarnings(warnings)
    46  
    47  	switch actorError.(type) {
    48  	case nil:
    49  		cmd.displayUpgradeInProgressMessage()
    50  		cmd.UI.DisplayOK()
    51  	case actionerror.ServiceInstanceUpgradeNotAvailableError:
    52  		cmd.UI.DisplayText(actorError.Error())
    53  		cmd.UI.DisplayOK()
    54  	case actionerror.ServiceInstanceNotFoundError:
    55  		return translatableerror.ServiceInstanceNotFoundError{Name: serviceInstanceName}
    56  	default:
    57  		return actorError
    58  	}
    59  
    60  	return nil
    61  }
    62  
    63  func (cmd UpgradeServiceCommand) Usage() string {
    64  	return "CF_NAME upgrade-service SERVICE_INSTANCE"
    65  }
    66  
    67  func (cmd UpgradeServiceCommand) displayEvent() error {
    68  	user, err := cmd.Actor.GetCurrentUser()
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	cmd.UI.DisplayTextWithFlavor(
    74  		"Upgrading service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    75  		map[string]interface{}{
    76  			"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
    77  			"OrgName":             cmd.Config.TargetedOrganization().Name,
    78  			"SpaceName":           cmd.Config.TargetedSpace().Name,
    79  			"Username":            user.Name,
    80  		},
    81  	)
    82  
    83  	return nil
    84  }
    85  
    86  func (cmd UpgradeServiceCommand) displayPrompt() (bool, error) {
    87  	cmd.UI.DisplayText(
    88  		"Warning: This operation may be long running and will block further operations " +
    89  			"on the service instance until it's completed",
    90  	)
    91  
    92  	upgrade, err := cmd.UI.DisplayBoolPrompt(
    93  		false,
    94  		"Do you really want to upgrade the service instance {{.ServiceInstanceName}}?",
    95  		cmd.serviceInstanceName(),
    96  	)
    97  	if err != nil {
    98  		return false, err
    99  	}
   100  
   101  	return upgrade, nil
   102  }
   103  
   104  func (cmd UpgradeServiceCommand) displayUpgradeInProgressMessage() {
   105  	cmd.UI.DisplayTextWithFlavor("Upgrade in progress. Use 'cf services' or 'cf service {{.ServiceInstance}}' to check operation status.",
   106  		map[string]interface{}{
   107  			"ServiceInstance": cmd.RequiredArgs.ServiceInstance,
   108  		})
   109  }
   110  
   111  func (cmd UpgradeServiceCommand) serviceInstanceName() map[string]interface{} {
   112  	return map[string]interface{}{
   113  		"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
   114  	}
   115  }