1
0
mirror of https://github.com/rancher/os.git synced 2025-09-01 23:04:41 +00:00

make cloud-config the configuration mechanism for RancherOS

This commit is contained in:
Ivan Mikushin
2015-07-29 11:52:15 +05:00
parent 5d93d51fc5
commit 7ad60c07bd
24 changed files with 919 additions and 917 deletions

View File

@@ -72,7 +72,7 @@ var (
}
)
func createSymlinks(cfg *config.Config, symlinks map[string]string) error {
func createSymlinks(cfg *config.CloudConfig, symlinks map[string]string) error {
log.Debug("Creating symlinking")
for dest, src := range symlinks {
if _, err := os.Stat(dest); os.IsNotExist(err) {
@@ -112,12 +112,12 @@ func createMounts(mounts ...[]string) error {
return nil
}
func remountRo(cfg *config.Config) error {
func remountRo(cfg *config.CloudConfig) error {
log.Info("Remouting root read only")
return util.Remount("/", "ro")
}
func mountCgroups(cfg *config.Config) error {
func mountCgroups(cfg *config.CloudConfig) error {
for _, cgroup := range cgroups {
err := createDirs("/sys/fs/cgroup/" + cgroup)
if err != nil {
@@ -137,7 +137,7 @@ func mountCgroups(cfg *config.Config) error {
return nil
}
func extractModules(cfg *config.Config) error {
func extractModules(cfg *config.CloudConfig) error {
if _, err := os.Stat(config.MODULES_ARCHIVE); os.IsNotExist(err) {
log.Debug("Modules do not exist")
return nil
@@ -147,7 +147,7 @@ func extractModules(cfg *config.Config) error {
return util.ExtractTar(config.MODULES_ARCHIVE, "/")
}
func setResolvConf(cfg *config.Config) error {
func setResolvConf(cfg *config.CloudConfig) error {
log.Debug("Creating /etc/resolv.conf")
//f, err := os.OpenFile("/etc/resolv.conf", os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
f, err := os.Create("/etc/resolv.conf")
@@ -157,14 +157,14 @@ func setResolvConf(cfg *config.Config) error {
defer f.Close()
for _, dns := range cfg.Network.Dns.Nameservers {
for _, dns := range cfg.Rancher.Network.Dns.Nameservers {
content := fmt.Sprintf("nameserver %s\n", dns)
if _, err = f.Write([]byte(content)); err != nil {
return err
}
}
search := strings.Join(cfg.Network.Dns.Search, " ")
search := strings.Join(cfg.Rancher.Network.Dns.Search, " ")
if search != "" {
content := fmt.Sprintf("search %s\n", search)
if _, err = f.Write([]byte(content)); err != nil {
@@ -172,8 +172,8 @@ func setResolvConf(cfg *config.Config) error {
}
}
if cfg.Network.Dns.Domain != "" {
content := fmt.Sprintf("domain %s\n", cfg.Network.Dns.Domain)
if cfg.Rancher.Network.Dns.Domain != "" {
content := fmt.Sprintf("domain %s\n", cfg.Rancher.Network.Dns.Domain)
if _, err = f.Write([]byte(content)); err != nil {
return err
}
@@ -182,7 +182,7 @@ func setResolvConf(cfg *config.Config) error {
return nil
}
func loadModules(cfg *config.Config) error {
func loadModules(cfg *config.CloudConfig) error {
filesystems, err := ioutil.ReadFile("/proc/filesystems")
if err != nil {
return err
@@ -196,7 +196,7 @@ func loadModules(cfg *config.Config) error {
}
}
for _, module := range cfg.Modules {
for _, module := range cfg.Rancher.Modules {
log.Debugf("Loading module %s", module)
err = exec.Command("/sbin/modprobe", module).Run()
if err != nil {
@@ -207,7 +207,7 @@ func loadModules(cfg *config.Config) error {
return nil
}
func sysInit(cfg *config.Config) error {
func sysInit(cfg *config.CloudConfig) error {
args := append([]string{SYSINIT}, os.Args[1:]...)
var cmd *exec.Cmd
@@ -227,9 +227,9 @@ func sysInit(cfg *config.Config) error {
return os.Stdin.Close()
}
func execDocker(cfg *config.Config) error {
func execDocker(cfg *config.CloudConfig) error {
log.Info("Launching System Docker")
if !cfg.Debug {
if !cfg.Rancher.Debug {
output, err := os.Create("/var/log/system-docker.log")
if err != nil {
return err
@@ -240,7 +240,7 @@ func execDocker(cfg *config.Config) error {
}
os.Stdin.Close()
return syscall.Exec(SYSTEM_DOCKER, cfg.SystemDocker.Args, os.Environ())
return syscall.Exec(SYSTEM_DOCKER, cfg.Rancher.SystemDocker.Args, os.Environ())
}
func MainInit() {
@@ -249,24 +249,24 @@ func MainInit() {
}
}
func mountStateTmpfs(cfg *config.Config) error {
func mountStateTmpfs(cfg *config.CloudConfig) error {
log.Debugf("State will not be persisted")
return util.Mount("none", STATE, "tmpfs", "")
}
func mountState(cfg *config.Config) error {
func mountState(cfg *config.CloudConfig) error {
var err error
if cfg.State.Dev != "" {
dev := util.ResolveDevice(cfg.State.Dev)
if cfg.Rancher.State.Dev != "" {
dev := util.ResolveDevice(cfg.Rancher.State.Dev)
if dev == "" {
msg := fmt.Sprintf("Could not resolve device %q", cfg.State.Dev)
msg := fmt.Sprintf("Could not resolve device %q", cfg.Rancher.State.Dev)
log.Infof(msg)
return fmt.Errorf(msg)
}
log.Infof("Mounting state device %s to %s", dev, STATE)
fsType := cfg.State.FsType
fsType := cfg.Rancher.State.FsType
if fsType == "auto" {
fsType, err = util.GetFsType(dev)
}
@@ -282,16 +282,16 @@ func mountState(cfg *config.Config) error {
return err
}
func tryMountAndBootstrap(cfg *config.Config) error {
func tryMountAndBootstrap(cfg *config.CloudConfig) error {
if err := mountState(cfg); err != nil {
if err := bootstrap(cfg); err != nil {
if cfg.State.Required {
if cfg.Rancher.State.Required {
return err
}
return mountStateTmpfs(cfg)
}
if err := mountState(cfg); err != nil {
if cfg.State.Required {
if cfg.Rancher.State.Required {
return err
}
return mountStateTmpfs(cfg)
@@ -300,11 +300,11 @@ func tryMountAndBootstrap(cfg *config.Config) error {
return nil
}
func createGroups(cfg *config.Config) error {
func createGroups(cfg *config.CloudConfig) error {
return ioutil.WriteFile("/etc/group", []byte("root:x:0:\n"), 0644)
}
func touchSocket(cfg *config.Config) error {
func touchSocket(cfg *config.CloudConfig) error {
for _, path := range []string{"/var/run/docker.sock", "/var/run/system-docker.sock"} {
if err := syscall.Unlink(path); err != nil && !os.IsNotExist(err) {
return err
@@ -318,8 +318,8 @@ func touchSocket(cfg *config.Config) error {
return nil
}
func setupSystemBridge(cfg *config.Config) error {
bridge, cidr := cfg.SystemDocker.BridgeConfig()
func setupSystemBridge(cfg *config.CloudConfig) error {
bridge, cidr := cfg.Rancher.SystemDocker.BridgeConfig()
if bridge == "" {
return nil
}
@@ -335,20 +335,20 @@ func setupSystemBridge(cfg *config.Config) error {
}
func RunInit() error {
var cfg config.Config
var cfg config.CloudConfig
os.Setenv("PATH", "/sbin:/usr/sbin:/usr/bin")
os.Setenv("DOCKER_RAMDISK", "true")
initFuncs := []config.InitFunc{
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return createDirs(dirs...)
},
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
log.Info("Setting up mounts")
return createMounts(mounts...)
},
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
newCfg, err := config.LoadConfig()
if err == nil {
newCfg, err = config.LoadConfig()
@@ -357,17 +357,15 @@ func RunInit() error {
*cfg = *newCfg
}
if cfg.Debug {
if cfg.Rancher.Debug {
cfgString, _ := config.Dump(false, true)
if cfgString != "" {
log.Debugf("Config: %s", cfgString)
}
log.Debugf("os-config dump: \n%s", cfgString)
}
return err
},
mountCgroups,
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return createSymlinks(cfg, symlinks)
},
createGroups,
@@ -376,15 +374,15 @@ func RunInit() error {
setResolvConf,
setupSystemBridge,
tryMountAndBootstrap,
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return cfg.Reload()
},
loadModules,
setResolvConf,
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return createDirs(postDirs...)
},
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return createMounts(postMounts...)
},
touchSocket,