github.com/mook-as/cf-cli@v7.0.0-beta.28.0.20200120190804-b91c115fae48+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  // GetOrganizationSpaces returns a list of spaces in the specified org
    50  func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) {
    51  	ccv3Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv3.Query{
    52  		Key:    ccv3.OrganizationGUIDFilter,
    53  		Values: []string{orgGUID},
    54  	})
    55  	if err != nil {
    56  		return []Space{}, Warnings(warnings), err
    57  	}
    58  
    59  	spaces := make([]Space, len(ccv3Spaces))
    60  	for i, ccv3Space := range ccv3Spaces {
    61  		spaces[i] = actor.convertCCToActorSpace(ccv3Space)
    62  	}
    63  
    64  	return spaces, Warnings(warnings), nil
    65  }
    66  
    67  func (actor Actor) GetSpaceByNameAndOrganization(spaceName string, orgGUID string) (Space, Warnings, error) {
    68  	spaces, warnings, err := actor.CloudControllerClient.GetSpaces(
    69  		ccv3.Query{Key: ccv3.NameFilter, Values: []string{spaceName}},
    70  		ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}},
    71  	)
    72  
    73  	if err != nil {
    74  		return Space{}, Warnings(warnings), err
    75  	}
    76  
    77  	if len(spaces) == 0 {
    78  		return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName}
    79  	}
    80  
    81  	return actor.convertCCToActorSpace(spaces[0]), Warnings(warnings), nil
    82  }
    83  
    84  func (actor Actor) GetSpacesByGUIDs(guids ...string) ([]Space, Warnings, error) {
    85  	currentV3Ver := actor.CloudControllerClient.CloudControllerAPIVersion()
    86  
    87  	guidsSupport, err := versioncheck.IsMinimumAPIVersionMet(currentV3Ver, ccversion.MinVersionSpacesGUIDsParamV3)
    88  	if err != nil {
    89  		guidsSupport = false
    90  	}
    91  
    92  	queries := []ccv3.Query{}
    93  	if guidsSupport {
    94  		queries = []ccv3.Query{ccv3.Query{Key: ccv3.GUIDFilter, Values: guids}}
    95  	}
    96  
    97  	spaces, warnings, err := actor.CloudControllerClient.GetSpaces(queries...)
    98  	if err != nil {
    99  		return []Space{}, Warnings(warnings), err
   100  	}
   101  
   102  	var filteredSpaces []ccv3.Space
   103  	guidToSpaces := map[string]ccv3.Space{}
   104  	for _, space := range spaces {
   105  		guidToSpaces[space.GUID] = space
   106  	}
   107  
   108  	for _, guid := range guids {
   109  		filteredSpaces = append(filteredSpaces, guidToSpaces[guid])
   110  	}
   111  	spaces = filteredSpaces
   112  
   113  	var v3Spaces []Space
   114  	for _, ccSpace := range spaces {
   115  		v3Spaces = append(v3Spaces, actor.convertCCToActorSpace(ccSpace))
   116  	}
   117  
   118  	return v3Spaces, Warnings(warnings), nil
   119  }
   120  
   121  func (actor Actor) convertCCToActorSpace(space ccv3.Space) Space {
   122  	return Space{
   123  		GUID:             space.GUID,
   124  		Name:             space.Name,
   125  		OrganizationGUID: space.Relationships[constant.RelationshipTypeOrganization].GUID,
   126  	}
   127  }