github.com/scaleway/scaleway-cli@v1.11.1/pkg/commands/info.go (about) 1 // Copyright (C) 2015 Scaleway. All rights reserved. 2 // Use of this source code is governed by a MIT-style 3 // license that can be found in the LICENSE.md file. 4 5 package commands 6 7 import ( 8 "fmt" 9 "os" 10 "runtime" 11 12 "github.com/kardianos/osext" 13 14 "github.com/scaleway/scaleway-cli/pkg/api" 15 "github.com/scaleway/scaleway-cli/pkg/config" 16 ) 17 18 // InfoArgs are flags for the `RunInfo` function 19 type InfoArgs struct{} 20 21 // RunInfo is the handler for 'scw info' 22 func RunInfo(ctx CommandContext, args InfoArgs) error { 23 // FIXME: fmt.Fprintf(ctx.Stdout, "Servers: %s\n", "quantity") 24 // FIXME: fmt.Fprintf(ctx.Stdout, "Images: %s\n", "quantity") 25 fmt.Fprintf(ctx.Stdout, "Debug mode (client):\t%v\n", ctx.Getenv("DEBUG") != "") 26 27 fmt.Fprintf(ctx.Stdout, "Organization:\t\t%s\n", ctx.API.Organization) 28 // FIXME: add partially-masked token 29 configPath, _ := config.GetConfigFilePath() 30 fmt.Fprintf(ctx.Stdout, "RC file:\t\t%s\n", configPath) 31 fmt.Fprintf(ctx.Stdout, "User:\t\t\t%s\n", ctx.Getenv("USER")) 32 fmt.Fprintf(ctx.Stdout, "CPUs:\t\t\t%d\n", runtime.NumCPU()) 33 hostname, _ := os.Hostname() 34 fmt.Fprintf(ctx.Stdout, "Hostname:\t\t%s\n", hostname) 35 cliPath, _ := osext.Executable() 36 fmt.Fprintf(ctx.Stdout, "CLI Path:\t\t%s\n", cliPath) 37 38 fmt.Fprintln(ctx.Stdout, "") 39 fmt.Fprintf(ctx.Stdout, "Cache:\t\t\t%s\n", ctx.API.Cache.Path) 40 fmt.Fprintf(ctx.Stdout, " Servers:\t\t%d\n", ctx.API.Cache.GetNbServers()) 41 fmt.Fprintf(ctx.Stdout, " Images:\t\t%d\n", ctx.API.Cache.GetNbImages()) 42 fmt.Fprintf(ctx.Stdout, " Snapshots:\t\t%d\n", ctx.API.Cache.GetNbSnapshots()) 43 fmt.Fprintf(ctx.Stdout, " Volumes:\t\t%d\n", ctx.API.Cache.GetNbVolumes()) 44 fmt.Fprintf(ctx.Stdout, " Bootscripts:\t\t%d\n", ctx.API.Cache.GetNbBootscripts()) 45 46 user, err := ctx.API.GetUser() 47 if err != nil { 48 return fmt.Errorf("Unable to get your SSH Keys") 49 } 50 51 if len(user.SSHPublicKeys) == 0 { 52 fmt.Fprintln(ctx.Stdout, "You have no ssh keys") 53 } else { 54 fmt.Fprintln(ctx.Stdout, "") 55 fmt.Fprintln(ctx.Stdout, "SSH Keys:") 56 for id, key := range user.SSHPublicKeys { 57 fmt.Fprintf(ctx.Stdout, " [%d] %s\n", id, key.Fingerprint) 58 } 59 fmt.Fprintf(ctx.Stdout, "\n") 60 } 61 62 dashboard, err := ctx.API.GetDashboard() 63 if err != nil { 64 return fmt.Errorf("Unable to get your dashboard") 65 } 66 fmt.Fprintln(ctx.Stdout, "Dashboard:") 67 fmt.Fprintf(ctx.Stdout, " Volumes:\t\t%d\n", dashboard.VolumesCount) 68 fmt.Fprintf(ctx.Stdout, " Running servers:\t%d\n", dashboard.RunningServersCount) 69 fmt.Fprintf(ctx.Stdout, " Images:\t\t%d\n", dashboard.ImagesCount) 70 fmt.Fprintf(ctx.Stdout, " Snapshots:\t\t%d\n", dashboard.SnapshotsCount) 71 fmt.Fprintf(ctx.Stdout, " Servers:\t\t%d\n", dashboard.ServersCount) 72 fmt.Fprintf(ctx.Stdout, " Ips:\t\t\t%d\n", dashboard.IPsCount) 73 74 fmt.Fprintf(ctx.Stdout, "\n") 75 permissions, err := ctx.API.GetPermissions() 76 if err != nil { 77 return fmt.Errorf("Unable to get your permisssions") 78 } 79 fmt.Fprintln(ctx.Stdout, "Permissions:") 80 for _, service := range permissions.Permissions { 81 for key, serviceName := range service { 82 fmt.Fprintf(ctx.Stdout, " %s\n", key) 83 for _, perm := range serviceName { 84 fmt.Fprintf(ctx.Stdout, " %s\n", perm) 85 } 86 } 87 } 88 fmt.Fprintf(ctx.Stdout, "\n") 89 quotas, err := ctx.API.GetQuotas() 90 if err != nil { 91 return fmt.Errorf("Unable to get your quotas") 92 } 93 fmt.Fprintln(ctx.Stdout, "Quotas:") 94 for key, value := range quotas.Quotas { 95 fmt.Fprintf(ctx.Stdout, " %-20s: %d\n", key, value) 96 } 97 fmt.Fprintf(ctx.Stdout, "\n") 98 fmt.Fprintln(ctx.Stdout, "Urls:") 99 // TODO: add endpoint API by region 100 fmt.Fprintf(ctx.Stdout, " account: %s\n", api.AccountAPI) 101 fmt.Fprintf(ctx.Stdout, " metadata: %s\n", api.MetadataAPI) 102 fmt.Fprintf(ctx.Stdout, " marketplace: %s\n", api.MarketplaceAPI) 103 return nil 104 }