github.com/LukasHeimann/cloudfoundrycli/v8@v8.4.4/command/v7/delete_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/v7/shared"
     7  )
     8  
     9  type DeleteServiceCommand struct {
    10  	BaseCommand
    11  
    12  	RequiredArgs    flag.ServiceInstance `positional-args:"yes"`
    13  	Force           bool                 `short:"f" long:"force" description:"Force deletion without confirmation"`
    14  	Wait            bool                 `short:"w" long:"wait" description:"Wait for the operation to complete"`
    15  	relatedCommands interface{}          `related_commands:"unbind-service, services"`
    16  }
    17  
    18  func (cmd DeleteServiceCommand) Execute(args []string) error {
    19  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    20  		return err
    21  	}
    22  
    23  	if !cmd.Force {
    24  		delete, err := cmd.displayPrompt()
    25  		if err != nil {
    26  			return err
    27  		}
    28  
    29  		if !delete {
    30  			cmd.UI.DisplayText("Delete cancelled")
    31  			return nil
    32  		}
    33  	}
    34  
    35  	if err := cmd.displayEvent(); err != nil {
    36  		return err
    37  	}
    38  
    39  	stream, warnings, err := cmd.Actor.DeleteServiceInstance(
    40  		string(cmd.RequiredArgs.ServiceInstance),
    41  		cmd.Config.TargetedSpace().GUID,
    42  	)
    43  	cmd.UI.DisplayWarnings(warnings)
    44  
    45  	switch err.(type) {
    46  	case nil:
    47  	case actionerror.ServiceInstanceNotFoundError:
    48  		cmd.UI.DisplayText("Service instance {{.ServiceInstanceName}} did not exist.", cmd.serviceInstanceName())
    49  		cmd.UI.DisplayOK()
    50  		return nil
    51  	default:
    52  		return err
    53  	}
    54  
    55  	deleted, err := shared.WaitForResult(stream, cmd.UI, cmd.Wait)
    56  	if err != nil {
    57  		return err
    58  	}
    59  
    60  	switch deleted {
    61  	case true:
    62  		cmd.UI.DisplayTextWithFlavor("Service instance {{.ServiceInstanceName}} deleted.", cmd.serviceInstanceName())
    63  	default:
    64  		cmd.UI.DisplayText("Delete in progress. Use 'cf services' or 'cf service {{.ServiceInstanceName}}' to check operation status.", cmd.serviceInstanceName())
    65  	}
    66  
    67  	cmd.UI.DisplayOK()
    68  	return nil
    69  }
    70  
    71  func (cmd DeleteServiceCommand) Usage() string {
    72  	return "CF_NAME delete-service SERVICE_INSTANCE [-f] [-w]"
    73  }
    74  
    75  func (cmd DeleteServiceCommand) displayEvent() error {
    76  	user, err := cmd.Actor.GetCurrentUser()
    77  	if err != nil {
    78  		return err
    79  	}
    80  
    81  	cmd.UI.DisplayTextWithFlavor(
    82  		"Deleting service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    83  		map[string]interface{}{
    84  			"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
    85  			"OrgName":             cmd.Config.TargetedOrganization().Name,
    86  			"SpaceName":           cmd.Config.TargetedSpace().Name,
    87  			"Username":            user.Name,
    88  		},
    89  	)
    90  	cmd.UI.DisplayNewline()
    91  
    92  	return nil
    93  }
    94  
    95  func (cmd DeleteServiceCommand) displayPrompt() (bool, error) {
    96  	cmd.UI.DisplayText("This action impacts all resources scoped to this service instance, including service bindings, service keys and route bindings.")
    97  	cmd.UI.DisplayText("This will remove the service instance from any spaces where it has been shared.")
    98  
    99  	delete, err := cmd.UI.DisplayBoolPrompt(
   100  		false,
   101  		"Really delete the service instance {{.ServiceInstanceName}}?",
   102  		cmd.serviceInstanceName(),
   103  	)
   104  	if err != nil {
   105  		return false, err
   106  	}
   107  
   108  	return delete, nil
   109  }
   110  
   111  func (cmd DeleteServiceCommand) serviceInstanceName() map[string]interface{} {
   112  	return map[string]interface{}{
   113  		"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
   114  	}
   115  }