4
4
"strconv"
5
5
"strings"
6
6
7
+ "github.com/hetznercloud/hcloud-go/hcloud/schema"
8
+
7
9
"github.com/hetznercloud/hcloud-go/hcloud"
8
10
"github.com/spf13/cobra"
9
11
)
@@ -27,7 +29,7 @@ func newServerListCommand(cli *CLI) *cobra.Command {
27
29
PreRunE : cli .ensureToken ,
28
30
RunE : cli .wrap (runServerList ),
29
31
}
30
- addOutputFlag (cmd , outputOptionNoHeader (), outputOptionColumns (serverListTableOutput .Columns ()))
32
+ addOutputFlag (cmd , outputOptionNoHeader (), outputOptionColumns (serverListTableOutput .Columns ()), outputOptionJSON () )
31
33
cmd .Flags ().StringP ("selector" , "l" , "" , "Selector to filter by labels" )
32
34
return cmd
33
35
}
@@ -47,6 +49,62 @@ func runServerList(cli *CLI, cmd *cobra.Command, args []string) error {
47
49
return err
48
50
}
49
51
52
+ if outOpts .IsSet ("json" ) {
53
+ var serversSchema []schema.Server
54
+ for _ , server := range servers {
55
+ serverSchema := schema.Server {
56
+ ID : server .ID ,
57
+ Name : server .Name ,
58
+ Status : string (server .Status ),
59
+ Created : server .Created ,
60
+ Datacenter : datacenterToSchema (* server .Datacenter ),
61
+ ServerType : serverTypeToSchema (* server .ServerType ),
62
+ PublicNet : schema.ServerPublicNet {
63
+ IPv4 : schema.ServerPublicNetIPv4 {
64
+ IP : server .PublicNet .IPv4 .IP .String (),
65
+ Blocked : server .PublicNet .IPv4 .Blocked ,
66
+ DNSPtr : server .PublicNet .IPv4 .DNSPtr ,
67
+ },
68
+ IPv6 : schema.ServerPublicNetIPv6 {
69
+ IP : server .PublicNet .IPv6 .IP .String (),
70
+ Blocked : server .PublicNet .IPv6 .Blocked ,
71
+ },
72
+ },
73
+ RescueEnabled : server .RescueEnabled ,
74
+ BackupWindow : hcloud .String (server .BackupWindow ),
75
+ OutgoingTraffic : & server .OutgoingTraffic ,
76
+ IngoingTraffic : & server .IngoingTraffic ,
77
+ IncludedTraffic : server .IncludedTraffic ,
78
+ Protection : schema.ServerProtection {
79
+ Delete : server .Protection .Delete ,
80
+ Rebuild : server .Protection .Rebuild ,
81
+ },
82
+ }
83
+ if server .Image != nil {
84
+ serverImage := imageToSchema (* server .Image )
85
+ serverSchema .Image = & serverImage
86
+ }
87
+ if server .ISO != nil {
88
+ serverISO := isoToSchema (* server .ISO )
89
+ serverSchema .ISO = & serverISO
90
+ }
91
+ for ip , dnsPTR := range server .PublicNet .IPv6 .DNSPtr {
92
+ serverSchema .PublicNet .IPv6 .DNSPtr = append (serverSchema .PublicNet .IPv6 .DNSPtr , schema.ServerPublicNetIPv6DNSPtr {
93
+ IP : ip ,
94
+ DNSPtr : dnsPTR ,
95
+ })
96
+ }
97
+ for _ , floatingIP := range server .PublicNet .FloatingIPs {
98
+ serverSchema .PublicNet .FloatingIPs = append (serverSchema .PublicNet .FloatingIPs , floatingIP .ID )
99
+ }
100
+ for _ , volume := range server .Volumes {
101
+ serverSchema .Volumes = append (serverSchema .Volumes , volume .ID )
102
+ }
103
+ serversSchema = append (serversSchema , serverSchema )
104
+ }
105
+ return describeJSON (serversSchema )
106
+ }
107
+
50
108
cols := []string {"id" , "name" , "status" , "ipv4" , "ipv6" , "datacenter" }
51
109
if outOpts .IsSet ("columns" ) {
52
110
cols = outOpts ["columns" ]
0 commit comments