code.cloudfoundry.org/cli@v7.1.0+incompatible/actor/v3action/isolation_segment.go (about)

     1  package v3action
     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/ccv3"
     7  )
     8  
     9  type IsolationSegmentSummary struct {
    10  	Name         string
    11  	EntitledOrgs []string
    12  }
    13  
    14  // IsolationSegment represents a V3 actor IsolationSegment.
    15  type IsolationSegment ccv3.IsolationSegment
    16  
    17  // GetEffectiveIsolationSegmentBySpace returns the space's effective isolation
    18  // segment.
    19  //
    20  // If the space has its own isolation segment, that will be returned.
    21  //
    22  // If the space does not have one, the organization's default isolation segment
    23  // (GUID passed in) will be returned.
    24  //
    25  // If the space does not have one and the passed in organization default
    26  // isolation segment GUID is empty, a NoRelationshipError will be returned.
    27  func (actor Actor) GetEffectiveIsolationSegmentBySpace(spaceGUID string, orgDefaultIsolationSegmentGUID string) (IsolationSegment, Warnings, error) {
    28  	relationship, warnings, err := actor.CloudControllerClient.GetSpaceIsolationSegment(spaceGUID)
    29  	allWarnings := append(Warnings{}, warnings...)
    30  	if err != nil {
    31  		return IsolationSegment{}, allWarnings, err
    32  	}
    33  
    34  	effectiveGUID := relationship.GUID
    35  	if effectiveGUID == "" {
    36  		if orgDefaultIsolationSegmentGUID != "" {
    37  			effectiveGUID = orgDefaultIsolationSegmentGUID
    38  		} else {
    39  			return IsolationSegment{}, allWarnings, actionerror.NoRelationshipError{}
    40  		}
    41  	}
    42  
    43  	isolationSegment, warnings, err := actor.CloudControllerClient.GetIsolationSegment(effectiveGUID)
    44  	allWarnings = append(allWarnings, warnings...)
    45  	if err != nil {
    46  		return IsolationSegment{}, allWarnings, err
    47  	}
    48  
    49  	return IsolationSegment(isolationSegment), allWarnings, err
    50  }
    51  
    52  // CreateIsolationSegmentByName creates a given isolation segment.
    53  func (actor Actor) CreateIsolationSegmentByName(isolationSegment IsolationSegment) (Warnings, error) {
    54  	_, warnings, err := actor.CloudControllerClient.CreateIsolationSegment(ccv3.IsolationSegment(isolationSegment))
    55  	if _, ok := err.(ccerror.UnprocessableEntityError); ok {
    56  		return Warnings(warnings), actionerror.IsolationSegmentAlreadyExistsError{Name: isolationSegment.Name}
    57  	}
    58  	return Warnings(warnings), err
    59  }
    60  
    61  // DeleteIsolationSegmentByName deletes the given isolation segment.
    62  func (actor Actor) DeleteIsolationSegmentByName(name string) (Warnings, error) {
    63  	isolationSegment, warnings, err := actor.GetIsolationSegmentByName(name)
    64  	allWarnings := append(Warnings{}, warnings...)
    65  	if err != nil {
    66  		return allWarnings, err
    67  	}
    68  
    69  	apiWarnings, err := actor.CloudControllerClient.DeleteIsolationSegment(isolationSegment.GUID)
    70  	return append(allWarnings, apiWarnings...), err
    71  }
    72  
    73  // EntitleIsolationSegmentToOrganizationByName entitles the given organization
    74  // to use the specified isolation segment
    75  func (actor Actor) EntitleIsolationSegmentToOrganizationByName(isolationSegmentName string, orgName string) (Warnings, error) {
    76  	isolationSegment, warnings, err := actor.GetIsolationSegmentByName(isolationSegmentName)
    77  	allWarnings := append(Warnings{}, warnings...)
    78  	if err != nil {
    79  		return allWarnings, err
    80  	}
    81  
    82  	organization, warnings, err := actor.GetOrganizationByName(orgName)
    83  	allWarnings = append(allWarnings, warnings...)
    84  	if err != nil {
    85  		return allWarnings, err
    86  	}
    87  
    88  	_, apiWarnings, err := actor.CloudControllerClient.EntitleIsolationSegmentToOrganizations(isolationSegment.GUID, []string{organization.GUID})
    89  	return append(allWarnings, apiWarnings...), err
    90  }
    91  
    92  func (actor Actor) AssignIsolationSegmentToSpaceByNameAndSpace(isolationSegmentName string, spaceGUID string) (Warnings, error) {
    93  	seg, warnings, err := actor.GetIsolationSegmentByName(isolationSegmentName)
    94  	if err != nil {
    95  		return warnings, err
    96  	}
    97  
    98  	_, apiWarnings, err := actor.CloudControllerClient.UpdateSpaceIsolationSegmentRelationship(spaceGUID, seg.GUID)
    99  	return append(warnings, apiWarnings...), err
   100  }
   101  
   102  // GetIsolationSegmentByName returns the requested isolation segment.
   103  func (actor Actor) GetIsolationSegmentByName(name string) (IsolationSegment, Warnings, error) {
   104  	isolationSegments, warnings, err := actor.CloudControllerClient.GetIsolationSegments(
   105  		ccv3.Query{Key: ccv3.NameFilter, Values: []string{name}},
   106  	)
   107  	if err != nil {
   108  		return IsolationSegment{}, Warnings(warnings), err
   109  	}
   110  
   111  	if len(isolationSegments) == 0 {
   112  		return IsolationSegment{}, Warnings(warnings), actionerror.IsolationSegmentNotFoundError{Name: name}
   113  	}
   114  
   115  	return IsolationSegment(isolationSegments[0]), Warnings(warnings), nil
   116  }
   117  
   118  // GetIsolationSegmentSummaries returns all isolation segments and their entitled orgs
   119  func (actor Actor) GetIsolationSegmentSummaries() ([]IsolationSegmentSummary, Warnings, error) {
   120  	isolationSegments, warnings, err := actor.CloudControllerClient.GetIsolationSegments()
   121  	allWarnings := append(Warnings{}, warnings...)
   122  	if err != nil {
   123  		return nil, allWarnings, err
   124  	}
   125  
   126  	var isolationSegmentSummaries []IsolationSegmentSummary
   127  
   128  	for _, isolationSegment := range isolationSegments {
   129  		isolationSegmentSummary := IsolationSegmentSummary{
   130  			Name:         isolationSegment.Name,
   131  			EntitledOrgs: []string{},
   132  		}
   133  
   134  		orgs, warnings, err := actor.CloudControllerClient.GetIsolationSegmentOrganizations(isolationSegment.GUID)
   135  		allWarnings = append(allWarnings, warnings...)
   136  		if err != nil {
   137  			return nil, allWarnings, err
   138  		}
   139  
   140  		for _, org := range orgs {
   141  			isolationSegmentSummary.EntitledOrgs = append(isolationSegmentSummary.EntitledOrgs, org.Name)
   142  		}
   143  
   144  		isolationSegmentSummaries = append(isolationSegmentSummaries, isolationSegmentSummary)
   145  	}
   146  	return isolationSegmentSummaries, allWarnings, nil
   147  }
   148  
   149  func (actor Actor) GetIsolationSegmentsByOrganization(orgGUID string) ([]IsolationSegment, Warnings, error) {
   150  	ccv3IsolationSegments, warnings, err := actor.CloudControllerClient.GetIsolationSegments(
   151  		ccv3.Query{Key: ccv3.OrganizationGUIDFilter, Values: []string{orgGUID}},
   152  	)
   153  	if err != nil {
   154  		return []IsolationSegment{}, Warnings(warnings), err
   155  	}
   156  
   157  	isolationSegments := make([]IsolationSegment, len(ccv3IsolationSegments))
   158  
   159  	for i := range ccv3IsolationSegments {
   160  		isolationSegments[i] = IsolationSegment(ccv3IsolationSegments[i])
   161  	}
   162  
   163  	return isolationSegments, Warnings(warnings), nil
   164  }
   165  
   166  func (actor Actor) DeleteIsolationSegmentOrganizationByName(isolationSegmentName string, orgName string) (Warnings, error) {
   167  	segment, warnings, err := actor.GetIsolationSegmentByName(isolationSegmentName)
   168  	allWarnings := append(Warnings{}, warnings...)
   169  	if err != nil {
   170  		return allWarnings, err
   171  	}
   172  
   173  	org, warnings, err := actor.GetOrganizationByName(orgName)
   174  	allWarnings = append(allWarnings, warnings...)
   175  
   176  	if err != nil {
   177  		return allWarnings, err
   178  	}
   179  
   180  	apiWarnings, err := actor.CloudControllerClient.DeleteIsolationSegmentOrganization(segment.GUID, org.GUID)
   181  
   182  	allWarnings = append(allWarnings, apiWarnings...)
   183  	return allWarnings, err
   184  }
   185  
   186  // SetOrganizationDefaultIsolationSegment sets a default isolation segment on
   187  // an organization.
   188  func (actor Actor) SetOrganizationDefaultIsolationSegment(orgGUID string, isoSegGUID string) (Warnings, error) {
   189  	_, apiWarnings, err := actor.CloudControllerClient.UpdateOrganizationDefaultIsolationSegmentRelationship(orgGUID, isoSegGUID)
   190  	return Warnings(apiWarnings), err
   191  }
   192  
   193  // ResetOrganizationDefaultIsolationSegment resets the default isolation segment fon
   194  // an organization.
   195  func (actor Actor) ResetOrganizationDefaultIsolationSegment(orgGUID string) (Warnings, error) {
   196  	_, apiWarnings, err := actor.CloudControllerClient.UpdateOrganizationDefaultIsolationSegmentRelationship(orgGUID, "")
   197  	return Warnings(apiWarnings), err
   198  }