1
0
mirror of https://github.com/rancher/os.git synced 2025-04-30 12:23:49 +00:00
os/pkg/init/cloudinit/cloudinit.go

61 lines
1.8 KiB
Go
Raw Normal View History

2018-09-16 04:55:26 +00:00
package cloudinit
import (
"github.com/rancher/os/config"
"github.com/rancher/os/pkg/compose"
"github.com/rancher/os/pkg/init/docker"
"github.com/rancher/os/pkg/log"
"github.com/rancher/os/pkg/sysinit"
"github.com/rancher/os/pkg/util"
)
func CloudInit(cfg *config.CloudConfig) (*config.CloudConfig, error) {
cfg.Rancher.CloudInit.Datasources = config.LoadConfigWithPrefix(config.StateDir).Rancher.CloudInit.Datasources
2018-09-16 04:55:26 +00:00
hypervisor := util.GetHypervisor()
if hypervisor == "" {
log.Infof("ros init: No Detected Hypervisor")
} else {
log.Infof("ros init: Detected Hypervisor: %s", hypervisor)
}
if hypervisor == "vmware" {
// add vmware to the end - we don't want to over-ride an choices the user has made
cfg.Rancher.CloudInit.Datasources = append(cfg.Rancher.CloudInit.Datasources, hypervisor)
}
if err := config.Set("rancher.cloud_init.datasources", cfg.Rancher.CloudInit.Datasources); err != nil {
log.Error(err)
}
log.Infof("init, runCloudInitServices(%v)", cfg.Rancher.CloudInit.Datasources)
if err := runCloudInitServices(cfg); err != nil {
log.Error(err)
}
// It'd be nice to push to rsyslog before this, but we don't have network
log.AddRSyslogHook()
return config.LoadConfig(), nil
}
func runCloudInitServices(cfg *config.CloudConfig) error {
c, err := docker.Start(cfg)
if err != nil {
return err
}
defer docker.Stop(c)
_, err = config.ChainCfgFuncs(cfg,
[]config.CfgFuncData{
{"cloudinit loadImages", sysinit.LoadBootstrapImages},
{"cloudinit Services", runCloudInitServiceSet},
})
return err
}
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
}