github.com/cloudfoundry/cli@v7.1.0+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/ccerror"
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     7  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     8  	uaaconst "code.cloudfoundry.org/cli/api/uaa/constant"
     9  )
    10  
    11  // Space represents a CLI Space
    12  type Space ccv2.Space
    13  
    14  func (actor Actor) CreateSpace(spaceName, orgName, quotaName string) (Space, Warnings, error) {
    15  	var allWarnings Warnings
    16  	org, getOrgWarnings, err := actor.GetOrganizationByName(orgName)
    17  	allWarnings = append(allWarnings, Warnings(getOrgWarnings)...)
    18  	if err != nil {
    19  		return Space{}, allWarnings, err
    20  	}
    21  
    22  	var spaceQuota SpaceQuota
    23  	if quotaName != "" {
    24  		var getQuotaWarnings Warnings
    25  		spaceQuota, getQuotaWarnings, err = actor.GetSpaceQuotaByName(quotaName, org.GUID)
    26  		allWarnings = append(allWarnings, Warnings(getQuotaWarnings)...)
    27  		if err != nil {
    28  			return Space{}, allWarnings, err
    29  		}
    30  	}
    31  
    32  	space, spaceWarnings, err := actor.CloudControllerClient.CreateSpace(spaceName, org.GUID)
    33  	allWarnings = append(allWarnings, Warnings(spaceWarnings)...)
    34  	if err != nil {
    35  		if _, ok := err.(ccerror.SpaceNameTakenError); ok {
    36  			return Space{}, allWarnings, actionerror.SpaceNameTakenError{Name: spaceName}
    37  		}
    38  		return Space{}, allWarnings, err
    39  	}
    40  
    41  	if quotaName != "" {
    42  		var setQuotaWarnings Warnings
    43  		setQuotaWarnings, err = actor.SetSpaceQuota(space.GUID, spaceQuota.GUID)
    44  		allWarnings = append(allWarnings, Warnings(setQuotaWarnings)...)
    45  
    46  		if err != nil {
    47  			return Space{}, allWarnings, err
    48  		}
    49  	}
    50  
    51  	return Space(space), allWarnings, err
    52  }
    53  
    54  func (actor Actor) DeleteSpaceByNameAndOrganizationName(spaceName string, orgName string) (Warnings, error) {
    55  	var allWarnings Warnings
    56  
    57  	org, warnings, err := actor.GetOrganizationByName(orgName)
    58  	allWarnings = append(allWarnings, warnings...)
    59  	if err != nil {
    60  		return allWarnings, err
    61  	}
    62  
    63  	space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, spaceName)
    64  	allWarnings = append(allWarnings, warnings...)
    65  	if err != nil {
    66  		return allWarnings, err
    67  	}
    68  
    69  	job, deleteWarnings, err := actor.CloudControllerClient.DeleteSpaceJob(space.GUID)
    70  	allWarnings = append(allWarnings, Warnings(deleteWarnings)...)
    71  	if err != nil {
    72  		return allWarnings, err
    73  	}
    74  
    75  	warnings, err = actor.PollJob(Job(job))
    76  	allWarnings = append(allWarnings, Warnings(warnings)...)
    77  
    78  	return allWarnings, err
    79  }
    80  
    81  // GetOrganizationSpaces returns a list of spaces in the specified org
    82  func (actor Actor) GetOrganizationSpaces(orgGUID string) ([]Space, Warnings, error) {
    83  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(ccv2.Filter{
    84  		Type:     constant.OrganizationGUIDFilter,
    85  		Operator: constant.EqualOperator,
    86  		Values:   []string{orgGUID},
    87  	})
    88  	if err != nil {
    89  		return []Space{}, Warnings(warnings), err
    90  	}
    91  
    92  	spaces := make([]Space, len(ccv2Spaces))
    93  	for i, ccv2Space := range ccv2Spaces {
    94  		spaces[i] = Space(ccv2Space)
    95  	}
    96  
    97  	return spaces, Warnings(warnings), nil
    98  }
    99  
   100  // GetSpaceByOrganizationAndName returns an Space based on the org and name.
   101  func (actor Actor) GetSpaceByOrganizationAndName(orgGUID string, spaceName string) (Space, Warnings, error) {
   102  	ccv2Spaces, warnings, err := actor.CloudControllerClient.GetSpaces(
   103  		ccv2.Filter{
   104  			Type:     constant.NameFilter,
   105  			Operator: constant.EqualOperator,
   106  			Values:   []string{spaceName},
   107  		},
   108  		ccv2.Filter{
   109  			Type:     constant.OrganizationGUIDFilter,
   110  			Operator: constant.EqualOperator,
   111  			Values:   []string{orgGUID},
   112  		},
   113  	)
   114  	if err != nil {
   115  		return Space{}, Warnings(warnings), err
   116  	}
   117  
   118  	if len(ccv2Spaces) == 0 {
   119  		return Space{}, Warnings(warnings), actionerror.SpaceNotFoundError{Name: spaceName}
   120  	}
   121  
   122  	if len(ccv2Spaces) > 1 {
   123  		return Space{}, Warnings(warnings), actionerror.MultipleSpacesFoundError{OrgGUID: orgGUID, Name: spaceName}
   124  	}
   125  
   126  	return Space(ccv2Spaces[0]), Warnings(warnings), nil
   127  }
   128  
   129  // GrantSpaceManagerByUsername makes the provided user a Space Manager in the
   130  // space with the provided guid.
   131  func (actor Actor) GrantSpaceManagerByUsername(orgGUID string, spaceGUID string, username string) (Warnings, error) {
   132  	if actor.Config.UAAGrantType() == string(uaaconst.GrantTypeClientCredentials) {
   133  		return actor.grantSpaceManagerByClientCredentials(orgGUID, spaceGUID, username)
   134  	}
   135  
   136  	return actor.grantSpaceManagerByUsername(orgGUID, spaceGUID, username)
   137  }
   138  
   139  func (actor Actor) grantSpaceManagerByClientCredentials(orgGUID string, spaceGUID string, clientID string) (Warnings, error) {
   140  	ccv2Warnings, err := actor.CloudControllerClient.UpdateOrganizationUser(orgGUID, clientID)
   141  	warnings := Warnings(ccv2Warnings)
   142  	if err != nil {
   143  		return warnings, err
   144  	}
   145  
   146  	ccv2Warnings, err = actor.CloudControllerClient.UpdateSpaceManager(spaceGUID, clientID)
   147  	warnings = append(warnings, Warnings(ccv2Warnings)...)
   148  	if err != nil {
   149  		return warnings, err
   150  	}
   151  
   152  	return warnings, err
   153  }
   154  
   155  func (actor Actor) grantSpaceManagerByUsername(orgGUID string, spaceGUID string, username string) (Warnings, error) {
   156  	ccv2Warnings, err := actor.CloudControllerClient.UpdateOrganizationUserByUsername(orgGUID, username)
   157  	warnings := Warnings(ccv2Warnings)
   158  	if err != nil {
   159  		return warnings, err
   160  	}
   161  
   162  	ccv2Warnings, err = actor.CloudControllerClient.UpdateSpaceManagerByUsername(spaceGUID, username)
   163  	warnings = append(warnings, Warnings(ccv2Warnings)...)
   164  
   165  	return warnings, err
   166  }
   167  
   168  // GrantSpaceDeveloperByUsername makes the provided user a Space Developer in the
   169  // space with the provided guid.
   170  func (actor Actor) GrantSpaceDeveloperByUsername(spaceGUID string, username string) (Warnings, error) {
   171  	if actor.Config.UAAGrantType() == string(uaaconst.GrantTypeClientCredentials) {
   172  		warnings, err := actor.CloudControllerClient.UpdateSpaceDeveloper(spaceGUID, username)
   173  
   174  		return Warnings(warnings), err
   175  	}
   176  
   177  	warnings, err := actor.CloudControllerClient.UpdateSpaceDeveloperByUsername(spaceGUID, username)
   178  	return Warnings(warnings), err
   179  }