// Check is part of the Diagnostic interface; it runs the actual diagnostic logic func (d CheckServiceNetwork) Check() types.DiagnosticResult { d.res = types.NewDiagnosticResult(CheckServiceNetworkName) pluginName, ok, err := util.GetOpenShiftNetworkPlugin(d.OSClient) if err != nil { d.res.Error("DSvcNet1001", err, fmt.Sprintf("Checking network plugin failed. Error: %s", err)) return d.res } if !ok { d.res.Warn("DSvcNet1002", nil, "Skipping service connectivity test. Reason: Not using openshift network plugin.") return d.res } services, err := getAllServices(d.KubeClient) if err != nil { d.res.Error("DSvcNet1003", err, fmt.Sprintf("Getting all services failed. Error: %s", err)) return d.res } if len(services) == 0 { d.res.Warn("DSvcNet1004", nil, "Skipping service connectivity test. Reason: No services found.") return d.res } localPods, _, err := util.GetLocalAndNonLocalDiagnosticPods(d.KubeClient) if err != nil { d.res.Error("DSvcNet1005", err, fmt.Sprintf("Getting local and nonlocal pods failed. Error: %s", err)) return d.res } if sdnapi.IsOpenShiftMultitenantNetworkPlugin(pluginName) { netnsList, err := d.OSClient.NetNamespaces().List(kapi.ListOptions{}) if err != nil { d.res.Error("DSvcNet1006", err, fmt.Sprintf("Getting all network namespaces failed. Error: %s", err)) return d.res } d.vnidMap = map[string]uint32{} for _, netns := range netnsList.Items { d.vnidMap[netns.NetName] = netns.NetID } } localGlobalPods, localNonGlobalPods := util.GetGlobalAndNonGlobalPods(localPods, d.vnidMap) // Applicable to flat and multitenant networks if len(localGlobalPods) > 0 { d.checkConnection(localGlobalPods, services, "Skipping service connectivity test for global projects. Reason: Couldn't find a global pod.") } // Applicable to multitenant network isMultitenant := (d.vnidMap != nil) if isMultitenant { d.checkConnection(localNonGlobalPods, services, "Skipping service connectivity test for non-global projects. Reason: Couldn't find a non-global pod.") } return d.res }
// Check is part of the Diagnostic interface; it runs the actual diagnostic logic func (d CheckPodNetwork) Check() types.DiagnosticResult { d.res = types.NewDiagnosticResult(CheckPodNetworkName) pluginName, ok, err := util.GetOpenShiftNetworkPlugin(d.OSClient) if err != nil { d.res.Error("DPodNet1001", err, fmt.Sprintf("Checking network plugin failed. Error: %s", err)) return d.res } if !ok { d.res.Warn("DPodNet1002", nil, "Skipping pod connectivity test. Reason: Not using openshift network plugin.") return d.res } localPods, nonlocalPods, err := util.GetLocalAndNonLocalDiagnosticPods(d.KubeClient) if err != nil { d.res.Error("DPodNet1003", err, fmt.Sprintf("Getting local and nonlocal pods failed. Error: %s", err)) return d.res } if sdnapi.IsOpenShiftMultitenantNetworkPlugin(pluginName) { netnsList, err := d.OSClient.NetNamespaces().List(kapi.ListOptions{}) if err != nil { d.res.Error("DPodNet1004", err, fmt.Sprintf("Getting all network namespaces failed. Error: %s", err)) return d.res } d.vnidMap = map[string]uint32{} for _, netns := range netnsList.Items { d.vnidMap[netns.NetName] = netns.NetID } } localGlobalPods, localNonGlobalPods := util.GetGlobalAndNonGlobalPods(localPods, d.vnidMap) nonlocalGlobalPods, nonlocalNonGlobalPods := util.GetGlobalAndNonGlobalPods(nonlocalPods, d.vnidMap) d.checkSameNodePodToPodConnection(localGlobalPods, localNonGlobalPods) d.checkDifferentNodePodToPodConnection(localGlobalPods, localNonGlobalPods, nonlocalGlobalPods, nonlocalNonGlobalPods) return d.res }