@@ -25,6 +25,7 @@ import (
2525 ocp_config "github.com/openshift/api/config/v1"
2626 "gopkg.in/yaml.v3"
2727 corev1 "k8s.io/api/core/v1"
28+ k8serrors "k8s.io/apimachinery/pkg/api/errors"
2829 "k8s.io/apimachinery/pkg/types"
2930 k8s_utils "k8s.io/utils/net"
3031)
@@ -52,31 +53,80 @@ func IsFipsCluster(ctx context.Context, h *helper.Helper) (bool, error) {
5253}
5354
5455// HasIPv6ClusterNetwork - Check if OCP has an IPv6 cluster network
56+ // Falls back to checking Node PodCIDR and kubernetes service IP families for MicroShift
5557func HasIPv6ClusterNetwork (ctx context.Context , h * helper.Helper ) (bool , error ) {
5658 networkConfig := & ocp_config.Network {}
5759 err := h .GetClient ().Get (ctx , types.NamespacedName {Name : "cluster" , Namespace : "" }, networkConfig )
60+ if err == nil {
61+ // OCP Network config available
62+ for _ , clusterNetwork := range networkConfig .Status .ClusterNetwork {
63+ if k8s_utils .IsIPv6CIDRString (clusterNetwork .CIDR ) {
64+ return true , nil
65+ }
66+ }
67+ return false , nil
68+ }
69+
70+ // Fallback for MicroShift: check if error is NotFound
71+ if ! k8serrors .IsNotFound (err ) {
72+ return false , err
73+ }
74+
75+ // Check Node PodCIDR
76+ nodeList := & corev1.NodeList {}
77+ err = h .GetClient ().List (ctx , nodeList )
5878 if err != nil {
5979 return false , err
6080 }
6181
62- for _ , clusterNetwork := range networkConfig . Status . ClusterNetwork {
63- if k8s_utils .IsIPv6CIDRString (clusterNetwork . CIDR ) {
82+ for _ , node := range nodeList . Items {
83+ if node . Spec . PodCIDR != "" && k8s_utils .IsIPv6CIDRString (node . Spec . PodCIDR ) {
6484 return true , nil
6585 }
86+ for _ , podCIDR := range node .Spec .PodCIDRs {
87+ if k8s_utils .IsIPv6CIDRString (podCIDR ) {
88+ return true , nil
89+ }
90+ }
6691 }
92+
6793 return false , nil
6894}
6995
7096// FirstClusterNetworkIsIPv6 - Check if first OCP cluster network is IPv6
97+ // Falls back to checking first Node PodCIDR and kubernetes service IP families for MicroShift
7198func FirstClusterNetworkIsIPv6 (ctx context.Context , h * helper.Helper ) (bool , error ) {
7299 networkConfig := & ocp_config.Network {}
73100 err := h .GetClient ().Get (ctx , types.NamespacedName {Name : "cluster" , Namespace : "" }, networkConfig )
101+ if err == nil {
102+ // OCP Network config available
103+ for _ , clusterNetwork := range networkConfig .Status .ClusterNetwork {
104+ return k8s_utils .IsIPv6CIDRString (clusterNetwork .CIDR ), nil
105+ }
106+ return false , nil
107+ }
108+
109+ // Fallback for MicroShift: check if error is NotFound
110+ if ! k8serrors .IsNotFound (err ) {
111+ return false , err
112+ }
113+
114+ // Check first Node PodCIDR
115+ nodeList := & corev1.NodeList {}
116+ err = h .GetClient ().List (ctx , nodeList )
74117 if err != nil {
75118 return false , err
76119 }
77120
78- for _ , clusterNetwork := range networkConfig .Status .ClusterNetwork {
79- return k8s_utils .IsIPv6CIDRString (clusterNetwork .CIDR ), nil
121+ if len (nodeList .Items ) > 0 {
122+ node := nodeList .Items [0 ]
123+ if node .Spec .PodCIDR != "" {
124+ return k8s_utils .IsIPv6CIDRString (node .Spec .PodCIDR ), nil
125+ }
126+ if len (node .Spec .PodCIDRs ) > 0 {
127+ return k8s_utils .IsIPv6CIDRString (node .Spec .PodCIDRs [0 ]), nil
128+ }
80129 }
130+
81131 return false , nil
82132}
0 commit comments