github.com/loafoe/cli@v7.1.0+incompatible/command/v6/unshare_service_command.go (about) 1 package v6 2 3 import ( 4 "code.cloudfoundry.org/cli/actor/actionerror" 5 "code.cloudfoundry.org/cli/actor/sharedaction" 6 "code.cloudfoundry.org/cli/actor/v2action" 7 "code.cloudfoundry.org/cli/actor/v2v3action" 8 "code.cloudfoundry.org/cli/actor/v3action" 9 "code.cloudfoundry.org/cli/api/cloudcontroller/ccversion" 10 "code.cloudfoundry.org/cli/command" 11 "code.cloudfoundry.org/cli/command/flag" 12 "code.cloudfoundry.org/cli/command/v6/shared" 13 ) 14 15 //go:generate counterfeiter . UnshareServiceActor 16 17 type UnshareServiceActor interface { 18 UnshareServiceInstanceFromOrganizationNameAndSpaceNameByNameAndSpace(sharedToOrgName string, sharedToSpaceName string, serviceInstanceName string, currentlyTargetedSpaceGUID string) (v2v3action.Warnings, error) 19 CloudControllerV3APIVersion() string 20 } 21 22 type UnshareServiceCommand struct { 23 RequiredArgs flag.ServiceInstance `positional-args:"yes"` 24 SharedToOrgName string `short:"o" required:"false" description:"Org of the other space (Default: targeted org)"` 25 SharedToSpaceName string `short:"s" required:"true" description:"Space to unshare the service instance from"` 26 Force bool `short:"f" description:"Force unshare without confirmation"` 27 usage interface{} `usage:"CF_NAME unshare-service SERVICE_INSTANCE -s OTHER_SPACE [-o OTHER_ORG] [-f]"` 28 relatedCommands interface{} `related_commands:"delete-service, service, services, share-service, unbind-service"` 29 30 UI command.UI 31 Config command.Config 32 SharedActor command.SharedActor 33 Actor UnshareServiceActor 34 } 35 36 func (cmd *UnshareServiceCommand) Setup(config command.Config, ui command.UI) error { 37 cmd.UI = ui 38 cmd.Config = config 39 40 sharedActor := sharedaction.NewActor(config) 41 cmd.SharedActor = sharedActor 42 43 ccClientV3, uaaClientV3, err := shared.NewV3BasedClients(config, ui, true) 44 if err != nil { 45 return err 46 } 47 48 ccClientV2, uaaClientV2, err := shared.GetNewClientsAndConnectToCF(config, ui) 49 if err != nil { 50 return err 51 } 52 53 cmd.Actor = v2v3action.NewActor( 54 v2action.NewActor(ccClientV2, uaaClientV2, config), 55 v3action.NewActor(ccClientV3, config, sharedActor, uaaClientV3), 56 ) 57 58 return nil 59 } 60 61 func (cmd UnshareServiceCommand) Execute(args []string) error { 62 err := command.MinimumCCAPIVersionCheck(cmd.Actor.CloudControllerV3APIVersion(), ccversion.MinSupportedV3ClientVersion) 63 if err != nil { 64 return err 65 } 66 67 err = cmd.SharedActor.CheckTarget(true, true) 68 if err != nil { 69 return err 70 } 71 72 user, err := cmd.Config.CurrentUser() 73 if err != nil { 74 return err 75 } 76 77 orgName := cmd.Config.TargetedOrganization().Name 78 if cmd.SharedToOrgName != "" { 79 orgName = cmd.SharedToOrgName 80 } 81 82 if !cmd.Force { 83 cmd.UI.DisplayWarning( 84 `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.`, 85 map[string]interface{}{"SpaceName": cmd.SharedToSpaceName}, 86 ) 87 cmd.UI.DisplayNewline() 88 89 response, promptErr := cmd.UI.DisplayBoolPrompt(false, "Really unshare the service instance?", map[string]interface{}{ 90 "ServiceInstanceName": cmd.RequiredArgs.ServiceInstance, 91 }) 92 if promptErr != nil { 93 return promptErr 94 } 95 if !response { 96 cmd.UI.DisplayText("Unshare cancelled") 97 return nil 98 } 99 } 100 101 cmd.UI.DisplayTextWithFlavor("Unsharing service instance {{.ServiceInstanceName}} from org {{.OrgName}} / space {{.SpaceName}} as {{.Username}}...", map[string]interface{}{ 102 "ServiceInstanceName": cmd.RequiredArgs.ServiceInstance, 103 "OrgName": orgName, 104 "SpaceName": cmd.SharedToSpaceName, 105 "Username": user.Name, 106 }) 107 108 warnings, err := cmd.Actor.UnshareServiceInstanceFromOrganizationNameAndSpaceNameByNameAndSpace(orgName, cmd.SharedToSpaceName, cmd.RequiredArgs.ServiceInstance, cmd.Config.TargetedSpace().GUID) 109 cmd.UI.DisplayWarnings(warnings) 110 if err != nil { 111 switch err.(type) { 112 case actionerror.ServiceInstanceNotSharedToSpaceError: 113 cmd.UI.DisplayText("Service instance {{.ServiceInstanceName}} is not shared with space {{.SpaceName}} in organization {{.OrgName}}.", map[string]interface{}{ 114 "ServiceInstanceName": cmd.RequiredArgs.ServiceInstance, 115 "SpaceName": cmd.SharedToSpaceName, 116 "OrgName": orgName, 117 }) 118 default: 119 return err 120 } 121 } 122 123 cmd.UI.DisplayOK() 124 return nil 125 }