1
0
mirror of https://github.com/rancher/os.git synced 2025-06-24 14:01:34 +00:00
os/init/bootstrap.go

77 lines
1.7 KiB
Go
Raw Normal View History

package init
import (
"syscall"
2015-07-29 07:51:49 +00:00
"strings"
log "github.com/Sirupsen/logrus"
2015-07-29 07:51:49 +00:00
"github.com/rancher/docker-from-scratch"
"github.com/rancher/os/compose"
"github.com/rancher/os/config"
"github.com/rancher/os/util"
)
func autoformat(cfg *config.CloudConfig) (*config.CloudConfig, error) {
if len(cfg.Rancher.State.Autoformat) == 0 || util.ResolveDevice(cfg.Rancher.State.Dev) != "" {
return cfg, nil
}
AUTOFORMAT := "AUTOFORMAT=" + strings.Join(cfg.Rancher.State.Autoformat, " ")
t := *cfg
t.Rancher.Autoformat["autoformat"].Environment = []string{AUTOFORMAT}
2015-07-22 14:18:43 +00:00
log.Info("Running Autoformat services")
_, err := compose.RunServiceSet("autoformat", &t, t.Rancher.Autoformat)
return &t, err
}
func runBootstrapContainers(cfg *config.CloudConfig) (*config.CloudConfig, error) {
2015-07-22 14:18:43 +00:00
log.Info("Running Bootstrap services")
2015-08-04 21:45:38 +00:00
_, err := compose.RunServiceSet("bootstrap", cfg, cfg.Rancher.BootstrapContainers)
return cfg, err
}
2015-08-04 21:45:38 +00:00
func startDocker(cfg *config.CloudConfig) (chan interface{}, error) {
2015-07-29 07:51:49 +00:00
launchConfig, args := getLaunchConfig(cfg, &cfg.Rancher.BootstrapDocker)
launchConfig.Fork = true
launchConfig.LogFile = ""
launchConfig.NoLog = true
2016-06-01 04:38:10 +00:00
cmd, err := dockerlaunch.LaunchDocker(launchConfig, config.SYSTEM_DOCKER_BIN, args...)
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 nil
}
func bootstrap(cfg *config.CloudConfig) error {
2015-07-22 14:18:43 +00:00
log.Info("Launching Bootstrap Docker")
c, err := startDocker(cfg)
if err != nil {
return err
}
defer stopDocker(c)
_, err = config.ChainCfgFuncs(cfg,
loadImages,
runBootstrapContainers,
autoformat)
return err
}