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