github.com/jghiloni/cli@v6.28.1-0.20170628223758-0ce05fe032a2+incompatible/actor/v2action/space.go (about)

     1  package v2action
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     7  )
     8  
     9  // Space represents a CLI Space
    10  type Space ccv2.Space
    11  
    12  // SpaceFoundError represents the scenario when the space searched for could
    13  // not be found.
    14  type SpaceNotFoundError struct {
    15  	GUID string
    16  	Name string
    17  }
    18  
    19  func (e SpaceNotFoundError) Error() string {
    20  	switch {
    21  	case e.Name != "":
    22  		return fmt.Sprintf("Space '%s' not found.", e.Name)
    23  	case e.GUID != "":
    24  		return fmt.Sprintf("Space with GUID '%s' not found.", e.GUID)
    25  	default:
    26  		return fmt.Sprintf("Space '' not found.")
    27  	}
    28  }
    29  
    30  // MultipleSpacesFoundError represents the scenario when the cloud
    31  // controller returns multiple spaces when filtering by name. This is a
    32  // far out edge case and should not happen.
    33  type MultipleSpacesFoundError struct {
    34  	Name    string
    35  	OrgGUID string
    36  }
    37  
    38  func (e MultipleSpacesFoundError) Error() string {
    39  	return fmt.Sprintf("Multiple spaces found matching organization GUID '%s' and name '%s'", e.OrgGUID, e.Name)
    40  }
    41  
    42  func (actor Actor) DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (Warnings, error) {
    43  	var allWarnings Warnings
    44  
    45  	org, warnings, err := actor.GetOrganizationByName(orgName)
    46  	allWarnings = append(allWarnings, warnings...)
    47  	if err != nil {
    48  		return allWarnings, err
    49  	}
    50  
    51  	space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, spaceName)
    52  	allWarnings = append(allWarnings, warnings...)
    53  	if err != nil {
    54  		return allWarnings, err
    55  	}
    56  
    57  	job, deleteWarnings, err := actor.CloudControllerClient.DeleteSpace(space.GUID)
    58  	allWarnings = append(allWarnings, Warnings(deleteWarnings)...)
    59  	if err != nil {
    60  		return allWarnings, err
    61  	}
    62  
    63  	warnings, err = actor.PollJob(Job(job))
    64  	allWarnings = append(allWarnings, Warnings(warnings)...)
    65  
    66  	return allWarnings, err
    67  }
    68  
    69  // GetOrganizationSpaces returns a list of spaces in the specified org
    70  func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) {
    71  	query := []ccv2.Query{
    72  		{
    73  			Filter:   ccv2.OrganizationGUIDFilter,
    74  			Operator: ccv2.EqualOperator,
    75  			Value:    orgGUID,
    76  		}}
    77  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(query)
    78  	if err != nil {
    79  		return []Space{}, Warnings(warnings), err
    80  	}
    81  
    82  	spaces := make([]Space, len(ccv2Spaces))
    83  	for i, ccv2Space := range ccv2Spaces {
    84  		spaces[i] = Space(ccv2Space)
    85  	}
    86  
    87  	return spaces, Warnings(warnings), nil
    88  }
    89  
    90  // GetSpaceByOrganizationAndName returns an Space based on the org and name.
    91  func (actor Actor) GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (Space, Warnings, error) {
    92  	query := []ccv2.Query{
    93  		{
    94  			Filter:   ccv2.NameFilter,
    95  			Operator: ccv2.EqualOperator,
    96  			Value:    spaceName,
    97  		},
    98  		{
    99  			Filter:   ccv2.OrganizationGUIDFilter,
   100  			Operator: ccv2.EqualOperator,
   101  			Value:    orgGUID,
   102  		},
   103  	}
   104  
   105  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(query)
   106  	if err != nil {
   107  		return Space{}, Warnings(warnings), err
   108  	}
   109  
   110  	if len(ccv2Spaces) == 0 {
   111  		return Space{}, Warnings(warnings), SpaceNotFoundError{Name: spaceName}
   112  	}
   113  
   114  	if len(ccv2Spaces) > 1 {
   115  		return Space{}, Warnings(warnings), MultipleSpacesFoundError{OrgGUID: orgGUID, Name: spaceName}
   116  	}
   117  
   118  	return Space(ccv2Spaces[0]), Warnings(warnings), nil
   119  }