Skip to content

Commit 77e009a

Browse files
committed
describe resources recursively
1 parent 50822dc commit 77e009a

File tree

1 file changed

+27
-19
lines changed

1 file changed

+27
-19
lines changed

internal/cmd/firewall/describe.go

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package firewall
22

33
import (
4+
"fmt"
45
"net"
6+
"strings"
57

68
"github.com/dustin/go-humanize"
79
"github.com/spf13/cobra"
@@ -71,26 +73,32 @@ var DescribeCmd = base.DescribeCmd[*hcloud.Firewall]{
7173
if len(firewall.AppliedTo) == 0 {
7274
cmd.Print(" Not applied\n")
7375
} else {
74-
for _, resource := range firewall.AppliedTo {
75-
cmd.Printf(" - Type:\t\t%s\n", resource.Type)
76-
switch resource.Type {
77-
case hcloud.FirewallResourceTypeServer:
78-
cmd.Printf(" Server ID:\t\t%d\n", resource.Server.ID)
79-
cmd.Printf(" Server Name:\t%s\n", s.Client().Server().ServerName(resource.Server.ID))
80-
case hcloud.FirewallResourceTypeLabelSelector:
81-
cmd.Printf(" Label Selector:\t%s\n", resource.LabelSelector.Selector)
82-
if len(resource.AppliedToResources) > 0 {
83-
cmd.Printf(" Applied to resources:\n")
84-
for _, appliedTo := range resource.AppliedToResources {
85-
switch appliedTo.Type {
86-
case hcloud.FirewallResourceTypeServer:
87-
cmd.Printf(" Server %d\n", appliedTo.Server.ID)
88-
}
89-
}
90-
}
91-
}
92-
}
76+
cmd.Print(describeResources(s, firewall.AppliedTo))
9377
}
9478
return nil
9579
},
9680
}
81+
82+
func describeResources(s state.State, resources []hcloud.FirewallResource) string {
83+
var sb strings.Builder
84+
85+
for _, resource := range resources {
86+
sb.WriteString(fmt.Sprintf(" - Type:\t\t%s\n", resource.Type))
87+
88+
switch resource.Type {
89+
case hcloud.FirewallResourceTypeServer:
90+
sb.WriteString(fmt.Sprintf(" Server ID:\t\t%d\n", resource.Server.ID))
91+
sb.WriteString(fmt.Sprintf(" Server Name:\t%s\n", s.Client().Server().ServerName(resource.Server.ID)))
92+
93+
case hcloud.FirewallResourceTypeLabelSelector:
94+
sb.WriteString(fmt.Sprintf(" Label Selector:\t%s\n", resource.LabelSelector.Selector))
95+
if len(resource.AppliedToResources) > 0 {
96+
sb.WriteString(fmt.Sprintf(" Applied to resources:\n"))
97+
substr := describeResources(s, resource.AppliedToResources)
98+
sb.WriteString(util.PrefixLines(substr, " "))
99+
}
100+
}
101+
}
102+
103+
return sb.String()
104+
}

0 commit comments

Comments
 (0)