github.com/cloudfoundry-attic/cli-with-i18n@v6.32.1-0.20171002233121-7401370d3b85+incompatible/actor/v2action/space_summary.go (about)

     1  package v2action
     2  
     3  import (
     4  	"sort"
     5  
     6  	"code.cloudfoundry.org/cli/api/cloudcontroller/ccv2"
     7  )
     8  
     9  type SecurityGroupRule struct {
    10  	Name        string
    11  	Description string
    12  	Destination string
    13  	Lifecycle   ccv2.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, includeStagingSecurityGroupsRules bool) (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, ccv2.SecurityGroupLifecycleRunning)...)
    92  	}
    93  
    94  	sort.Strings(runningSecurityGroupNames)
    95  
    96  	if includeStagingSecurityGroupsRules {
    97  		securityGroups, warnings, err = actor.GetSpaceStagingSecurityGroupsBySpace(space.GUID)
    98  		allWarnings = append(allWarnings, warnings...)
    99  		if err != nil {
   100  			return SpaceSummary{}, allWarnings, err
   101  		}
   102  
   103  		for _, securityGroup := range securityGroups {
   104  			stagingSecurityGroupNames = append(stagingSecurityGroupNames, securityGroup.Name)
   105  			securityGroupRules = append(securityGroupRules, extractSecurityGroupRules(securityGroup, ccv2.SecurityGroupLifecycleStaging)...)
   106  		}
   107  
   108  		sort.Strings(stagingSecurityGroupNames)
   109  	}
   110  
   111  	sort.Slice(securityGroupRules, func(i int, j int) bool {
   112  		if securityGroupRules[i].Name < securityGroupRules[j].Name {
   113  			return true
   114  		}
   115  		if securityGroupRules[i].Name > securityGroupRules[j].Name {
   116  			return false
   117  		}
   118  		if securityGroupRules[i].Destination < securityGroupRules[j].Destination {
   119  			return true
   120  		}
   121  		if securityGroupRules[i].Destination > securityGroupRules[j].Destination {
   122  			return false
   123  		}
   124  		return securityGroupRules[i].Lifecycle < securityGroupRules[j].Lifecycle
   125  	})
   126  
   127  	spaceSummary := SpaceSummary{
   128  		Space:   space,
   129  		OrgName: org.Name,
   130  		OrgDefaultIsolationSegmentGUID: org.DefaultIsolationSegmentGUID,
   131  		AppNames:                       appNames,
   132  		ServiceInstanceNames:           serviceInstanceNames,
   133  		SpaceQuotaName:                 spaceQuota.Name,
   134  		RunningSecurityGroupNames:      runningSecurityGroupNames,
   135  		StagingSecurityGroupNames:      stagingSecurityGroupNames,
   136  		SecurityGroupRules:             securityGroupRules,
   137  	}
   138  
   139  	return spaceSummary, allWarnings, nil
   140  }