func (d *NetworkDiagnostic) copyNetworkPodInfo(pod *kapi.Pod) error { tmp, err := ioutil.TempFile("", "network-diags") if err != nil { return fmt.Errorf("Can not create local temporary file for tar: %v", err) } defer os.Remove(tmp.Name()) // Tar logdir on the remote node and copy to a local temporary file errBuf := &bytes.Buffer{} nodeLogDir := filepath.Join(util.NetworkDiagDefaultLogDir, util.NetworkDiagNodeLogDirPrefix, pod.Spec.NodeName) cmd := []string{"chroot", util.NetworkDiagContainerMountPath, "tar", "-C", nodeLogDir, "-c", "."} if err = util.Execute(d.Factory, cmd, pod, nil, tmp, errBuf); err != nil { return fmt.Errorf("Creating remote tar locally failed: %v, %s", err, errBuf.String()) } if err := tmp.Close(); err != nil { return fmt.Errorf("Closing temporary tar file %s failed: %v", tmp.Name(), err) } // Extract copied temporary file locally tmp, err = os.Open(tmp.Name()) if err != nil { return fmt.Errorf("Can not open temporary tar file %s: %v", tmp.Name(), err) } defer tmp.Close() tarHelper := tar.New() tarHelper.SetExclusionPattern(nil) logdir := filepath.Join(d.LogDir, util.NetworkDiagNodeLogDirPrefix, pod.Spec.NodeName) err = tarHelper.ExtractTarStream(logdir, tmp) if err != nil { return fmt.Errorf("Untar local directory failed: %v, %s", err, errBuf.String()) } return nil }
func (d *NetworkDiagnostic) deleteRemoteNodeInfo(pod *kapi.Pod) error { tmp, err := ioutil.TempFile("", "network-diags") if err != nil { return fmt.Errorf("Can not create local temporary file for tar: %v", err) } defer os.Remove(tmp.Name()) errBuf := &bytes.Buffer{} nodeLogDir := filepath.Join(util.NetworkDiagDefaultLogDir, util.NetworkDiagNodeLogDirPrefix, pod.Spec.NodeName) cmd := []string{"chroot", util.NetworkDiagContainerMountPath, "sh", "-c", fmt.Sprintf("shopt -s dotglob && rm -rf %s", nodeLogDir)} if err = util.Execute(d.Factory, cmd, pod, nil, tmp, errBuf); err != nil { return fmt.Errorf("Deleting remote logdir %q on node %q failed: %v, %s", nodeLogDir, pod.Spec.NodeName, err, errBuf.String()) } return nil }