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

     1  package v7
     2  
     3  import (
     4  	"github.com/LukasHeimann/cloudfoundrycli/v8/actor/v7action"
     5  	"github.com/LukasHeimann/cloudfoundrycli/v8/command/flag"
     6  	"github.com/LukasHeimann/cloudfoundrycli/v8/types"
     7  )
     8  
     9  type UnshareServiceCommand struct {
    10  	BaseCommand
    11  
    12  	RequiredArgs    flag.ShareServiceArgs `positional-args:"yes"`
    13  	SpaceName       string                `short:"s" required:"true" description:"Space to unshare the service instance from"`
    14  	OrgName         flag.OptionalString   `short:"o" required:"false" description:"Org of the other space (Default: targeted org)"`
    15  	Force           bool                  `short:"f" description:"Force unshare without confirmation"`
    16  	relatedCommands interface{}           `related_commands:"delete-service, service, services, share-service, unbind-service"`
    17  }
    18  
    19  func (cmd UnshareServiceCommand) Usage() string {
    20  	return "CF_NAME unshare-service SERVICE_INSTANCE -s OTHER_SPACE [-o OTHER_ORG] [-f]"
    21  }
    22  
    23  func (cmd UnshareServiceCommand) Execute(args []string) error {
    24  	if err := cmd.SharedActor.CheckTarget(true, true); err != nil {
    25  		return err
    26  	}
    27  
    28  	if !cmd.Force {
    29  		cmd.UI.DisplayWarning(
    30  			`WARNING: Unsharing this service instance will remove any existing bindings originating from the service instance in the space "{{.SpaceName}}". This could cause apps to stop working.`,
    31  			map[string]interface{}{"SpaceName": cmd.SpaceName},
    32  		)
    33  
    34  		unshare, err := cmd.displayPrompt()
    35  		if err != nil {
    36  			return err
    37  		}
    38  
    39  		if !unshare {
    40  			cmd.UI.DisplayText("Unshare cancelled")
    41  			return nil
    42  		}
    43  	}
    44  
    45  	if err := cmd.displayIntro(); err != nil {
    46  		return err
    47  	}
    48  
    49  	warnings, err := cmd.Actor.UnshareServiceInstanceFromSpaceAndOrg(
    50  		cmd.RequiredArgs.ServiceInstance,
    51  		cmd.Config.TargetedSpace().GUID,
    52  		cmd.Config.TargetedOrganization().GUID,
    53  		v7action.ServiceInstanceSharingParams{
    54  			SpaceName: cmd.SpaceName,
    55  			OrgName:   types.OptionalString(cmd.OrgName),
    56  		})
    57  
    58  	cmd.UI.DisplayWarnings(warnings)
    59  	if err != nil {
    60  		return err
    61  	}
    62  
    63  	cmd.UI.DisplayOK()
    64  
    65  	return nil
    66  }
    67  
    68  func (cmd UnshareServiceCommand) displayIntro() error {
    69  	user, err := cmd.Actor.GetCurrentUser()
    70  	if err != nil {
    71  		return err
    72  	}
    73  
    74  	orgName := cmd.OrgName.Value
    75  	if !cmd.OrgName.IsSet {
    76  		orgName = cmd.Config.TargetedOrganization().Name
    77  	}
    78  
    79  	cmd.UI.DisplayTextWithFlavor(
    80  		"Unsharing service instance {{.ServiceInstanceName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...",
    81  		map[string]interface{}{
    82  			"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
    83  			"OrgName":             orgName,
    84  			"SpaceName":           cmd.SpaceName,
    85  			"Username":            user.Name,
    86  		},
    87  	)
    88  
    89  	return nil
    90  }
    91  
    92  func (cmd UnshareServiceCommand) displayPrompt() (bool, error) {
    93  	cmd.UI.DisplayNewline()
    94  	unshare, err := cmd.UI.DisplayBoolPrompt(
    95  		false,
    96  		"Really unshare the service instance {{.ServiceInstanceName}} from space {{.SpaceName}}?",
    97  		map[string]interface{}{
    98  			"ServiceInstanceName": cmd.RequiredArgs.ServiceInstance,
    99  			"SpaceName":           cmd.SpaceName,
   100  		})
   101  	if err != nil {
   102  		return false, err
   103  	}
   104  
   105  	return unshare, nil
   106  }