1
0
mirror of https://github.com/rancher/os.git synced 2025-09-18 08:06:48 +00:00

Refactor to use libcompose

This commit is contained in:
Darren Shepherd
2015-08-04 14:45:38 -07:00
parent 19f9a1b281
commit 9d76b79ac3
26 changed files with 665 additions and 1458 deletions

View File

@@ -8,11 +8,11 @@ import (
"strings"
log "github.com/Sirupsen/logrus"
"github.com/docker/libcompose/project"
"github.com/rancher/docker-from-scratch"
"github.com/rancherio/os/compose"
"github.com/rancherio/os/config"
"github.com/rancherio/os/docker"
"github.com/rancherio/os/util"
"github.com/rancherio/rancher-compose/librcompose/project"
)
func autoformat(cfg *config.CloudConfig) error {
@@ -23,16 +23,17 @@ func autoformat(cfg *config.CloudConfig) error {
FORMATZERO := "FORMATZERO=" + fmt.Sprint(cfg.Rancher.State.FormatZero)
cfg.Rancher.Autoformat["autoformat"].Environment = project.NewMaporEqualSlice([]string{AUTOFORMAT, FORMATZERO})
log.Info("Running Autoformat services")
err := docker.RunServices("autoformat", cfg, cfg.Rancher.Autoformat)
_, err := compose.RunServiceSet("autoformat", cfg, cfg.Rancher.Autoformat)
return err
}
func runBootstrapContainers(cfg *config.CloudConfig) error {
log.Info("Running Bootstrap services")
return docker.RunServices("bootstrap", cfg, cfg.Rancher.BootstrapContainers)
_, err := compose.RunServiceSet("bootstrap", cfg, cfg.Rancher.BootstrapContainers)
return err
}
func startDocker(cfg *config.Config) (chan interface{}, error) {
func startDocker(cfg *config.CloudConfig) (chan interface{}, error) {
launchConfig, args := getLaunchConfig(cfg, &cfg.Rancher.BootstrapDocker)
launchConfig.Fork = true

View File

@@ -30,7 +30,7 @@ var (
}
)
func loadModules(cfg *config.Config) error {
func loadModules(cfg *config.CloudConfig) error {
mounted := map[string]bool{}
f, err := os.Open("/proc/modules")
@@ -44,7 +44,7 @@ func loadModules(cfg *config.Config) error {
mounted[strings.SplitN(reader.Text(), " ", 2)[0]] = true
}
for _, module := range cfg.Modules {
for _, module := range cfg.Rancher.Modules {
if mounted[module] {
continue
}
@@ -58,7 +58,7 @@ func loadModules(cfg *config.Config) error {
return nil
}
func sysInit(cfg *config.Config) error {
func sysInit(cfg *config.CloudConfig) error {
args := append([]string{config.SYSINIT_BIN}, os.Args[1:]...)
cmd := &exec.Cmd{
@@ -83,18 +83,18 @@ func MainInit() {
}
}
func mountState(cfg *config.Config) error {
func mountState(cfg *config.CloudConfig) error {
var err error
if cfg.State.Dev == "" {
if cfg.Rancher.State.Dev == "" {
return nil
}
dev := util.ResolveDevice(cfg.State.Dev)
dev := util.ResolveDevice(cfg.Rancher.State.Dev)
if dev == "" {
return fmt.Errorf("Could not resolve device %q", cfg.State.Dev)
return fmt.Errorf("Could not resolve device %q", cfg.Rancher.State.Dev)
}
fsType := cfg.State.FsType
fsType := cfg.Rancher.State.FsType
if fsType == "auto" {
fsType, err = util.GetFsType(dev)
}
@@ -108,7 +108,7 @@ func mountState(cfg *config.Config) error {
return util.Mount(dev, STATE, fsType, "")
}
func tryMountState(cfg *config.Config) error {
func tryMountState(cfg *config.CloudConfig) error {
if mountState(cfg) == nil {
return nil
}
@@ -121,8 +121,8 @@ func tryMountState(cfg *config.Config) error {
return mountState(cfg)
}
func tryMountAndBootstrap(cfg *config.Config) error {
if err := tryMountState(cfg); !cfg.State.Required && err != nil {
func tryMountAndBootstrap(cfg *config.CloudConfig) error {
if err := tryMountState(cfg); !cfg.Rancher.State.Required && err != nil {
return nil
} else if err != nil {
return err
@@ -132,15 +132,15 @@ func tryMountAndBootstrap(cfg *config.Config) error {
return switchRoot(STATE)
}
func getLaunchConfig(cfg *config.Config, dockerCfg *config.DockerConfig) (*dockerlaunch.Config, []string) {
func getLaunchConfig(cfg *config.CloudConfig, dockerCfg *config.DockerConfig) (*dockerlaunch.Config, []string) {
var launchConfig dockerlaunch.Config
args := dockerlaunch.ParseConfig(&launchConfig, append(dockerCfg.Args, dockerCfg.ExtraArgs...)...)
launchConfig.DnsConfig.Nameservers = cfg.Network.Dns.Nameservers
launchConfig.DnsConfig.Search = cfg.Network.Dns.Search
launchConfig.DnsConfig.Nameservers = cfg.Rancher.Network.Dns.Nameservers
launchConfig.DnsConfig.Search = cfg.Rancher.Network.Dns.Search
if !cfg.Debug {
if !cfg.Rancher.Debug {
launchConfig.LogFile = config.SYSTEM_DOCKER_LOG
}
@@ -148,17 +148,17 @@ func getLaunchConfig(cfg *config.Config, dockerCfg *config.DockerConfig) (*docke
}
func RunInit() error {
var cfg config.Config
var cfg config.CloudConfig
os.Setenv("PATH", "/sbin:/usr/sbin:/usr/bin")
// Magic setting to tell Docker to do switch_root and not pivot_root
os.Setenv("DOCKER_RAMDISK", "true")
initFuncs := []config.InitFunc{
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return dockerlaunch.PrepareFs(&mountConfig)
},
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
newCfg, err := config.LoadConfig()
if err == nil {
newCfg, err = config.LoadConfig()
@@ -167,7 +167,7 @@ func RunInit() error {
*cfg = *newCfg
}
if cfg.Debug {
if cfg.Rancher.Debug {
cfgString, _ := config.Dump(false, true)
if cfgString != "" {
log.Debugf("Config: %s", cfgString)
@@ -178,7 +178,7 @@ func RunInit() error {
},
loadModules,
tryMountAndBootstrap,
func(cfg *config.Config) error {
func(cfg *config.CloudConfig) error {
return cfg.Reload()
},
loadModules,
@@ -189,7 +189,7 @@ func RunInit() error {
return err
}
launchConfig, args := getLaunchConfig(&cfg, &cfg.SystemDocker)
launchConfig, args := getLaunchConfig(&cfg, &cfg.Rancher.SystemDocker)
log.Info("Launching System Docker")
_, err := dockerlaunch.LaunchDocker(launchConfig, config.DOCKER_BIN, args...)

View File

@@ -44,15 +44,14 @@ func copyMoveRoot(rootfs string) error {
filename := path.Join("/", file.Name())
if filename == rootfs {
log.Debugf("Skipping Deleting %s", filename)
continue
}
log.Debugf("Deleting %s", filename)
//if err := os.Remove(filename); err != nil {
if err := os.RemoveAll(filename); err != nil {
return err
}
//}
}
return nil
@@ -90,7 +89,7 @@ func switchRoot(rootfs string) error {
}
log.Debugf("Successfully moved to new root at %s", rootfs)
os.Setenv("DOCKER_RAMDISK", "false")
os.Unsetenv("DOCKER_RAMDISK")
return nil
}

View File

@@ -7,6 +7,7 @@ import (
log "github.com/Sirupsen/logrus"
dockerClient "github.com/fsouza/go-dockerclient"
"github.com/rancherio/os/compose"
"github.com/rancherio/os/config"
"github.com/rancherio/os/docker"
)
@@ -88,42 +89,6 @@ func loadImages(cfg *config.CloudConfig) error {
return nil
}
func runContainers(cfg *config.CloudConfig) error {
return docker.RunServices("system-init", cfg, cfg.Rancher.Services)
}
func tailConsole(cfg *config.CloudConfig) error {
if !cfg.Rancher.Console.Tail {
return nil
}
client, err := docker.NewSystemClient()
if err != nil {
return err
}
console, ok := cfg.Rancher.Services[config.CONSOLE_CONTAINER]
if !ok {
log.Error("Console not found")
return nil
}
c := docker.NewContainerFromService(config.DOCKER_SYSTEM_HOST, config.CONSOLE_CONTAINER, console)
if c.Err != nil {
return c.Err
}
log.Infof("Tailing console : %s", c.Name)
return client.Logs(dockerClient.LogsOptions{
Container: c.Name,
Stdout: true,
Stderr: true,
Follow: true,
OutputStream: os.Stdout,
ErrorStream: os.Stderr,
})
}
func SysInit() error {
cfg, err := config.LoadConfig()
if err != nil {
@@ -132,7 +97,9 @@ func SysInit() error {
initFuncs := []config.InitFunc{
loadImages,
runContainers,
func(cfg *config.CloudConfig) error {
return compose.RunServices(cfg)
},
func(cfg *config.CloudConfig) error {
syscall.Sync()
return nil
@@ -141,7 +108,6 @@ func SysInit() error {
log.Infof("RancherOS %s started", config.VERSION)
return nil
},
tailConsole,
}
return config.RunInitFuncs(cfg, initFuncs)