Skip to content

Commit 80abd58

Browse files
Merge pull request #20647 from pravisankar/fix-netdiag-runtime
Bug 1614660 - Network diagnostic will auto detect runtime
2 parents c9f30d1 + d4c99ef commit 80abd58

File tree

3 files changed

+33
-31
lines changed

3 files changed

+33
-31
lines changed

pkg/oc/cli/admin/diagnostics/diagnostics/cluster/network/in_pod/cmd.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ func (o NetworkPodDiagnosticsOptions) buildNetworkPodDiagnostics() ([]types.Diag
132132
return nil, err
133133
}
134134

135-
runtime, err := netutil.GetRuntime()
135+
runtime, err := netutil.GetRuntime(kubeClient)
136136
if err != nil {
137137
return nil, err
138138
}

pkg/oc/cli/admin/diagnostics/diagnostics/cluster/network/in_pod/util/runtime.go

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ import (
77
"regexp"
88
"strings"
99

10-
"github.com/golang/glog"
11-
10+
kclientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
1211
kexec "k8s.io/utils/exec"
1312
)
1413

@@ -27,8 +26,8 @@ type Runtime struct {
2726
Endpoint string
2827
}
2928

30-
func GetRuntime() (*Runtime, error) {
31-
runtimeName, runtimeType, runtimeEndpoint, err := getDefaultRuntimeEndpoint()
29+
func GetRuntime(kubeClient kclientset.Interface) (*Runtime, error) {
30+
runtimeName, runtimeType, runtimeEndpoint, err := getRuntimeEndpoint(kubeClient)
3231
if err != nil {
3332
return nil, err
3433
}
@@ -114,42 +113,44 @@ func (r *Runtime) GetRuntimeVersion() (string, error) {
114113
return versionInfo, nil
115114
}
116115

117-
func getDefaultRuntimeEndpoint() (string, string, string, error) {
118-
isCRIO, err := filePathExists(defaultCRIOShimSocket)
116+
func getRuntimeEndpoint(kubeClient kclientset.Interface) (string, string, string, error) {
117+
nodes, err := GetNodes(kubeClient)
119118
if err != nil {
120119
return "", "", "", err
121120
}
122-
123-
isDocker, err := filePathExists(defaultDockerShimSocket)
124-
if err != nil {
125-
return "", "", "", err
121+
if len(nodes) == 0 {
122+
return "", "", "", fmt.Errorf("no nodes found to detect the runtime")
126123
}
127124

128-
// TODO: Instead of trying to detect the runtime make this as config option
129-
if isDocker && isCRIO {
130-
glog.Warningf("Found both crio and docker socket files, defaulting to crio")
131-
return crioRuntimeName, crioRuntimeType, defaultCRIOShimSocket, nil
132-
} else if isCRIO {
133-
return crioRuntimeName, crioRuntimeType, defaultCRIOShimSocket, nil
134-
} else if isDocker {
135-
return dockerRuntimeName, dockerRuntimeType, defaultDockerShimSocket, nil
125+
for _, node := range nodes {
126+
if len(node.Status.NodeInfo.ContainerRuntimeVersion) > 0 {
127+
runtimeTokens := strings.Split(node.Status.NodeInfo.ContainerRuntimeVersion, "://")
128+
switch runtimeTokens[0] {
129+
case crioRuntimeType:
130+
if err := filePathExists(defaultCRIOShimSocket); err != nil {
131+
return "", "", "", fmt.Errorf("detected crio runtime but validation of socket file %q failed: %v", defaultCRIOShimSocket, err)
132+
}
133+
return crioRuntimeName, crioRuntimeType, defaultCRIOShimSocket, nil
134+
case dockerRuntimeType:
135+
if err := filePathExists(defaultDockerShimSocket); err != nil {
136+
return "", "", "", fmt.Errorf("detected docker runtime but validation of socket file %q failed: %v", defaultDockerShimSocket, err)
137+
}
138+
return dockerRuntimeName, dockerRuntimeType, defaultDockerShimSocket, nil
139+
default:
140+
return "", "", "", fmt.Errorf("runtime %q is not supported", runtimeTokens[0])
141+
}
142+
}
136143
}
137144

138-
return "", "", "", fmt.Errorf("supported runtime socket files not found")
145+
return "", "", "", fmt.Errorf("supported runtime not found")
139146
}
140147

141-
func filePathExists(endpoint string) (bool, error) {
148+
func filePathExists(endpoint string) error {
142149
u, err := url.Parse(endpoint)
143150
if err != nil {
144-
return false, err
145-
}
146-
147-
if _, err := os.Stat(u.Path); err != nil {
148-
if os.IsNotExist(err) {
149-
return false, nil
150-
}
151-
return false, err
151+
return err
152152
}
153153

154-
return true, nil
154+
_, err = os.Stat(u.Path)
155+
return err
155156
}

pkg/oc/cli/admin/diagnostics/diagnostics/cluster/network/results.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/openshift/source-to-image/pkg/tar"
1515
s2ifs "github.com/openshift/source-to-image/pkg/util/fs"
1616

17+
corev1 "k8s.io/api/core/v1"
1718
kerrs "k8s.io/apimachinery/pkg/util/errors"
1819
kapi "k8s.io/kubernetes/pkg/apis/core"
1920
"k8s.io/kubernetes/pkg/kubectl/polymorphichelpers"
@@ -99,7 +100,7 @@ func (d *NetworkDiagnostic) copyNetworkPodInfo(pod *kapi.Pod) error {
99100

100101
func (d *NetworkDiagnostic) getNetworkPodLogs(pod *kapi.Pod) error {
101102
bytelim := int64(1024000)
102-
opts := &kapi.PodLogOptions{
103+
opts := &corev1.PodLogOptions{
103104
TypeMeta: pod.TypeMeta,
104105
Container: pod.Name,
105106
Follow: true,

0 commit comments

Comments
 (0)