github.com/liamawhite/cli-with-i18n@v6.32.1-0.20171122084555-dede0a5c3448+incompatible/actor/v2action/space_summary.go (about) 1 package v2action 2 3 import ( 4 "sort" 5 6 "github.com/liamawhite/cli-with-i18n/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 }