|
1 | 1 | package firewall |
2 | 2 |
|
3 | 3 | import ( |
| 4 | + "fmt" |
4 | 5 | "net" |
| 6 | + "strings" |
5 | 7 |
|
6 | 8 | "github.com/dustin/go-humanize" |
7 | 9 | "github.com/spf13/cobra" |
@@ -71,26 +73,32 @@ var DescribeCmd = base.DescribeCmd[*hcloud.Firewall]{ |
71 | 73 | if len(firewall.AppliedTo) == 0 { |
72 | 74 | cmd.Print(" Not applied\n") |
73 | 75 | } 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)) |
93 | 77 | } |
94 | 78 | return nil |
95 | 79 | }, |
96 | 80 | } |
| 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