github.com/Thanhphan1147/cloudfoundry-cli@v7.1.0+incompatible/actor/v2action/space_summary.go (about)

     1  package v2action
     2  
     3  import (
     4  	"sort"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2/constant"
     7  )
     8  
     9  type SecurityGroupRule struct {
    10  	Name        string
    11  	Description string
    12  	Destination string
    13  	Lifecycle   constant.SecurityGroupLifecycle
    14  	Ports       string
    15  	Protocol    string
    16  }
    17  
    18  type SpaceSummary struct {
    19  	Space
    20  	OrgName                        string
    21  	OrgDefaultIsolationSegmentGUID string
    22  	AppNames                       []string
    23  	ServiceInstanceNames           []string
    24  	SpaceQuotaName                 string
    25  	RunningSecurityGroupNames      []string
    26  	StagingSecurityGroupNames      []string
    27  	SecurityGroupRules             []SecurityGroupRule
    28  }
    29  
    30  func (actor Actor) GetSpaceSummaryByOrganizationAndName(orgGUID string, name string) (SpaceSummary, Warnings, error) {
    31  	var allWarnings Warnings
    32  
    33  	org, warnings, err := actor.GetOrganization(orgGUID)
    34  	allWarnings = append(allWarnings, warnings...)
    35  	if err != nil {
    36  		return SpaceSummary{}, allWarnings, err
    37  	}
    38  
    39  	space, warnings, err := actor.GetSpaceByOrganizationAndName(org.GUID, name)
    40  	allWarnings = append(allWarnings, warnings...)
    41  	if err != nil {
    42  		return SpaceSummary{}, allWarnings, err
    43  	}
    44  
    45  	apps, warnings, err := actor.GetApplicationsBySpace(space.GUID)
    46  	allWarnings = append(allWarnings, warnings...)
    47  	if err != nil {
    48  		return SpaceSummary{}, allWarnings, err
    49  	}
    50  
    51  	appNames := make([]string, len(apps))
    52  	for i, app := range apps {
    53  		appNames[i] = app.Name
    54  	}
    55  	sort.Strings(appNames)
    56  
    57  	serviceInstances, warnings, err := actor.GetServiceInstancesBySpace(space.GUID)
    58  	allWarnings = append(allWarnings, warnings...)
    59  	if err != nil {
    60  		return SpaceSummary{}, allWarnings, err
    61  	}
    62  
    63  	serviceInstanceNames := make([]string, len(serviceInstances))
    64  	for i, serviceInstance := range serviceInstances {
    65  		serviceInstanceNames[i] = serviceInstance.Name
    66  	}
    67  	sort.Strings(serviceInstanceNames)
    68  
    69  	var spaceQuota SpaceQuota
    70  
    71  	if space.SpaceQuotaDefinitionGUID != "" {
    72  		spaceQuota, warnings, err = actor.GetSpaceQuota(space.SpaceQuotaDefinitionGUID)
    73  		allWarnings = append(allWarnings, warnings...)
    74  		if err != nil {
    75  			return SpaceSummary{}, allWarnings, err
    76  		}
    77  	}
    78  
    79  	securityGroups, warnings, err := actor.GetSpaceRunningSecurityGroupsBySpace(space.GUID)
    80  	allWarnings = append(allWarnings, warnings...)
    81  	if err != nil {
    82  		return SpaceSummary{}, allWarnings, err
    83  	}
    84  
    85  	var runningSecurityGroupNames []string
    86  	var stagingSecurityGroupNames []string
    87  	var securityGroupRules []SecurityGroupRule
    88  
    89  	for _, securityGroup := range securityGroups {
    90  		runningSecurityGroupNames = append(runningSecurityGroupNames, securityGroup.Name)
    91  		securityGroupRules = append(securityGroupRules, extractSecurityGroupRules(securityGroup, constant.SecurityGroupLifecycleRunning)...)
    92  	}
    93  
    94  	sort.Strings(runningSecurityGroupNames)
    95  
    96  	securityGroups, warnings, err = actor.GetSpaceStagingSecurityGroupsBySpace(space.GUID)
    97  	allWarnings = append(allWarnings, warnings...)
    98  	if err != nil {
    99  		return SpaceSummary{}, allWarnings, err
   100  	}
   101  
   102  	for _, securityGroup := range securityGroups {
   103  		stagingSecurityGroupNames = append(stagingSecurityGroupNames, securityGroup.Name)
   104  		securityGroupRules = append(securityGroupRules, extractSecurityGroupRules(securityGroup, constant.SecurityGroupLifecycleStaging)...)
   105  	}
   106  
   107  	sort.Strings(stagingSecurityGroupNames)
   108  
   109  	sort.Slice(securityGroupRules, func(i int, j int) bool {
   110  		if securityGroupRules[i].Name < securityGroupRules[j].Name {
   111  			return true
   112  		}
   113  		if securityGroupRules[i].Name > securityGroupRules[j].Name {
   114  			return false
   115  		}
   116  		if securityGroupRules[i].Destination < securityGroupRules[j].Destination {
   117  			return true
   118  		}
   119  		if securityGroupRules[i].Destination > securityGroupRules[j].Destination {
   120  			return false
   121  		}
   122  		return securityGroupRules[i].Lifecycle < securityGroupRules[j].Lifecycle
   123  	})
   124  
   125  	spaceSummary := SpaceSummary{
   126  		Space:                          space,
   127  		OrgName:                        org.Name,
   128  		OrgDefaultIsolationSegmentGUID: org.DefaultIsolationSegmentGUID,
   129  		AppNames:                       appNames,
   130  		ServiceInstanceNames:           serviceInstanceNames,
   131  		SpaceQuotaName:                 spaceQuota.Name,
   132  		RunningSecurityGroupNames:      runningSecurityGroupNames,
   133  		StagingSecurityGroupNames:      stagingSecurityGroupNames,
   134  		SecurityGroupRules:             securityGroupRules,
   135  	}
   136  
   137  	return spaceSummary, allWarnings, nil
   138  }