func (glusterfsVolume *glusterfs) execMount(hosts *api.Endpoints, path string, mountpoint string, readonly bool) error { var errs error var command exec.Cmd var mountArgs []string var opt []string // build option array if readonly == true { opt = []string{"-o", "ro"} } else { opt = []string{"-o", "rw"} } l := len(hosts.Subsets) // avoid mount storm, pick a host randomly start := rand.Int() % l // iterate all hosts until mount succeeds. for i := start; i < start+l; i++ { arg := []string{"-t", "glusterfs", hosts.Subsets[i%l].Addresses[0].IP + ":" + path, mountpoint} mountArgs = append(arg, opt...) glog.V(1).Infof("Glusterfs: mount cmd: mount %v", strings.Join(mountArgs, " ")) command = glusterfsVolume.exe.Command("mount", mountArgs...) _, errs = command.CombinedOutput() if errs == nil { return nil } } glog.Errorf("Glusterfs: mount failed: %v", errs) return errs }
func (pr execProber) Probe(e exec.Cmd) (probe.Result, string, error) { data, err := e.CombinedOutput() glog.V(4).Infof("Exec probe response: %q", string(data)) if err != nil { exit, ok := err.(exec.ExitError) if ok { if exit.ExitStatus() == 0 { return probe.Success, string(data), nil } else { return probe.Failure, string(data), nil } } return probe.Unknown, "", err } return probe.Success, string(data), nil }