github.com/arunkumar7540/cli@v6.45.0+incompatible/actor/v3action/space.go (about)

     1  package v3action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/actor/versioncheck"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv3/constant"
     8  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccversion"
     9  )
    10  
    11  type Space struct {
    12  	GUID             string
    13  	Name             string
    14  	OrganizationGUID string
    15  }
    16  
    17  // ResetSpaceIsolationSegment disassociates a space from an isolation segment.
    18  //
    19  // If the space's organization has a default isolation segment, return its
    20  // name. Otherwise return the empty string.
    21  func (actor Actor) ResetSpaceIsolationSegment(orgGUID string, spaceGUID string) (string, Warnings, error) {
    22  	var allWarnings Warnings
    23  
    24  	_, apiWarnings, err := actor.CloudControllerClient.UpdateSpaceIsolationSegmentRelationship(spaceGUID, "")
    25  	allWarnings = append(allWarnings, apiWarnings...)
    26  	if err != nil {
    27  		return "", allWarnings, err
    28  	}
    29  
    30  	isoSegRelationship, apiWarnings, err := actor.CloudControllerClient.GetOrganizationDefaultIsolationSegment(orgGUID)
    31  	allWarnings = append(allWarnings, apiWarnings...)
    32  	if err != nil {
    33  		return "", allWarnings, err
    34  	}
    35  
    36  	var isoSegName string
    37  	if isoSegRelationship.GUID != "" {
    38  		isolationSegment, apiWarnings, err := actor.CloudControllerClient.GetIsolationSegment(isoSegRelationship.GUID)
    39  		allWarnings = append(allWarnings, apiWarnings...)
    40  		if err != nil {
    41  			return "", allWarnings, err
    42  		}
    43  		isoSegName = isolationSegment.Name
    44  	}
    45  
    46  	return isoSegName, allWarnings, nil
    47  }
    48  
    49  func (actor Actor) GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (Space, Warnings, error) {
    50  	spaces, warnings, err := actor.CloudControllerClient.GetSpaces(
    51  		ccv3.Query{Key: ccv3.NameFilter, Values: []string{spaceName}},
    52  		ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}},
    53  	)
    54  
    55  	if err != nil {
    56  		return Space{}, Warnings(warnings), err
    57  	}
    58  
    59  	if len(spaces) == 0 {
    60  		return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName}
    61  	}
    62  
    63  	return actor.convertCCToActorSpace(spaces[0]), Warnings(warnings), nil
    64  }
    65  
    66  func (actor Actor) GetSpacesByGUIDs(guids ...string) ([]Space, Warnings, error) {
    67  	currentV3Ver := actor.CloudControllerClient.CloudControllerAPIVersion()
    68  
    69  	guidsSupport, err := versioncheck.IsMinimumAPIVersionMet(currentV3Ver, ccversion.MinVersionSpacesGUIDsParamV3)
    70  	if err != nil {
    71  		guidsSupport = false
    72  	}
    73  
    74  	queries := []ccv3.Query{}
    75  	if guidsSupport {
    76  		queries = []ccv3.Query{ccv3.Query{Key: ccv3.GUIDFilter, Values: guids}}
    77  	}
    78  
    79  	spaces, warnings, err := actor.CloudControllerClient.GetSpaces(queries...)
    80  	if err != nil {
    81  		return []Space{}, Warnings(warnings), err
    82  	}
    83  
    84  	var filteredSpaces []ccv3.Space
    85  	guidToSpaces := map[string]ccv3.Space{}
    86  	for _, space := range spaces {
    87  		guidToSpaces[space.GUID] = space
    88  	}
    89  
    90  	for _, guid := range guids {
    91  		filteredSpaces = append(filteredSpaces, guidToSpaces[guid])
    92  	}
    93  	spaces = filteredSpaces
    94  
    95  	var v3Spaces []Space
    96  	for _, ccSpace := range spaces {
    97  		v3Spaces = append(v3Spaces, actor.convertCCToActorSpace(ccSpace))
    98  	}
    99  
   100  	return v3Spaces, Warnings(warnings), nil
   101  }
   102  
   103  func (actor Actor) convertCCToActorSpace(space ccv3.Space) Space {
   104  	return Space{
   105  		GUID:             space.GUID,
   106  		Name:             space.Name,
   107  		OrganizationGUID: space.Relationships[constant.RelationshipTypeOrganization].GUID,
   108  	}
   109  }