1/* 2Copyright 2017 WALLIX 3 4Licensed under the Apache License, Version 2.0 (the "License"); 5you may not use this file except in compliance with the License. 6You may obtain a copy of the License at 7 8 http://www.apache.org/licenses/LICENSE-2.0 9 10Unless required by applicable law or agreed to in writing, software 11distributed under the License is distributed on an "AS IS" BASIS, 12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13See the License for the specific language governing permissions and 14limitations under the License. 15*/ 16 17package console 18 19import ( 20 "github.com/fatih/color" 21 "github.com/wallix/awless/cloud" 22 "github.com/wallix/awless/cloud/properties" 23) 24 25var ColumnsInListing = map[string][]string{ 26 cloud.Instance: {properties.ID, properties.AvailabilityZone, properties.Name, properties.State, properties.Type, properties.PublicIP, properties.PrivateIP, properties.Launched, properties.KeyPair}, 27 cloud.Vpc: {properties.ID, properties.Name, properties.Default, properties.State, properties.CIDR}, 28 cloud.Subnet: {properties.ID, properties.Name, properties.CIDR, properties.AvailabilityZone, properties.Default, properties.Vpc, properties.Public, properties.State}, 29 cloud.SecurityGroup: {properties.ID, properties.Vpc, properties.InboundRules, properties.OutboundRules, properties.Name, properties.Description}, 30 cloud.InternetGateway: {properties.ID, properties.Name, properties.Vpcs}, 31 cloud.NatGateway: {properties.ID, properties.State, properties.Vpc, properties.Subnet, properties.Created}, 32 cloud.RouteTable: {properties.ID, properties.Name, properties.Vpc, properties.Default, properties.Routes, properties.Associations}, 33 cloud.Keypair: {properties.ID, properties.Fingerprint}, 34 cloud.Image: {properties.ID, properties.Name, properties.State, properties.Location, properties.Public, properties.Type, properties.Created, properties.Architecture, properties.Hypervisor, properties.Virtualization}, 35 cloud.ImportImageTask: {properties.ID, properties.Description, properties.Image, properties.Progress, properties.State, properties.StateMessage}, 36 cloud.Volume: {properties.ID, properties.Name, properties.Type, properties.State, properties.Size, properties.Encrypted, properties.Created, properties.AvailabilityZone, properties.Instances}, 37 cloud.AvailabilityZone: {properties.Name, properties.State, properties.Region, properties.Messages}, 38 cloud.ElasticIP: {properties.ID, properties.PublicIP, properties.PrivateIP, properties.Association}, 39 cloud.Snapshot: {properties.ID, properties.Volume, properties.Encrypted, properties.Owner, properties.State, properties.Progress, properties.Created, properties.Size}, 40 cloud.NetworkInterface: {properties.ID, properties.Vpc, properties.Subnet, properties.State, properties.Instance, properties.PrivateIP, properties.PublicIP, properties.Description}, 41 cloud.LoadBalancer: {properties.Name, properties.Vpc, properties.State, properties.PublicDNS, properties.Created, properties.Scheme}, 42 cloud.ClassicLoadBalancer: {properties.Name, properties.Vpc, properties.PublicDNS, properties.Instances, properties.Ports, properties.Created, properties.Scheme}, 43 cloud.TargetGroup: {properties.Name, properties.Vpc, properties.CheckHTTPCode, properties.Port, properties.Protocol, properties.CheckInterval, properties.CheckPath, properties.CheckPort, properties.CheckProtocol}, 44 cloud.Listener: {properties.ID, properties.Protocol, properties.Port, properties.LoadBalancer, properties.TargetGroups, properties.AlarmActions}, 45 cloud.Database: {properties.ID, properties.Name, properties.AvailabilityZone, properties.Class, properties.State, properties.Storage, properties.Port, properties.Username, properties.Public, properties.ReplicaOf, properties.Engine, properties.EngineVersion, properties.Created}, 46 cloud.DbSubnetGroup: {properties.ID, properties.State, properties.Vpc, properties.Subnets, properties.Description}, 47 cloud.LaunchConfiguration: {properties.Name, properties.Type, properties.Created, properties.KeyPair}, 48 cloud.ScalingGroup: {properties.Name, properties.LaunchConfigurationName, properties.DesiredCapacity, properties.State, properties.Created, properties.NewInstancesProtected}, 49 cloud.ScalingPolicy: {properties.Name, properties.Type, properties.ScalingGroupName, properties.AlarmNames, properties.AdjustmentType, properties.ScalingAdjustment}, 50 cloud.Repository: {properties.Name, properties.URI, properties.Created, properties.Account, properties.Arn}, 51 cloud.ContainerCluster: {properties.Name, properties.State, properties.ActiveServicesCount, properties.PendingTasksCount, properties.RegisteredContainerInstancesCount, properties.RunningTasksCount}, 52 cloud.ContainerTask: {properties.Name, properties.Version, properties.State, properties.ContainersImages, properties.Deployments}, 53 cloud.Container: {properties.Name, properties.DeploymentName, properties.State, properties.Created, properties.Launched, properties.Stopped, properties.Cluster, properties.ContainerTask}, 54 cloud.ContainerInstance: {properties.ID, properties.Instance, properties.Cluster, properties.State, properties.RunningTasksCount, properties.PendingTasksCount, properties.Created, properties.AgentConnected}, 55 cloud.Certificate: {properties.Arn, properties.Name}, 56 cloud.User: {properties.ID, properties.Name, properties.PasswordLastUsed, properties.Created}, 57 cloud.Role: {properties.ID, properties.Name, properties.Created}, 58 cloud.InstanceProfile: {properties.ID, properties.Name, properties.Path, properties.Created}, 59 cloud.Policy: {properties.ID, properties.Name, properties.Type, properties.Created, properties.Updated, properties.Attached}, 60 cloud.Group: {properties.ID, properties.Name, properties.Created}, 61 cloud.AccessKey: {properties.ID, properties.State, properties.Username, properties.Created}, 62 cloud.MFADevice: {properties.ID, properties.AttachedAt}, 63 cloud.Bucket: {properties.ID, properties.Grants, properties.Created}, 64 cloud.S3Object: {properties.ID, properties.Bucket, properties.Modified, properties.Owner, properties.Size, properties.Class}, 65 cloud.Subscription: {properties.Arn, properties.Topic, properties.Endpoint, properties.Protocol, properties.Owner}, 66 cloud.Topic: {properties.ID}, 67 cloud.Queue: {properties.ID, properties.ApproximateMessageCount, properties.Created, properties.Modified, properties.Delay}, 68 cloud.Zone: {properties.ID, properties.Name, properties.Comment, properties.Private, properties.RecordCount, properties.CallerReference}, 69 cloud.Record: {properties.ID, properties.Type, properties.Name, properties.Records, properties.Zone, properties.Alias, properties.TTL}, 70 cloud.Function: {properties.Name, properties.Size, properties.Memory, properties.Runtime, properties.Version, properties.Modified, properties.Description}, 71 cloud.Metric: {properties.ID, properties.Name, properties.Namespace, properties.Dimensions}, 72 cloud.Alarm: {properties.Name, properties.Namespace, properties.MetricName, properties.Description, properties.State, properties.Updated, properties.Dimensions}, 73 cloud.Distribution: {properties.ID, properties.PublicDNS, properties.Enabled, properties.State, properties.Modified, properties.Aliases, properties.SSLSupportMethod, properties.Origins}, 74 cloud.Stack: {properties.ID, properties.Name, properties.State, properties.Created, properties.Modified}, 75} 76 77var DefaultsColumnDefinitions = map[string][]ColumnDefinition{ 78 //EC2 79 cloud.Instance: { 80 StringColumnDefinition{Prop: properties.ID}, 81 StringColumnDefinition{Prop: properties.AvailabilityZone, Friendly: "Zone"}, 82 StringColumnDefinition{Prop: properties.Name}, 83 ColoredValueColumnDefinition{ 84 StringColumnDefinition: StringColumnDefinition{Prop: properties.State}, 85 ColoredValues: map[string]color.Attribute{"running": color.FgGreen, "stopped": color.FgRed}, 86 }, 87 StringColumnDefinition{Prop: properties.Type}, 88 StringColumnDefinition{Prop: properties.PublicIP, Friendly: "Public IP"}, 89 StringColumnDefinition{Prop: properties.PrivateIP, Friendly: "Private IP"}, 90 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Launched, Friendly: "Uptime"}}, 91 StringColumnDefinition{Prop: properties.KeyPair}, 92 }, 93 cloud.Vpc: { 94 StringColumnDefinition{Prop: properties.ID}, 95 StringColumnDefinition{Prop: properties.Name}, 96 ColoredValueColumnDefinition{ 97 StringColumnDefinition: StringColumnDefinition{Prop: properties.Default, Friendly: "Default"}, 98 ColoredValues: map[string]color.Attribute{"true": color.FgGreen}, 99 }, 100 StringColumnDefinition{Prop: properties.State}, 101 StringColumnDefinition{Prop: properties.CIDR}, 102 }, 103 cloud.Subnet: { 104 StringColumnDefinition{Prop: properties.ID}, 105 StringColumnDefinition{Prop: properties.Name}, 106 StringColumnDefinition{Prop: properties.CIDR}, 107 StringColumnDefinition{Prop: properties.AvailabilityZone, Friendly: "Zone"}, 108 ColoredValueColumnDefinition{ 109 StringColumnDefinition: StringColumnDefinition{Prop: properties.Default, Friendly: "Default"}, 110 ColoredValues: map[string]color.Attribute{"true": color.FgGreen}, 111 }, 112 StringColumnDefinition{Prop: properties.Vpc}, 113 ColoredValueColumnDefinition{ 114 StringColumnDefinition: StringColumnDefinition{Prop: properties.Public}, 115 ColoredValues: map[string]color.Attribute{"true": color.FgYellow}}, 116 ColoredValueColumnDefinition{ 117 StringColumnDefinition: StringColumnDefinition{Prop: properties.State}, 118 ColoredValues: map[string]color.Attribute{"available": color.FgGreen}}, 119 }, 120 cloud.SecurityGroup: { 121 StringColumnDefinition{Prop: properties.ID}, 122 StringColumnDefinition{Prop: properties.Vpc}, 123 FirewallRulesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.InboundRules, Friendly: "Inbound"}}, 124 FirewallRulesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.OutboundRules, Friendly: "Outbound"}}, 125 StringColumnDefinition{Prop: properties.Name}, 126 StringColumnDefinition{Prop: properties.Description}, 127 }, 128 cloud.InternetGateway: { 129 StringColumnDefinition{Prop: properties.ID}, 130 StringColumnDefinition{Prop: properties.Name}, 131 StringColumnDefinition{Prop: properties.Vpcs}, 132 }, 133 cloud.NatGateway: { 134 StringColumnDefinition{Prop: properties.ID}, 135 StringColumnDefinition{Prop: properties.State}, 136 StringColumnDefinition{Prop: properties.Vpc}, 137 StringColumnDefinition{Prop: properties.Subnet}, 138 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created, Friendly: "Created"}}, 139 }, 140 cloud.RouteTable: { 141 StringColumnDefinition{Prop: properties.ID}, 142 StringColumnDefinition{Prop: properties.Name}, 143 StringColumnDefinition{Prop: properties.Vpc}, 144 ColoredValueColumnDefinition{ 145 StringColumnDefinition: StringColumnDefinition{Prop: properties.Default}, 146 ColoredValues: map[string]color.Attribute{"true": color.FgGreen}, 147 }, 148 RoutesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Routes}}, 149 KeyValuesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Associations}}, 150 }, 151 cloud.Keypair: { 152 StringColumnDefinition{Prop: properties.ID}, 153 StringColumnDefinition{Prop: properties.Fingerprint}, 154 }, 155 cloud.Image: { 156 StringColumnDefinition{Prop: properties.ID}, 157 StringColumnDefinition{Prop: properties.Name}, 158 StringColumnDefinition{Prop: properties.State}, 159 StringColumnDefinition{Prop: properties.Location}, 160 StringColumnDefinition{Prop: properties.Public}, 161 StringColumnDefinition{Prop: properties.Type}, 162 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created, Friendly: "Created"}}, 163 StringColumnDefinition{Prop: properties.Architecture, Friendly: "Arch"}, 164 StringColumnDefinition{Prop: properties.Hypervisor, Friendly: "Hyperv"}, 165 StringColumnDefinition{Prop: properties.Virtualization, Friendly: "Virt"}, 166 }, 167 cloud.ImportImageTask: { 168 StringColumnDefinition{Prop: properties.ID}, 169 StringColumnDefinition{Prop: properties.Description}, 170 StringColumnDefinition{Prop: properties.Image}, 171 StringColumnDefinition{Prop: properties.Progress}, 172 StringColumnDefinition{Prop: properties.State}, 173 StringColumnDefinition{Prop: properties.StateMessage}, 174 }, 175 cloud.Volume: { 176 StringColumnDefinition{Prop: properties.ID}, 177 StringColumnDefinition{Prop: properties.Name}, 178 StringColumnDefinition{Prop: properties.Type}, 179 StringColumnDefinition{Prop: properties.State}, 180 StorageColumnDefinition{Unit: gb, StringColumnDefinition: StringColumnDefinition{Prop: properties.Size}}, 181 StringColumnDefinition{Prop: properties.Encrypted}, 182 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 183 StringColumnDefinition{Prop: properties.AvailabilityZone, Friendly: "Zone"}, 184 StringColumnDefinition{Prop: properties.Instances}, 185 }, 186 cloud.AvailabilityZone: { 187 StringColumnDefinition{Prop: properties.Name}, 188 StringColumnDefinition{Prop: properties.State}, 189 StringColumnDefinition{Prop: properties.Region}, 190 StringColumnDefinition{Prop: properties.Messages}, 191 }, 192 cloud.ElasticIP: { 193 StringColumnDefinition{Prop: properties.ID}, 194 StringColumnDefinition{Prop: properties.PublicIP}, 195 StringColumnDefinition{Prop: properties.PrivateIP}, 196 StringColumnDefinition{Prop: properties.Association}, 197 }, 198 cloud.Snapshot: { 199 StringColumnDefinition{Prop: properties.ID}, 200 StringColumnDefinition{Prop: properties.Volume}, 201 StringColumnDefinition{Prop: properties.Encrypted}, 202 StringColumnDefinition{Prop: properties.Owner}, 203 StringColumnDefinition{Prop: properties.State}, 204 StringColumnDefinition{Prop: properties.Progress}, 205 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 206 StorageColumnDefinition{Unit: gb, StringColumnDefinition: StringColumnDefinition{Prop: properties.Size}}, 207 }, 208 cloud.NetworkInterface: { 209 StringColumnDefinition{Prop: properties.ID}, 210 StringColumnDefinition{Prop: properties.Vpc}, 211 StringColumnDefinition{Prop: properties.Subnet}, 212 StringColumnDefinition{Prop: properties.State}, 213 StringColumnDefinition{Prop: properties.Instance}, 214 StringColumnDefinition{Prop: properties.PrivateIP}, 215 StringColumnDefinition{Prop: properties.PublicIP}, 216 StringColumnDefinition{Prop: properties.Description}, 217 }, 218 // Loadbalancer 219 cloud.LoadBalancer: { 220 StringColumnDefinition{Prop: properties.Name}, 221 StringColumnDefinition{Prop: properties.Vpc}, 222 StringColumnDefinition{Prop: properties.State}, 223 StringColumnDefinition{Prop: properties.PublicDNS}, 224 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created, Friendly: "Created"}}, 225 StringColumnDefinition{Prop: properties.Scheme}, 226 }, 227 cloud.ClassicLoadBalancer: { 228 StringColumnDefinition{Prop: properties.Name}, 229 StringColumnDefinition{Prop: properties.Vpc}, 230 StringColumnDefinition{Prop: properties.PublicDNS}, 231 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created, Friendly: "Created"}}, 232 StringColumnDefinition{Prop: properties.Scheme}, 233 SliceColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Instances}}, 234 SliceColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Ports}}, 235 }, 236 cloud.TargetGroup: { 237 StringColumnDefinition{Prop: properties.Name}, 238 StringColumnDefinition{Prop: properties.Vpc}, 239 StringColumnDefinition{Prop: properties.CheckHTTPCode}, 240 StringColumnDefinition{Prop: properties.Port}, 241 StringColumnDefinition{Prop: properties.Protocol}, 242 StringColumnDefinition{Prop: properties.CheckInterval, Friendly: "HCInterval"}, 243 StringColumnDefinition{Prop: properties.CheckPath, Friendly: "HCPath"}, 244 StringColumnDefinition{Prop: properties.CheckPort, Friendly: "HCPort"}, 245 StringColumnDefinition{Prop: properties.CheckProtocol, Friendly: "HCProtocol"}, 246 }, 247 cloud.Listener: { 248 StringColumnDefinition{Prop: properties.ID}, 249 StringColumnDefinition{Prop: properties.Port}, 250 StringColumnDefinition{Prop: properties.Protocol}, 251 StringColumnDefinition{Prop: properties.LoadBalancer}, 252 SliceColumnDefinition{ForEach: ToShortArn, StringColumnDefinition: StringColumnDefinition{Prop: properties.TargetGroups}}, 253 StringColumnDefinition{Prop: properties.AlarmActions}, 254 }, 255 // Database 256 cloud.Database: { 257 StringColumnDefinition{Prop: properties.ID}, 258 StringColumnDefinition{Prop: properties.Name}, 259 StringColumnDefinition{Prop: properties.AvailabilityZone, Friendly: "Zone"}, 260 StringColumnDefinition{Prop: properties.Zone, Friendly: "HostedZone"}, 261 StringColumnDefinition{Prop: properties.Class}, 262 ColoredValueColumnDefinition{ 263 StringColumnDefinition: StringColumnDefinition{Prop: properties.State}, 264 ColoredValues: map[string]color.Attribute{"available": color.FgGreen}}, 265 StorageColumnDefinition{Unit: gb, StringColumnDefinition: StringColumnDefinition{Prop: properties.Storage}}, 266 StringColumnDefinition{Prop: properties.Port}, 267 StringColumnDefinition{Prop: properties.Username}, 268 ColoredValueColumnDefinition{ 269 StringColumnDefinition: StringColumnDefinition{Prop: properties.Public}, 270 ColoredValues: map[string]color.Attribute{"true": color.FgYellow}}, 271 StringColumnDefinition{Prop: properties.ReplicaOf, Friendly: "Replica Of"}, 272 StringColumnDefinition{Prop: properties.Engine}, 273 StringColumnDefinition{Prop: properties.EngineVersion, Friendly: "Version"}, 274 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created, Friendly: "Created"}}, 275 }, 276 cloud.DbSubnetGroup: { 277 StringColumnDefinition{Prop: properties.ID}, 278 StringColumnDefinition{Prop: properties.State, Friendly: "Status"}, 279 StringColumnDefinition{Prop: properties.Vpc}, 280 StringColumnDefinition{Prop: properties.Subnets}, 281 StringColumnDefinition{Prop: properties.Description}, 282 }, 283 //Autoscaling 284 cloud.LaunchConfiguration: { 285 StringColumnDefinition{Prop: properties.Name}, 286 StringColumnDefinition{Prop: properties.Type}, 287 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 288 StringColumnDefinition{Prop: properties.KeyPair}, 289 }, 290 cloud.ScalingGroup: { 291 StringColumnDefinition{Prop: properties.Name}, 292 StringColumnDefinition{Prop: properties.LaunchConfigurationName, Friendly: "LaunchConfiguration"}, 293 StringColumnDefinition{Prop: properties.DesiredCapacity}, 294 StringColumnDefinition{Prop: properties.State}, 295 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 296 StringColumnDefinition{Prop: properties.NewInstancesProtected}, 297 }, 298 cloud.ScalingPolicy: { 299 StringColumnDefinition{Prop: properties.Name}, 300 StringColumnDefinition{Prop: properties.Type}, 301 StringColumnDefinition{Prop: properties.ScalingGroupName}, 302 StringColumnDefinition{Prop: properties.AlarmNames}, 303 StringColumnDefinition{Prop: properties.AdjustmentType}, 304 StringColumnDefinition{Prop: properties.ScalingAdjustment}, 305 }, 306 //Containers 307 cloud.Repository: { 308 StringColumnDefinition{Prop: properties.Name}, 309 StringColumnDefinition{Prop: properties.URI}, 310 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 311 StringColumnDefinition{Prop: properties.Account}, 312 StringColumnDefinition{Prop: properties.Arn}, 313 }, 314 cloud.ContainerCluster: { 315 StringColumnDefinition{Prop: properties.Name}, 316 StringColumnDefinition{Prop: properties.State}, 317 StringColumnDefinition{Prop: properties.ActiveServicesCount, Friendly: "ActiveServices"}, 318 StringColumnDefinition{Prop: properties.PendingTasksCount, Friendly: "PendingTasks"}, 319 StringColumnDefinition{Prop: properties.RegisteredContainerInstancesCount, Friendly: "RegisteredContainerInstances"}, 320 StringColumnDefinition{Prop: properties.RunningTasksCount, Friendly: "RunningTasks"}, 321 }, 322 cloud.ContainerTask: { 323 StringColumnDefinition{Prop: properties.Name}, 324 StringColumnDefinition{Prop: properties.Version}, 325 StringColumnDefinition{Prop: properties.State}, 326 KeyValuesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.ContainersImages}}, 327 KeyValuesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Deployments}}, 328 }, 329 cloud.Container: { 330 StringColumnDefinition{Prop: properties.Name}, 331 StringColumnDefinition{Prop: properties.DeploymentName}, 332 StringColumnDefinition{Prop: properties.State}, 333 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 334 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Launched}}, 335 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Stopped}}, 336 ARNLastValueColumnDefinition{Separator: "/", StringColumnDefinition: StringColumnDefinition{Prop: properties.Cluster}}, 337 ARNLastValueColumnDefinition{Separator: "/", StringColumnDefinition: StringColumnDefinition{Prop: properties.ContainerTask}}, 338 }, 339 cloud.ContainerInstance: { 340 StringColumnDefinition{Prop: properties.ID}, 341 StringColumnDefinition{Prop: properties.Instance}, 342 ARNLastValueColumnDefinition{Separator: "/", StringColumnDefinition: StringColumnDefinition{Prop: properties.Cluster}}, 343 StringColumnDefinition{Prop: properties.State}, 344 StringColumnDefinition{Prop: properties.RunningTasksCount, Friendly: "RunningTasks"}, 345 StringColumnDefinition{Prop: properties.PendingTasksCount, Friendly: "PendingTasks"}, 346 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 347 StringColumnDefinition{Prop: properties.AgentConnected}, 348 }, 349 //ACM 350 cloud.Certificate: { 351 StringColumnDefinition{Prop: properties.Arn}, 352 StringColumnDefinition{Prop: properties.Name}, 353 }, 354 //IAM 355 cloud.User: { 356 StringColumnDefinition{Prop: properties.ID}, 357 StringColumnDefinition{Prop: properties.Name}, 358 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.PasswordLastUsed, Friendly: "PasswordLastUsed"}}, 359 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 360 }, 361 cloud.Role: { 362 StringColumnDefinition{Prop: properties.ID}, 363 StringColumnDefinition{Prop: properties.Name}, 364 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 365 }, 366 cloud.InstanceProfile: { 367 StringColumnDefinition{Prop: properties.ID}, 368 StringColumnDefinition{Prop: properties.Name}, 369 StringColumnDefinition{Prop: properties.Path}, 370 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 371 }, 372 cloud.Policy: { 373 StringColumnDefinition{Prop: properties.ID}, 374 StringColumnDefinition{Prop: properties.Name}, 375 StringColumnDefinition{Prop: properties.Type}, 376 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 377 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Updated, Friendly: "Updated"}}, 378 ColoredValueColumnDefinition{ 379 StringColumnDefinition: StringColumnDefinition{Prop: properties.Attached}, 380 ColoredValues: map[string]color.Attribute{"false": color.FgYellow}, 381 }, 382 }, 383 cloud.Group: { 384 StringColumnDefinition{Prop: properties.ID}, 385 StringColumnDefinition{Prop: properties.Name}, 386 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 387 }, 388 cloud.AccessKey: { 389 StringColumnDefinition{Prop: properties.ID}, 390 StringColumnDefinition{Prop: properties.State}, 391 StringColumnDefinition{Prop: properties.Username}, 392 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 393 }, 394 cloud.MFADevice: { 395 StringColumnDefinition{Prop: properties.ID}, 396 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.AttachedAt}}, 397 }, 398 // S3 399 cloud.Bucket: { 400 StringColumnDefinition{Prop: properties.ID}, 401 GrantsColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Grants}}, 402 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 403 }, 404 cloud.S3Object: { 405 StringColumnDefinition{Prop: properties.ID, Friendly: "Name"}, 406 StringColumnDefinition{Prop: properties.Bucket, Friendly: "Bucket"}, 407 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Modified, Friendly: "Modified"}}, 408 StringColumnDefinition{Prop: properties.Owner}, 409 StorageColumnDefinition{Unit: b, StringColumnDefinition: StringColumnDefinition{Prop: properties.Size}}, 410 StringColumnDefinition{Prop: properties.Class}, 411 }, 412 //Notification 413 cloud.Subscription: { 414 StringColumnDefinition{Prop: properties.Arn}, 415 StringColumnDefinition{Prop: properties.Topic}, 416 StringColumnDefinition{Prop: properties.Endpoint}, 417 StringColumnDefinition{Prop: properties.Protocol}, 418 StringColumnDefinition{Prop: properties.Owner}, 419 }, 420 cloud.Topic: { 421 StringColumnDefinition{Prop: properties.ID}, 422 }, 423 //Queue 424 cloud.Queue: { 425 StringColumnDefinition{Prop: properties.ID, Friendly: "URL"}, 426 StringColumnDefinition{Prop: properties.ApproximateMessageCount, Friendly: "~NbMsg"}, 427 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 428 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Modified, Friendly: "LastModif"}}, 429 StringColumnDefinition{Prop: properties.Delay, Friendly: "Delay(s)"}, 430 }, 431 // DNS 432 cloud.Zone: { 433 StringColumnDefinition{Prop: properties.ID}, 434 StringColumnDefinition{Prop: properties.Name}, 435 StringColumnDefinition{Prop: properties.Comment}, 436 StringColumnDefinition{Prop: properties.Private, Friendly: "Private"}, 437 StringColumnDefinition{Prop: properties.RecordCount, Friendly: "Nb Records"}, 438 StringColumnDefinition{Prop: properties.CallerReference}, 439 }, 440 cloud.Record: { 441 StringColumnDefinition{Prop: properties.ID, Friendly: "AwlessId"}, 442 StringColumnDefinition{Prop: properties.Type}, 443 StringColumnDefinition{Prop: properties.Name}, 444 SliceColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Records}}, 445 StringColumnDefinition{Prop: properties.Zone}, 446 StringColumnDefinition{Prop: properties.Alias}, 447 StringColumnDefinition{Prop: properties.TTL}, 448 }, 449 // Lamba 450 cloud.Function: { 451 StringColumnDefinition{Prop: properties.Name}, 452 StorageColumnDefinition{Unit: b, StringColumnDefinition: StringColumnDefinition{Prop: properties.Size}}, 453 StorageColumnDefinition{Unit: mb, StringColumnDefinition: StringColumnDefinition{Prop: properties.Memory}}, 454 StringColumnDefinition{Prop: properties.Runtime}, 455 StringColumnDefinition{Prop: properties.Version}, 456 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Modified}}, 457 StringColumnDefinition{Prop: properties.Description}, 458 }, 459 //Monitoring 460 cloud.Metric: { 461 StringColumnDefinition{Prop: properties.ID}, 462 StringColumnDefinition{Prop: properties.Name}, 463 StringColumnDefinition{Prop: properties.Namespace}, 464 KeyValuesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Dimensions}}, 465 }, 466 cloud.Alarm: { 467 StringColumnDefinition{Prop: properties.Name}, 468 StringColumnDefinition{Prop: properties.Namespace}, 469 StringColumnDefinition{Prop: properties.MetricName}, 470 StringColumnDefinition{Prop: properties.Description}, 471 StringColumnDefinition{Prop: properties.State}, 472 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Updated}}, 473 KeyValuesColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Dimensions}}, 474 }, 475 //CDN 476 cloud.Distribution: { 477 StringColumnDefinition{Prop: properties.ID}, 478 StringColumnDefinition{Prop: properties.PublicDNS}, 479 StringColumnDefinition{Prop: properties.Enabled}, 480 StringColumnDefinition{Prop: properties.State}, 481 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Modified}}, 482 SliceColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Aliases}}, 483 StringColumnDefinition{Prop: properties.SSLSupportMethod}, 484 SliceColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Origins}}, 485 }, 486 //Cloudformation 487 cloud.Stack: { 488 StringColumnDefinition{Prop: properties.ID}, 489 StringColumnDefinition{Prop: properties.Name}, 490 StringColumnDefinition{Prop: properties.State}, 491 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Created}}, 492 TimeColumnDefinition{StringColumnDefinition: StringColumnDefinition{Prop: properties.Modified}}, 493 }, 494} 495