1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
|
package primaryip
import (
"context"
"fmt"
"strings"
"time"
"github.com/spf13/pflag"
"github.com/hetznercloud/cli/internal/cmd/base"
"github.com/hetznercloud/cli/internal/cmd/output"
"github.com/hetznercloud/cli/internal/cmd/util"
"github.com/hetznercloud/cli/internal/hcapi2"
"github.com/hetznercloud/hcloud-go/v2/hcloud"
"github.com/hetznercloud/hcloud-go/v2/hcloud/schema"
)
var ListCmd = base.ListCmd{
ResourceNamePlural: "Primary IPs",
JSONKeyGetByName: "primary_ips",
DefaultColumns: []string{"id", "type", "name", "ip", "assignee", "dns", "auto_delete", "age"},
Fetch: func(ctx context.Context, client hcapi2.Client, _ *pflag.FlagSet, listOpts hcloud.ListOpts, sorts []string) ([]interface{}, error) {
opts := hcloud.PrimaryIPListOpts{ListOpts: listOpts}
if len(sorts) > 0 {
opts.Sort = sorts
}
primaryips, err := client.PrimaryIP().AllWithOpts(ctx, opts)
var resources []interface{}
for _, n := range primaryips {
resources = append(resources, n)
}
return resources, err
},
OutputTable: func(client hcapi2.Client) *output.Table {
return output.NewTable().
AddAllowedFields(hcloud.PrimaryIP{}).
AddFieldFn("dns", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
var dns string
if len(primaryIP.DNSPtr) == 1 {
for _, v := range primaryIP.DNSPtr {
dns = v
}
}
if len(primaryIP.DNSPtr) > 1 {
dns = fmt.Sprintf("%d entries", len(primaryIP.DNSPtr))
}
return util.NA(dns)
})).
AddFieldFn("assignee", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
assignee := ""
if primaryIP.AssigneeID != 0 {
switch primaryIP.AssigneeType {
case "server":
assignee = fmt.Sprintf("Server %s", client.Server().ServerName(primaryIP.AssigneeID))
}
}
return util.NA(assignee)
})).
AddFieldFn("protection", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
var protection []string
if primaryIP.Protection.Delete {
protection = append(protection, "delete")
}
return strings.Join(protection, ", ")
})).
AddFieldFn("auto_delete", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
return util.YesNo(primaryIP.AutoDelete)
})).
AddFieldFn("labels", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
return util.LabelsToString(primaryIP.Labels)
})).
AddFieldFn("created", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
return util.Datetime(primaryIP.Created)
})).
AddFieldFn("age", output.FieldFn(func(obj interface{}) string {
primaryIP := obj.(*hcloud.PrimaryIP)
return util.Age(primaryIP.Created, time.Now())
}))
},
JSONSchema: func(resources []interface{}) interface{} {
primaryIPsSchema := make([]schema.PrimaryIP, 0, len(resources))
for _, resource := range resources {
primaryIP := resource.(*hcloud.PrimaryIP)
var dnsPtrs []hcloud.PrimaryIPDNSPTR
for i, d := range primaryIP.DNSPtr {
dnsPtrs = append(dnsPtrs, hcloud.PrimaryIPDNSPTR{
DNSPtr: d,
IP: i,
})
}
var primaryIPSchema = schema.PrimaryIP{
ID: primaryIP.ID,
Name: primaryIP.Name,
IP: primaryIP.IP.String(),
Type: string(primaryIP.Type),
AssigneeID: primaryIP.AssigneeID,
AssigneeType: primaryIP.AssigneeType,
AutoDelete: primaryIP.AutoDelete,
Created: primaryIP.Created,
Datacenter: util.DatacenterToSchema(*primaryIP.Datacenter),
Protection: schema.PrimaryIPProtection{
Delete: primaryIP.Protection.Delete,
},
Labels: primaryIP.Labels,
}
primaryIPsSchema = append(primaryIPsSchema, primaryIPSchema)
}
return primaryIPsSchema
},
}
|