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