github.com/DaAlbrecht/cf-cli@v0.0.0-20231128151943-1fe19bb400b9/actor/v7action/service_instance_sharing.go (about) 1 package v7action 2 3 import ( 4 "code.cloudfoundry.org/cli/api/cloudcontroller/ccv3" 5 "code.cloudfoundry.org/cli/resources" 6 "code.cloudfoundry.org/cli/types" 7 "code.cloudfoundry.org/cli/util/railway" 8 ) 9 10 type ServiceInstanceSharingParams struct { 11 SpaceName string 12 OrgName types.OptionalString 13 } 14 15 func (actor Actor) ShareServiceInstanceToSpaceAndOrg( 16 serviceInstanceName, targetedSpaceGUID, targetedOrgGUID string, 17 sharedToDetails ServiceInstanceSharingParams, 18 ) (Warnings, error) { 19 var serviceInstance resources.ServiceInstance 20 var shareSpace resources.Space 21 22 return handleServiceInstanceErrors(railway.Sequentially( 23 func() (warnings ccv3.Warnings, err error) { 24 serviceInstance, shareSpace, warnings, err = actor.validateSharingDetails(serviceInstanceName, targetedSpaceGUID, targetedOrgGUID, sharedToDetails) 25 return 26 }, 27 func() (warnings ccv3.Warnings, err error) { 28 _, warnings, err = actor.CloudControllerClient.ShareServiceInstanceToSpaces(serviceInstance.GUID, []string{shareSpace.GUID}) 29 return 30 }, 31 )) 32 } 33 34 func (actor Actor) UnshareServiceInstanceFromSpaceAndOrg( 35 serviceInstanceName, targetedSpaceGUID, targetedOrgGUID string, 36 sharedToDetails ServiceInstanceSharingParams, 37 ) (Warnings, error) { 38 var serviceInstance resources.ServiceInstance 39 var unshareSpace resources.Space 40 41 return handleServiceInstanceErrors(railway.Sequentially( 42 func() (warnings ccv3.Warnings, err error) { 43 serviceInstance, unshareSpace, warnings, err = actor.validateSharingDetails( 44 serviceInstanceName, 45 targetedSpaceGUID, 46 targetedOrgGUID, 47 sharedToDetails, 48 ) 49 return 50 }, 51 func() (warnings ccv3.Warnings, err error) { 52 warnings, err = actor.CloudControllerClient.UnshareServiceInstanceFromSpace(serviceInstance.GUID, unshareSpace.GUID) 53 return 54 }, 55 )) 56 } 57 58 func (actor Actor) validateSharingDetails( 59 serviceInstanceName, targetedSpaceGUID, targetedOrgGUID string, 60 sharedToDetails ServiceInstanceSharingParams, 61 ) (resources.ServiceInstance, resources.Space, ccv3.Warnings, error) { 62 var serviceInstance resources.ServiceInstance 63 var shareSpace resources.Space 64 var shareToOrgGUID = targetedOrgGUID 65 66 warnings, err := railway.Sequentially( 67 func() (warnings ccv3.Warnings, err error) { 68 serviceInstance, _, warnings, err = actor.CloudControllerClient.GetServiceInstanceByNameAndSpace(serviceInstanceName, targetedSpaceGUID) 69 return 70 }, 71 func() (warnings ccv3.Warnings, err error) { 72 if sharedToDetails.OrgName.IsSet { 73 var ( 74 orgWarnings Warnings 75 organization resources.Organization 76 ) 77 78 organization, orgWarnings, err = actor.GetOrganizationByName(sharedToDetails.OrgName.Value) 79 warnings = ccv3.Warnings(orgWarnings) 80 shareToOrgGUID = organization.GUID 81 } 82 return 83 }, 84 func() (warnings ccv3.Warnings, err error) { 85 var spaceWarnings Warnings 86 shareSpace, spaceWarnings, err = actor.GetSpaceByNameAndOrganization(sharedToDetails.SpaceName, shareToOrgGUID) 87 warnings = ccv3.Warnings(spaceWarnings) 88 return 89 }, 90 ) 91 92 if err != nil { 93 return resources.ServiceInstance{}, resources.Space{}, warnings, err 94 } 95 96 return serviceInstance, shareSpace, warnings, nil 97 }