Skip to content

Commit

Permalink
display IPv6 addresses in container details and networks views (#208)
Browse files Browse the repository at this point in the history
  • Loading branch information
xmirakulix authored Mar 13, 2024
1 parent dedaca9 commit db0aded
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 10 deletions.
6 changes: 6 additions & 0 deletions appui/container.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,14 +30,20 @@ func NewContainerInfo(container *docker.Container) (string, int) {
}
var networkNames []string
var networkIps []string
var networkIpv6s []string
for k, v := range container.Container.NetworkSettings.Networks {
networkNames = append(networkNames, ui.Blue("Network Name: "))
networkNames = append(networkNames, ui.Yellow(k))
networkIps = append(networkIps, ui.Blue("\tIP Address:"))
networkIps = append(networkIps, ui.Yellow(v.IPAddress))
if v.GlobalIPv6Address != "" {
networkIpv6s = append(networkIpv6s, ui.Blue("\tIPv6 Address:"))
networkIpv6s = append(networkIpv6s, ui.Yellow(v.GlobalIPv6Address + "/" + strconv.Itoa(v.GlobalIPv6PrefixLen)))
}
}
data = append(data, networkNames)
data = append(data, networkIps)
data = append(data, networkIpv6s)

data = append(data, []string{ui.Blue("Labels"), ui.Yellow(
strconv.Itoa(len(container.Labels)))})
Expand Down
4 changes: 2 additions & 2 deletions appui/networks.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ var networkTableHeaders = []SortableColumnHeader{
{`CONTAINERS`, SortMode(docker.SortNetworksByContainerCount)},
{`SERVICES`, SortMode(docker.SortNetworksByServiceCount)},
{`SCOPE`, SortMode(docker.NoSortNetworks)},
{`SUBNET`, SortMode(docker.SortNetworksBySubnet)},
{`GATEWAY`, SortMode(docker.NoSortNetworks)},
{`SUBNETS`, SortMode(docker.SortNetworksBySubnet)},
{`GATEWAYS`, SortMode(docker.NoSortNetworks)},
}

// DockerNetworksWidget knows how render a container list
Expand Down
31 changes: 23 additions & 8 deletions docker/formatter/network_formatter.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package formatter

import (
"sort"
"strconv"
"strings"

Expand All @@ -15,8 +16,8 @@ const (
numberOfContainers = "NUMBER OF CONTAINERS"
numberOfServices = "NUMBER OF SERVICES"
scope = "SCOPE"
subnet = "SUBNET"
gateway = "GATEWAY"
subnet = "SUBNETS"
gateway = "GATEWAYS"
)

// NetworkFormatter knows how to pretty-print the information of an network
Expand Down Expand Up @@ -86,17 +87,31 @@ func (formatter *NetworkFormatter) Scope() string {
// Subnet prettifies the network subnet
func (formatter *NetworkFormatter) Subnet() string {
formatter.addHeader(subnet)
if len(formatter.network.IPAM.Config) > 0 {
return formatter.network.IPAM.Config[0].Subnet
var subnets []string
for _, config := range formatter.network.IPAM.Config {
if config.Subnet != "" {
subnets = append(subnets, config.Subnet)
}
}
return ""
// display IPv4 subnets first
sort.Slice(subnets, func(i, j int) bool {
return strings.Contains(subnets[i], ".")
})
return strings.Join(subnets, ", ")
}

// Gateway prettifies the network gateway
func (formatter *NetworkFormatter) Gateway() string {
formatter.addHeader(gateway)
if len(formatter.network.IPAM.Config) > 0 {
return formatter.network.IPAM.Config[0].Gateway
var gateways []string
for _, config := range formatter.network.IPAM.Config {
if config.Gateway != "" {
gateways = append(gateways, config.Gateway)
}
}
return ""
// display IPv4 gateways first
sort.Slice(gateways, func(i, j int) bool {
return strings.Contains(gateways[i], ".")
})
return strings.Join(gateways, ", ")
}

0 comments on commit db0aded

Please sign in to comment.