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

     1  package v7
     2  
     3  import (
     4  	"strings"
     5  
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/actionerror"
     7  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     8  )
     9  
    10  const purgeServiceInstanceWarning = "WARNING: This operation assumes that the service broker responsible for this service instance is no longer available or is not responding with a 200 or 410, and the service instance has been deleted, leaving orphan records in Cloud Foundry's database. All knowledge of the service instance will be removed from Cloud Foundry, including service bindings and service keys."
    11  
    12  type PurgeServiceInstanceCommand struct {
    13  	BaseCommand
    14  
    15  	RequiredArgs    flag.ServiceInstance `positional-args:"yes"`
    16  	Force           bool                 `short:"f" long:"force" description:"Force deletion without confirmation"`
    17  	relatedCommands interface{}          `related_commands:"delete-service, service-brokers, services"`
    18  }
    19  
    20  func (cmd PurgeServiceInstanceCommand) Execute(args []string) error {
    21  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    22  		return err
    23  	}
    24  
    25  	if !cmd.Force {
    26  		purge, err := cmd.displayPrompt()
    27  		if err != nil {
    28  			return err
    29  		}
    30  
    31  		if !purge {
    32  			cmd.UI.DisplayText("Purge cancelled")
    33  			return nil
    34  		}
    35  	}
    36  
    37  	if err := cmd.displayEvent(); err != nil {
    38  		return err
    39  	}
    40  
    41  	warnings, err := cmd.Actor.PurgeServiceInstance(
    42  		string(cmd.RequiredArgs.ServiceInstance),
    43  		cmd.Config.TargetedSpace().GUID,
    44  	)
    45  	cmd.UI.DisplayWarnings(warnings)
    46  	cmd.UI.DisplayNewline()
    47  
    48  	switch err.(type) {
    49  	case nil:
    50  		cmd.UI.DisplayText("Service instance {{.ServiceInstanceName}} purged.", cmd.serviceInstanceName())
    51  	case actionerror.ServiceInstanceNotFoundError:
    52  		cmd.UI.DisplayText("Service instance {{.ServiceInstanceName}} did not exist.", cmd.serviceInstanceName())
    53  	default:
    54  		return err
    55  	}
    56  
    57  	cmd.UI.DisplayOK()
    58  	return nil
    59  }
    60  
    61  func (cmd PurgeServiceInstanceCommand) Usage() string {
    62  	return strings.Join([]string{
    63  		"CF_NAME purge-service-instance SERVICE_INSTANCE [-f]",
    64  		"",
    65  		purgeServiceInstanceWarning,
    66  	}, "\n")
    67  }
    68  
    69  func (cmd PurgeServiceInstanceCommand) displayEvent() error {
    70  	user, err := cmd.Actor.GetCurrentUser()
    71  	if err != nil {
    72  		return err
    73  	}
    74  
    75  	cmd.UI.DisplayTextWithFlavor(
    76  		"Purging service instance {{.ServiceInstanceName}} in org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    77  		map[string]interface{}{
    78  			"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
    79  			"OrgName":             cmd.Config.TargetedOrganization().Name,
    80  			"SpaceName":           cmd.Config.TargetedSpace().Name,
    81  			"Username":            user.Name,
    82  		},
    83  	)
    84  
    85  	return nil
    86  }
    87  
    88  func (cmd PurgeServiceInstanceCommand) displayPrompt() (bool, error) {
    89  	cmd.UI.DisplayText(purgeServiceInstanceWarning)
    90  	cmd.UI.DisplayNewline()
    91  	delete, err := cmd.UI.DisplayBoolPrompt(
    92  		false,
    93  		"Really purge service instance {{.ServiceInstanceName}} from Cloud Foundry?",
    94  		cmd.serviceInstanceName(),
    95  	)
    96  	if err != nil {
    97  		return false, err
    98  	}
    99  
   100  	return delete, nil
   101  }
   102  
   103  func (cmd PurgeServiceInstanceCommand) serviceInstanceName() map[string]interface{} {
   104  	return map[string]interface{}{
   105  		"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
   106  	}
   107  }