Beispiel #1
0
func (ctx *RktRunCtx) cleanupChildren() error {
	for _, child := range ctx.children {
		if child.Cmd.ProcessState.Exited() {
			logger.Logf("Child %q already exited", child.Cmd.Path)
			continue
		}
		logger.Logf("Shutting down child %q", child.Cmd.Path)
		if err := child.Cmd.Process.Kill(); err != nil {
			return err
		}
		if _, err := child.Cmd.Process.Wait(); err != nil {
			return err
		}
	}
	return nil
}
Beispiel #2
0
func HTTPServe(addr string, timeout int) error {
	hostname, err := os.Hostname()
	if err != nil {
		panic(err)
	}

	originalListener, err := net.Listen("tcp4", addr)
	if err != nil {
		panic(err)
	}
	sl, err := stoppableListener.New(originalListener)
	if err != nil {
		panic(err)
	}

	c := make(chan string)
	go func() {
		logger.Logf("%v: serving on %v\n", hostname, addr)

		// Wait for either timeout or connect from client
		select {
		case <-time.After(time.Duration(timeout) * time.Second):
			{
				logger.Logf("%v: Serve timed out after %v seconds\n", hostname, timeout)
			}
		case client := (<-c):
			{
				logger.Logf("%v: Serve got a connection from %v\n", hostname, client)
			}
		}
		sl.Stop()
	}()

	serveMux := http.NewServeMux()
	serveMux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		logger.Logf("%v: Serve got a connection from %v\n", hostname, r.RemoteAddr)
		fmt.Fprintf(w, "%v", hostname)
		c <- r.RemoteAddr
	})
	err = http.Serve(sl, serveMux)
	if err != nil && err.Error() == "Listener stopped" {
		err = nil
	}
	return err
}
Beispiel #3
0
func HTTPGet(addr string) (string, error) {
	logger.Logf("Connecting to %v", addr)
	res, err := http.Get(fmt.Sprintf("%v", addr))
	if err != nil {
		return "", err
	}
	text, err := ioutil.ReadAll(res.Body)
	res.Body.Close()
	if err != nil {
		return "", err
	}
	return string(text), nil
}
Beispiel #4
0
func (ctx *RktRunCtx) Cleanup() {
	if ctx.mds != nil {
		ctx.mds.Process.Kill()
		ctx.mds.Wait()
		os.Remove("/run/rkt/metadata-svc.sock")
	}
	if err := ctx.cleanupChildren(); err != nil {
		logger.Logf("Error during child cleanup: %v", err)
	}
	ctx.RunGC()
	for _, d := range ctx.directories {
		d.cleanup()
	}
}