Skip to content

Commit fc7190d

Browse files
Merge pull request #16439 from pravisankar/netdiags-image-check
Automatic merge from submit-queue Bug 1481147 - Fix default pod image for network diagnostics - This also ensures network diagnostics pod and test pod images uses deployed openshift version/tag (not the latest) so that it doesn't need to download another same image with latest tag. - Print more details when network diagnostics test setup fails. Currently when network diags fails, it only informs how many test pods failed but doesn't provide why those pods failed. This change will fetch logs for the pods in case of setup failure.
2 parents 27c0cbb + 74a6699 commit fc7190d

File tree

4 files changed

+65
-18
lines changed

4 files changed

+65
-18
lines changed

pkg/diagnostics/network/objects.go

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -113,15 +113,7 @@ func GetTestPod(testPodImage, testPodProtocol, podName, nodeName string, testPod
113113
},
114114
}
115115

116-
var trimmedPodImage string
117-
imageTokens := strings.Split(testPodImage, "/")
118-
n := len(imageTokens)
119-
if n < 2 {
120-
trimmedPodImage = testPodImage
121-
} else {
122-
trimmedPodImage = imageTokens[n-2] + "/" + imageTokens[n-1]
123-
}
124-
if trimmedPodImage == util.NetworkDiagDefaultTestPodImage {
116+
if getTrimmedImage(testPodImage) == getTrimmedImage(util.GetNetworkDiagDefaultTestPodImage()) {
125117
pod.Spec.Containers[0].Command = []string{
126118
"socat", "-T", "1", "-d",
127119
fmt.Sprintf("%s-l:%d,reuseaddr,fork,crlf", testPodProtocol, testPodPort),
@@ -131,6 +123,14 @@ func GetTestPod(testPodImage, testPodProtocol, podName, nodeName string, testPod
131123
return pod
132124
}
133125

126+
func getTrimmedImage(image string) string {
127+
// Image format could be: [<dns-name>/]openshift/origin-deployer[:<tag>]
128+
tokens := strings.Split(image, "/")
129+
trimImageWithTag := tokens[len(tokens)-1]
130+
131+
return strings.Split(trimImageWithTag, ":")[0]
132+
}
133+
134134
func GetTestService(serviceName, podName, podProtocol, nodeName string, podPort int) *kapi.Service {
135135
return &kapi.Service{
136136
ObjectMeta: metav1.ObjectMeta{Name: serviceName},

pkg/diagnostics/network/setup.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
kerrs "k8s.io/apimachinery/pkg/api/errors"
1111
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1212
kerrors "k8s.io/apimachinery/pkg/util/errors"
13+
"k8s.io/apimachinery/pkg/util/sets"
1314
"k8s.io/apimachinery/pkg/util/wait"
1415
"k8s.io/apiserver/pkg/storage/names"
1516
kclientcmd "k8s.io/client-go/tools/clientcmd"
@@ -66,7 +67,12 @@ func (d *NetworkDiagnostic) TestSetup() error {
6667
}
6768
// Wait for test pods and services to be up and running on all valid nodes
6869
if err = d.waitForTestPodAndService(nsList); err != nil {
69-
return fmt.Errorf("Failed to run network diags test pod and service: %v", err)
70+
logData, er := d.getPodLogs(nsList)
71+
if er != nil {
72+
return fmt.Errorf("Failed to run network diags test pod and service: %v, fetching logs failed: %v", err, er)
73+
} else {
74+
return fmt.Errorf("Failed to run network diags test pod and service: %v, details: %s", err, logData)
75+
}
7076
}
7177
return nil
7278
}
@@ -169,6 +175,41 @@ func (d *NetworkDiagnostic) waitForTestPodAndService(nsList []string) error {
169175
return kerrors.NewAggregate(errList)
170176
}
171177

178+
func (d *NetworkDiagnostic) getPodLogs(nsList []string) (string, error) {
179+
logData := sets.String{}
180+
errList := []error{}
181+
limit := int64(1024)
182+
183+
for _, name := range nsList {
184+
podList, err := d.getPodList(name, util.NetworkDiagTestPodNamePrefix)
185+
if err != nil {
186+
return "", err
187+
}
188+
189+
for _, pod := range podList.Items {
190+
opts := &kapi.PodLogOptions{
191+
TypeMeta: pod.TypeMeta,
192+
Container: pod.Name,
193+
Follow: true,
194+
LimitBytes: &limit,
195+
}
196+
197+
req, err := d.Factory.LogsForObject(&pod, opts, 10*time.Second)
198+
if err != nil {
199+
errList = append(errList, err)
200+
continue
201+
}
202+
data, err := req.DoRaw()
203+
if err != nil {
204+
errList = append(errList, err)
205+
continue
206+
}
207+
logData.Insert(string(data[:]))
208+
}
209+
}
210+
return strings.Join(logData.List(), ", "), kerrors.NewAggregate(errList)
211+
}
212+
172213
func (d *NetworkDiagnostic) getCountOfTestPods(nsList []string) (int, int, error) {
173214
totalPodCount := 0
174215
runningPodCount := 0

pkg/diagnostics/networkpod/util/util.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,16 @@ const (
3737
NetworkDiagDefaultTestPodPort = 8080
3838
)
3939

40-
var (
41-
NetworkDiagDefaultPodImage = variable.DefaultImagePrefix
42-
NetworkDiagDefaultTestPodImage = variable.DefaultImagePrefix + "-deployer"
43-
)
40+
func GetNetworkDiagDefaultPodImage() string {
41+
imageTemplate := variable.NewDefaultImageTemplate()
42+
imageTemplate.Format = variable.DefaultImagePrefix + ":${version}"
43+
return imageTemplate.ExpandOrDie("")
44+
}
45+
46+
func GetNetworkDiagDefaultTestPodImage() string {
47+
imageTemplate := variable.NewDefaultImageTemplate()
48+
return imageTemplate.ExpandOrDie("deployer")
49+
}
4450

4551
func GetOpenShiftNetworkPlugin(osClient *osclient.Client) (string, bool, error) {
4652
cn, err := osClient.ClusterNetwork().Get(networkapi.ClusterNetworkDefault, metav1.GetOptions{})

pkg/oc/admin/diagnostics/diagnostics.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -151,8 +151,8 @@ func NewCmdDiagnostics(name string, fullName string, out io.Writer) *cobra.Comma
151151
cmd.Flags().BoolVar(&o.ImageTemplate.Latest, options.FlagLatestImageName, false, "If true, when expanding the image template, use latest version, not release version")
152152
cmd.Flags().BoolVar(&o.PreventModification, options.FlagPreventModificationName, false, "If true, may be set to prevent diagnostics making any changes via the API")
153153
cmd.Flags().StringVar(&o.NetworkOptions.LogDir, options.FlagNetworkDiagLogDir, netutil.NetworkDiagDefaultLogDir, "Path to store network diagnostic results in case of errors")
154-
cmd.Flags().StringVar(&o.NetworkOptions.PodImage, options.FlagNetworkDiagPodImage, netutil.NetworkDiagDefaultPodImage, "Image to use for network diagnostic pod")
155-
cmd.Flags().StringVar(&o.NetworkOptions.TestPodImage, options.FlagNetworkDiagTestPodImage, netutil.NetworkDiagDefaultTestPodImage, "Image to use for network diagnostic test pod")
154+
cmd.Flags().StringVar(&o.NetworkOptions.PodImage, options.FlagNetworkDiagPodImage, netutil.GetNetworkDiagDefaultPodImage(), "Image to use for network diagnostic pod")
155+
cmd.Flags().StringVar(&o.NetworkOptions.TestPodImage, options.FlagNetworkDiagTestPodImage, netutil.GetNetworkDiagDefaultTestPodImage(), "Image to use for network diagnostic test pod")
156156
cmd.Flags().StringVar(&o.NetworkOptions.TestPodProtocol, options.FlagNetworkDiagTestPodProtocol, netutil.NetworkDiagDefaultTestPodProtocol, "Protocol used to connect to network diagnostic test pod")
157157
cmd.Flags().IntVar(&o.NetworkOptions.TestPodPort, options.FlagNetworkDiagTestPodPort, netutil.NetworkDiagDefaultTestPodPort, "Serving port on the network diagnostic test pod")
158158
flagtypes.GLog(cmd.Flags())
@@ -195,10 +195,10 @@ func (o *DiagnosticsOptions) Complete(args []string) error {
195195
o.NetworkOptions.LogDir = logdir
196196
}
197197
if len(o.NetworkOptions.PodImage) == 0 {
198-
o.NetworkOptions.PodImage = netutil.NetworkDiagDefaultPodImage
198+
o.NetworkOptions.PodImage = netutil.GetNetworkDiagDefaultPodImage()
199199
}
200200
if len(o.NetworkOptions.TestPodImage) == 0 {
201-
o.NetworkOptions.TestPodImage = netutil.NetworkDiagDefaultTestPodImage
201+
o.NetworkOptions.TestPodImage = netutil.GetNetworkDiagDefaultTestPodImage()
202202
}
203203

204204
supportedProtocols := sets.NewString(string(kapi.ProtocolTCP), string(kapi.ProtocolUDP))

0 commit comments

Comments
 (0)