2015-03-18 13:21:32 +00:00
|
|
|
package init
|
|
|
|
|
|
|
|
import (
|
|
|
|
"syscall"
|
|
|
|
|
2015-10-12 11:50:17 +00:00
|
|
|
"github.com/rancher/os/compose"
|
|
|
|
"github.com/rancher/os/config"
|
2016-10-19 23:21:35 +00:00
|
|
|
"github.com/rancher/os/dfs"
|
2016-11-23 10:49:35 +00:00
|
|
|
"github.com/rancher/os/log"
|
2015-10-12 11:50:17 +00:00
|
|
|
"github.com/rancher/os/util"
|
2015-03-18 13:21:32 +00:00
|
|
|
)
|
|
|
|
|
2016-10-17 21:47:44 +00:00
|
|
|
func bootstrapServices(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
2017-01-05 00:18:33 +00:00
|
|
|
if util.ResolveDevice(cfg.Rancher.State.Dev) != "" && len(cfg.Bootcmd) == 0 {
|
2017-01-20 07:02:48 +00:00
|
|
|
log.Info("NOT Running Bootstrap")
|
|
|
|
|
2015-09-23 11:36:28 +00:00
|
|
|
return cfg, nil
|
2015-03-18 13:21:32 +00:00
|
|
|
}
|
2016-10-17 21:47:44 +00:00
|
|
|
log.Info("Running Bootstrap")
|
2015-08-04 21:45:38 +00:00
|
|
|
_, err := compose.RunServiceSet("bootstrap", cfg, cfg.Rancher.BootstrapContainers)
|
2015-09-23 11:36:28 +00:00
|
|
|
return cfg, err
|
2015-03-18 13:21:32 +00:00
|
|
|
}
|
|
|
|
|
2016-11-09 19:08:30 +00:00
|
|
|
func runCloudInitServiceSet(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
|
|
|
log.Info("Running cloud-init services")
|
|
|
|
_, err := compose.RunServiceSet("cloud-init", cfg, cfg.Rancher.CloudInitServices)
|
|
|
|
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-11-28 08:06:00 +00:00
|
|
|
cmd, err := dfs.LaunchDocker(launchConfig, config.SystemDockerBin, args...)
|
2015-03-18 13:21:32 +00:00
|
|
|
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
|
|
|
|
|
2016-01-15 13:18:30 +00:00
|
|
|
return nil
|
2015-03-18 13:21:32 +00:00
|
|
|
}
|
|
|
|
|
2015-07-29 06:52:15 +00:00
|
|
|
func bootstrap(cfg *config.CloudConfig) error {
|
2015-07-22 14:18:43 +00:00
|
|
|
log.Info("Launching Bootstrap Docker")
|
2017-01-20 07:02:48 +00:00
|
|
|
|
2015-03-18 13:21:32 +00:00
|
|
|
c, err := startDocker(cfg)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
defer stopDocker(c)
|
|
|
|
|
2015-09-23 11:36:28 +00:00
|
|
|
_, err = config.ChainCfgFuncs(cfg,
|
2017-05-02 23:45:58 +00:00
|
|
|
[]config.CfgFuncData{
|
|
|
|
config.CfgFuncData{"bootstrap loadImages", loadImages},
|
|
|
|
config.CfgFuncData{"bootstrap Services", bootstrapServices},
|
|
|
|
})
|
2015-09-23 11:36:28 +00:00
|
|
|
return err
|
2015-03-18 13:21:32 +00:00
|
|
|
}
|
2016-11-09 19:08:30 +00:00
|
|
|
|
|
|
|
func runCloudInitServices(cfg *config.CloudConfig) error {
|
|
|
|
c, err := startDocker(cfg)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
defer stopDocker(c)
|
|
|
|
|
|
|
|
_, err = config.ChainCfgFuncs(cfg,
|
2017-05-02 23:45:58 +00:00
|
|
|
[]config.CfgFuncData{
|
|
|
|
config.CfgFuncData{"cloudinit loadImages", loadImages},
|
|
|
|
config.CfgFuncData{"cloudinit Services", runCloudInitServiceSet},
|
|
|
|
})
|
2016-11-09 19:08:30 +00:00
|
|
|
return err
|
|
|
|
}
|