github.com/rakutentech/cli@v6.12.5-0.20151006231303-24468b65536e+incompatible/cf/commands/space/space.go (about) 1 package space 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/cloudfoundry/cli/cf/command_registry" 8 . "github.com/cloudfoundry/cli/cf/i18n" 9 "github.com/cloudfoundry/cli/cf/models" 10 "github.com/cloudfoundry/cli/flags" 11 "github.com/cloudfoundry/cli/flags/flag" 12 "github.com/cloudfoundry/cli/plugin/models" 13 14 "github.com/cloudfoundry/cli/cf/api/space_quotas" 15 "github.com/cloudfoundry/cli/cf/configuration/core_config" 16 "github.com/cloudfoundry/cli/cf/formatters" 17 "github.com/cloudfoundry/cli/cf/requirements" 18 "github.com/cloudfoundry/cli/cf/terminal" 19 ) 20 21 type ShowSpace struct { 22 ui terminal.UI 23 config core_config.Reader 24 spaceReq requirements.SpaceRequirement 25 quotaRepo space_quotas.SpaceQuotaRepository 26 pluginModel *plugin_models.GetSpace_Model 27 pluginCall bool 28 } 29 30 func init() { 31 command_registry.Register(&ShowSpace{}) 32 } 33 34 func (cmd *ShowSpace) MetaData() command_registry.CommandMetadata { 35 fs := make(map[string]flags.FlagSet) 36 fs["guid"] = &cliFlags.BoolFlag{Name: "guid", Usage: T("Retrieve and display the given space's guid. All other output for the space is suppressed.")} 37 fs["security-group-rules"] = &cliFlags.BoolFlag{Name: "security-group-rules", Usage: T("Retreive the rules for all the security groups associated with the space")} 38 return command_registry.CommandMetadata{ 39 Name: "space", 40 Description: T("Show space info"), 41 Usage: T("CF_NAME space SPACE"), 42 Flags: fs, 43 } 44 } 45 46 func (cmd *ShowSpace) Requirements(requirementsFactory requirements.Factory, fc flags.FlagContext) (reqs []requirements.Requirement, err error) { 47 if len(fc.Args()) != 1 { 48 cmd.ui.Failed(T("Incorrect Usage. Requires an argument\n\n") + command_registry.Commands.CommandUsage("space")) 49 } 50 51 cmd.spaceReq = requirementsFactory.NewSpaceRequirement(fc.Args()[0]) 52 reqs = []requirements.Requirement{ 53 requirementsFactory.NewLoginRequirement(), 54 requirementsFactory.NewTargetedOrgRequirement(), 55 cmd.spaceReq, 56 } 57 return 58 } 59 60 func (cmd *ShowSpace) SetDependency(deps command_registry.Dependency, pluginCall bool) command_registry.Command { 61 cmd.ui = deps.Ui 62 cmd.config = deps.Config 63 cmd.quotaRepo = deps.RepoLocator.GetSpaceQuotaRepository() 64 cmd.pluginCall = pluginCall 65 cmd.pluginModel = deps.PluginModels.Space 66 return cmd 67 } 68 69 func (cmd *ShowSpace) Execute(c flags.FlagContext) { 70 space := cmd.spaceReq.GetSpace() 71 if cmd.pluginCall { 72 cmd.populatePluginModel(space) 73 return 74 } 75 if c.Bool("guid") { 76 cmd.ui.Say(space.Guid) 77 } else { 78 cmd.ui.Say(T("Getting info for space {{.TargetSpace}} in org {{.OrgName}} as {{.CurrentUser}}...", 79 map[string]interface{}{ 80 "TargetSpace": terminal.EntityNameColor(space.Name), 81 "OrgName": terminal.EntityNameColor(space.Organization.Name), 82 "CurrentUser": terminal.EntityNameColor(cmd.config.Username()), 83 })) 84 85 quotaString := cmd.quotaString(space) 86 cmd.ui.Ok() 87 cmd.ui.Say("") 88 table := terminal.NewTable(cmd.ui, []string{terminal.EntityNameColor(space.Name), "", ""}) 89 table.Add("", T("Org:"), terminal.EntityNameColor(space.Organization.Name)) 90 91 apps := []string{} 92 for _, app := range space.Applications { 93 apps = append(apps, terminal.EntityNameColor(app.Name)) 94 } 95 table.Add("", T("Apps:"), strings.Join(apps, ", ")) 96 97 domains := []string{} 98 for _, domain := range space.Domains { 99 domains = append(domains, terminal.EntityNameColor(domain.Name)) 100 } 101 table.Add("", T("Domains:"), strings.Join(domains, ", ")) 102 103 services := []string{} 104 for _, service := range space.ServiceInstances { 105 services = append(services, terminal.EntityNameColor(service.Name)) 106 } 107 table.Add("", T("Services:"), strings.Join(services, ", ")) 108 109 securityGroups := []string{} 110 for _, group := range space.SecurityGroups { 111 securityGroups = append(securityGroups, terminal.EntityNameColor(group.Name)) 112 } 113 table.Add("", T("Security Groups:"), strings.Join(securityGroups, ", ")) 114 115 table.Add("", T("Space Quota:"), quotaString) 116 117 table.Print() 118 } 119 if c.Bool("security-group-rules") { 120 cmd.ui.Say("") 121 for _, group := range space.SecurityGroups { 122 cmd.ui.Say(T("Getting rules for the security group : {{.SecurityGroupName}}...", 123 map[string]interface{}{"SecurityGroupName": terminal.EntityNameColor(group.Name)})) 124 table := terminal.NewTable(cmd.ui, []string{"", "", "", ""}) 125 for _, rules := range group.Rules { 126 for ruleName, ruleValue := range rules { 127 table.Add("", ruleName, ":", fmt.Sprintf("%v", ruleValue)) 128 } 129 table.Add("", "", "", "") 130 } 131 table.Print() 132 } 133 } 134 135 } 136 137 func (cmd *ShowSpace) quotaString(space models.Space) string { 138 var instance_memory string 139 140 if space.SpaceQuotaGuid == "" { 141 return "" 142 } 143 144 quota, err := cmd.quotaRepo.FindByGuid(space.SpaceQuotaGuid) 145 if err != nil { 146 cmd.ui.Failed(err.Error()) 147 return "" 148 } 149 150 if quota.InstanceMemoryLimit == -1 { 151 instance_memory = "-1" 152 } else { 153 instance_memory = formatters.ByteSize(quota.InstanceMemoryLimit * formatters.MEGABYTE) 154 } 155 memory := formatters.ByteSize(quota.MemoryLimit * formatters.MEGABYTE) 156 157 spaceQuota := fmt.Sprintf("%s (%s memory limit, %s instance memory limit, %d routes, %d services, paid services %s)", quota.Name, memory, instance_memory, quota.RoutesLimit, quota.ServicesLimit, formatters.Allowed(quota.NonBasicServicesAllowed)) 158 // spaceQuota := fmt.Sprintf(T("{{.QuotaName}} ({{.MemoryLimit}} memory limit, {{.InstanceMemoryLimit}} instance memory limit, {{.RoutesLimit}} routes, {{.ServicesLimit}} services, paid services {{.NonBasicServicesAllowed}})", 159 // map[string]interface{}{ 160 // "QuotaName": quota.Name, 161 // "MemoryLimit": memory, 162 // "InstanceMemoryLimit": instance_memory, 163 // "RoutesLimit": quota.RoutesLimit, 164 // "ServicesLimit": quota.ServicesLimit, 165 // "NonBasicServicesAllowed": formatters.Allowed(quota.NonBasicServicesAllowed)})) 166 167 return spaceQuota 168 } 169 170 func (cmd *ShowSpace) populatePluginModel(space models.Space) { 171 cmd.pluginModel.Name = space.Name 172 cmd.pluginModel.Guid = space.Guid 173 174 cmd.pluginModel.Organization.Name = space.Organization.Name 175 cmd.pluginModel.Organization.Guid = space.Organization.Guid 176 177 for _, app := range space.Applications { 178 a := plugin_models.GetSpace_Apps{ 179 Name: app.Name, 180 Guid: app.Guid, 181 } 182 cmd.pluginModel.Applications = append(cmd.pluginModel.Applications, a) 183 } 184 185 for _, domain := range space.Domains { 186 d := plugin_models.GetSpace_Domains{ 187 Name: domain.Name, 188 Guid: domain.Guid, 189 OwningOrganizationGuid: domain.OwningOrganizationGuid, 190 Shared: domain.Shared, 191 } 192 cmd.pluginModel.Domains = append(cmd.pluginModel.Domains, d) 193 } 194 195 for _, service := range space.ServiceInstances { 196 si := plugin_models.GetSpace_ServiceInstance{ 197 Name: service.Name, 198 Guid: service.Guid, 199 } 200 cmd.pluginModel.ServiceInstances = append(cmd.pluginModel.ServiceInstances, si) 201 } 202 for _, group := range space.SecurityGroups { 203 sg := plugin_models.GetSpace_SecurityGroup{ 204 Name: group.Name, 205 Guid: group.Guid, 206 Rules: group.Rules, 207 } 208 cmd.pluginModel.SecurityGroups = append(cmd.pluginModel.SecurityGroups, sg) 209 } 210 211 quota, err := cmd.quotaRepo.FindByGuid(space.SpaceQuotaGuid) 212 if err == nil { 213 cmd.pluginModel.SpaceQuota.Name = quota.Name 214 cmd.pluginModel.SpaceQuota.Guid = quota.Guid 215 cmd.pluginModel.SpaceQuota.MemoryLimit = quota.MemoryLimit 216 cmd.pluginModel.SpaceQuota.InstanceMemoryLimit = quota.InstanceMemoryLimit 217 cmd.pluginModel.SpaceQuota.RoutesLimit = quota.RoutesLimit 218 cmd.pluginModel.SpaceQuota.ServicesLimit = quota.ServicesLimit 219 cmd.pluginModel.SpaceQuota.NonBasicServicesAllowed = quota.NonBasicServicesAllowed 220 } 221 }