package net import ( "fmt" "net" v1 "k8s.io/api/core/v1" ) const ( IPAnnotation = "projectcalico.org/IPv4Address" ) // Parses list of nodes and returns their ips func ParseNodeIPs(nodes ...v1.Node) ([]*net.IP, error) { ips := make([]*net.IP, 0, len(nodes)) for _, node := range nodes { ip, _, err := getNodeCIDRFromAnnotation(node) if err != nil { return nil, err } ips = append(ips, &ip) } return ips, nil } // Parses list of nodes and returns their ips in cidr notation func ParseNodeCIDRs(nodes ...v1.Node) ([]*net.IPNet, error) { networksToIgnore := make([]*net.IPNet, 0, len(nodes)) for _, node := range nodes { _, ipNet, err := getNodeCIDRFromAnnotation(node) if err != nil { return nil, err } networksToIgnore = append(networksToIgnore, ipNet) } return networksToIgnore, nil } func getNodeCIDRFromAnnotation(node v1.Node) (net.IP, *net.IPNet, error) { nodeCIDR, ok := node.ObjectMeta.Annotations[IPAnnotation] if !ok { return nil, nil, fmt.Errorf("could not find node ip address via %s annotation for node %s", IPAnnotation, node.ObjectMeta.Name) } return net.ParseCIDR(nodeCIDR) }