1
0
mirror of https://github.com/rancher/os.git synced 2025-06-24 05:57:03 +00:00
os/init/bootstrap.go

87 lines
1.9 KiB
Go
Raw Normal View History

package init
import (
"os"
"os/exec"
"syscall"
"fmt"
log "github.com/Sirupsen/logrus"
"github.com/rancherio/os/config"
2015-04-16 05:57:59 +00:00
"github.com/rancherio/os/docker"
"github.com/rancherio/os/util"
2015-05-05 20:36:52 +00:00
"github.com/rancherio/rancher-compose/librcompose/project"
"strings"
)
func autoformat(cfg *config.Config) error {
if len(cfg.State.Autoformat) == 0 || util.ResolveDevice(cfg.State.Dev) != "" {
return nil
}
AUTOFORMAT := "AUTOFORMAT=" + strings.Join(cfg.State.Autoformat, " ")
FORMATZERO := "FORMATZERO=" + fmt.Sprint(cfg.State.FormatZero)
cfg.Autoformat["autoformat"].Environment = project.NewMaporEqualSlice([]string{AUTOFORMAT, FORMATZERO})
2015-07-22 14:18:43 +00:00
log.Info("Running Autoformat services")
err := docker.RunServices("autoformat", cfg, cfg.Autoformat)
return err
}
func runBootstrapContainers(cfg *config.Config) error {
2015-07-22 14:18:43 +00:00
log.Info("Running Bootstrap services")
2015-04-16 05:57:59 +00:00
return docker.RunServices("bootstrap", cfg, cfg.BootstrapContainers)
}
func startDocker(cfg *config.Config) (chan interface{}, error) {
for _, d := range []string{config.DOCKER_SYSTEM_HOST, "/var/run"} {
err := os.MkdirAll(d, 0700)
if err != nil {
return nil, err
}
}
2015-04-03 21:59:24 +00:00
cmd := exec.Command(cfg.BootstrapDocker.Args[0], cfg.BootstrapDocker.Args[1:]...)
if cfg.Debug {
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
}
err := cmd.Start()
if err != nil {
return nil, err
}
c := make(chan interface{})
go func() {
<-c
cmd.Process.Signal(syscall.SIGTERM)
cmd.Wait()
c <- struct{}{}
}()
return c, nil
}
func stopDocker(c chan interface{}) error {
c <- struct{}{}
<-c
return os.RemoveAll(config.DOCKER_SYSTEM_HOME)
}
func bootstrap(cfg *config.Config) error {
2015-07-22 14:18:43 +00:00
log.Info("Launching Bootstrap Docker")
c, err := startDocker(cfg)
if err != nil {
return err
}
initFuncs := []config.InitFunc{
loadImages,
runBootstrapContainers,
autoformat,
}
defer stopDocker(c)
return config.RunInitFuncs(cfg, initFuncs)
}