github.com/loggregator/cli@v6.33.1-0.20180224010324-82334f081791+incompatible/actor/v2action/space.go (about)

     1  package v2action
     2  
     3  import (
     4  	"code.cloudfoundry.org/cli/actor/actionerror"
     5  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     7  )
     8  
     9  // Space represents a CLI Space
    10  type Space ccv2.Space
    11  
    12  func (actor Actor) DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (Warnings, error) {
    13  	var allWarnings Warnings
    14  
    15  	org, warnings, err := actor.GetOrganizationByName(orgName)
    16  	allWarnings = append(allWarnings, warnings...)
    17  	if err != nil {
    18  		return allWarnings, err
    19  	}
    20  
    21  	space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, spaceName)
    22  	allWarnings = append(allWarnings, warnings...)
    23  	if err != nil {
    24  		return allWarnings, err
    25  	}
    26  
    27  	job, deleteWarnings, err := actor.CloudControllerClient.DeleteSpaceJob(space.GUID)
    28  	allWarnings = append(allWarnings, Warnings(deleteWarnings)...)
    29  	if err != nil {
    30  		return allWarnings, err
    31  	}
    32  
    33  	warnings, err = actor.PollJob(Job(job))
    34  	allWarnings = append(allWarnings, Warnings(warnings)...)
    35  
    36  	return allWarnings, err
    37  }
    38  
    39  // GetOrganizationSpaces returns a list of spaces in the specified org
    40  func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) {
    41  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv2.Filter{
    42  		Type:     constant.OrganizationGUIDFilter,
    43  		Operator: constant.EqualOperator,
    44  		Values:   []string{orgGUID},
    45  	})
    46  	if err != nil {
    47  		return []Space{}, Warnings(warnings), err
    48  	}
    49  
    50  	spaces := make([]Space, len(ccv2Spaces))
    51  	for i, ccv2Space := range ccv2Spaces {
    52  		spaces[i] = Space(ccv2Space)
    53  	}
    54  
    55  	return spaces, Warnings(warnings), nil
    56  }
    57  
    58  // GetSpaceByOrganizationAndName returns an Space based on the org and name.
    59  func (actor Actor) GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (Space, Warnings, error) {
    60  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(
    61  		ccv2.Filter{
    62  			Type:     constant.NameFilter,
    63  			Operator: constant.EqualOperator,
    64  			Values:   []string{spaceName},
    65  		},
    66  		ccv2.Filter{
    67  			Type:     constant.OrganizationGUIDFilter,
    68  			Operator: constant.EqualOperator,
    69  			Values:   []string{orgGUID},
    70  		},
    71  	)
    72  	if err != nil {
    73  		return Space{}, Warnings(warnings), err
    74  	}
    75  
    76  	if len(ccv2Spaces) == 0 {
    77  		return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName}
    78  	}
    79  
    80  	if len(ccv2Spaces) > 1 {
    81  		return Space{}, Warnings(warnings), actionerror.MultipleSpacesFoundError{OrgGUID: orgGUID, Name: spaceName}
    82  	}
    83  
    84  	return Space(ccv2Spaces[0]), Warnings(warnings), nil
    85  }