1
0
mirror of https://github.com/rancher/os.git synced 2025-06-28 07:46:49 +00:00

Merge pull request #1831 from SvenDowideit/label-init-stages

give init stages a label so the log tells us what is starting, not what number it is.
This commit is contained in:
Sven Dowideit 2017-05-04 09:21:48 +10:00 committed by GitHub
commit b6847b40d0
5 changed files with 99 additions and 65 deletions

View File

@ -10,16 +10,29 @@ import (
) )
type CfgFunc func(*CloudConfig) (*CloudConfig, error) type CfgFunc func(*CloudConfig) (*CloudConfig, error)
type CfgFuncData struct {
Name string
Func CfgFunc
}
type CfgFuncs []CfgFuncData
func ChainCfgFuncs(cfg *CloudConfig, cfgFuncs ...CfgFunc) (*CloudConfig, error) { func ChainCfgFuncs(cfg *CloudConfig, cfgFuncs CfgFuncs) (*CloudConfig, error) {
for i, cfgFunc := range cfgFuncs { len := len(cfgFuncs)
log.Debugf("[%d/%d] Starting", i+1, len(cfgFuncs)) for c, d := range cfgFuncs {
i := c + 1
name := d.Name
cfgFunc := d.Func
if cfg == nil {
log.Infof("[%d/%d] Starting %s WITH NIL cfg", i, len, name)
} else {
log.Infof("[%d/%d] Starting %s", i, len, name)
}
var err error var err error
if cfg, err = cfgFunc(cfg); err != nil { if cfg, err = cfgFunc(cfg); err != nil {
log.Errorf("Failed [%d/%d] %s", i+1, len(cfgFuncs), err) log.Errorf("Failed [%d/%d] %s: %s", i, len, name, err)
return cfg, err return cfg, err
} }
log.Debugf("[%d/%d] Done %d%%", i+1, len(cfgFuncs), ((i + 1) * 100 / len(cfgFuncs))) log.Debugf("[%d/%d] Done %s", i, len, name)
} }
return cfg, nil return cfg, nil
} }

View File

@ -68,8 +68,10 @@ func bootstrap(cfg *config.CloudConfig) error {
defer stopDocker(c) defer stopDocker(c)
_, err = config.ChainCfgFuncs(cfg, _, err = config.ChainCfgFuncs(cfg,
loadImages, []config.CfgFuncData{
bootstrapServices) config.CfgFuncData{"bootstrap loadImages", loadImages},
config.CfgFuncData{"bootstrap Services", bootstrapServices},
})
return err return err
} }
@ -82,7 +84,9 @@ func runCloudInitServices(cfg *config.CloudConfig) error {
defer stopDocker(c) defer stopDocker(c)
_, err = config.ChainCfgFuncs(cfg, _, err = config.ChainCfgFuncs(cfg,
loadImages, []config.CfgFuncData{
runCloudInitServiceSet) config.CfgFuncData{"cloudinit loadImages", loadImages},
config.CfgFuncData{"cloudinit Services", runCloudInitServiceSet},
})
return err return err
} }

View File

@ -90,7 +90,8 @@ func sysInit(c *config.CloudConfig) (*config.CloudConfig, error) {
} }
func MainInit() { func MainInit() {
// TODO: log.InitLogger() log.InitLogger()
log.Infof("MainInit() start")
if err := RunInit(); err != nil { if err := RunInit(); err != nil {
log.Fatal(err) log.Fatal(err)
} }
@ -223,19 +224,19 @@ func RunInit() error {
configFiles := make(map[string][]byte) configFiles := make(map[string][]byte)
initFuncs := []config.CfgFunc{ initFuncs := []config.CfgFuncData{
func(c *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"preparefs", func(c *config.CloudConfig) (*config.CloudConfig, error) {
return c, dfs.PrepareFs(&mountConfig) return c, dfs.PrepareFs(&mountConfig)
}, }},
func(c *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"save init cmdline", func(c *config.CloudConfig) (*config.CloudConfig, error) {
// will this be passed to cloud-init-save? // will this be passed to cloud-init-save?
cmdLineArgs := strings.Join(os.Args, " ") cmdLineArgs := strings.Join(os.Args, " ")
config.SaveInitCmdline(cmdLineArgs) config.SaveInitCmdline(cmdLineArgs)
return c, nil return c, nil
}, }},
mountOem, config.CfgFuncData{"mount OEM", mountOem},
func(_ *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"debug save cfg", func(_ *config.CloudConfig) (*config.CloudConfig, error) {
cfg := config.LoadConfig() cfg := config.LoadConfig()
if cfg.Rancher.Debug { if cfg.Rancher.Debug {
@ -248,9 +249,9 @@ func RunInit() error {
} }
return cfg, nil return cfg, nil
}, }},
loadModules, config.CfgFuncData{"load modules", loadModules},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"b2d env", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
if util.ResolveDevice("LABEL=B2D_STATE") != "" { if util.ResolveDevice("LABEL=B2D_STATE") != "" {
boot2DockerEnvironment = true boot2DockerEnvironment = true
cfg.Rancher.State.Dev = "LABEL=B2D_STATE" cfg.Rancher.State.Dev = "LABEL=B2D_STATE"
@ -286,23 +287,23 @@ func RunInit() error {
} }
return config.LoadConfig(), nil return config.LoadConfig(), nil
}, }},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"mount and bootstrap", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
var err error var err error
cfg, shouldSwitchRoot, err = tryMountAndBootstrap(cfg) cfg, shouldSwitchRoot, err = tryMountAndBootstrap(cfg)
if err != nil { if err != nil {
return nil, err return nil, err
} }
return cfg, nil return cfg, nil
}, }},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"cloud-init", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
cfg.Rancher.CloudInit.Datasources = config.LoadConfigWithPrefix(state).Rancher.CloudInit.Datasources cfg.Rancher.CloudInit.Datasources = config.LoadConfigWithPrefix(state).Rancher.CloudInit.Datasources
if err := config.Set("rancher.cloud_init.datasources", cfg.Rancher.CloudInit.Datasources); err != nil { if err := config.Set("rancher.cloud_init.datasources", cfg.Rancher.CloudInit.Datasources); err != nil {
log.Error(err) log.Error(err)
} }
log.Debug("init: runCloudInitServices()") log.Debug("init, runCloudInitServices()")
if err := runCloudInitServices(cfg); err != nil { if err := runCloudInitServices(cfg); err != nil {
log.Error(err) log.Error(err)
} }
@ -311,8 +312,8 @@ func RunInit() error {
cfg = config.LoadConfig() cfg = config.LoadConfig()
return cfg, nil return cfg, nil
}, }},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"read cfg files", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
filesToCopy := []string{ filesToCopy := []string{
config.CloudConfigInitFile, config.CloudConfigInitFile,
config.CloudConfigBootFile, config.CloudConfigBootFile,
@ -328,8 +329,8 @@ func RunInit() error {
configFiles[name] = content configFiles[name] = content
} }
return cfg, nil return cfg, nil
}, }},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"switchroot", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
if !shouldSwitchRoot { if !shouldSwitchRoot {
return cfg, nil return cfg, nil
} }
@ -338,9 +339,9 @@ func RunInit() error {
return cfg, err return cfg, err
} }
return cfg, nil return cfg, nil
}, }},
mountOem, config.CfgFuncData{"mount OEM2", mountOem},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"write cfg files", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
for name, content := range configFiles { for name, content := range configFiles {
if err := os.MkdirAll(filepath.Dir(name), os.ModeDir|0700); err != nil { if err := os.MkdirAll(filepath.Dir(name), os.ModeDir|0700); err != nil {
log.Error(err) log.Error(err)
@ -356,8 +357,8 @@ func RunInit() error {
log.Error(err) log.Error(err)
} }
return cfg, nil return cfg, nil
}, }},
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"b2d Env", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
if boot2DockerEnvironment { if boot2DockerEnvironment {
if err := config.Set("rancher.state.dev", cfg.Rancher.State.Dev); err != nil { if err := config.Set("rancher.state.dev", cfg.Rancher.State.Dev); err != nil {
log.Errorf("Failed to update rancher.state.dev: %v", err) log.Errorf("Failed to update rancher.state.dev: %v", err)
@ -368,21 +369,21 @@ func RunInit() error {
} }
return config.LoadConfig(), nil return config.LoadConfig(), nil
}, }},
func(c *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"preparefs2", func(c *config.CloudConfig) (*config.CloudConfig, error) {
return c, dfs.PrepareFs(&mountConfig) return c, dfs.PrepareFs(&mountConfig)
}, }},
loadModules, config.CfgFuncData{"load modules2", loadModules},
func(c *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"set proxy env", func(c *config.CloudConfig) (*config.CloudConfig, error) {
network.SetProxyEnvironmentVariables(c) network.SetProxyEnvironmentVariables(c)
return c, nil return c, nil
}, }},
initializeSelinux, config.CfgFuncData{"init SELinux", initializeSelinux},
setupSharedRoot, config.CfgFuncData{"setupSharedRoot", setupSharedRoot},
sysInit, config.CfgFuncData{"sysinit", sysInit},
} }
cfg, err := config.ChainCfgFuncs(nil, initFuncs...) cfg, err := config.ChainCfgFuncs(nil, initFuncs)
if err != nil { if err != nil {
return err return err
} }

View File

@ -101,26 +101,27 @@ func SysInit() error {
} }
_, err := config.ChainCfgFuncs(cfg, _, err := config.ChainCfgFuncs(cfg,
loadImages, []config.CfgFuncData{
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { config.CfgFuncData{"loadImages", loadImages},
p, err := compose.GetProject(cfg, false, true) config.CfgFuncData{"start project", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
if err != nil { p, err := compose.GetProject(cfg, false, true)
return cfg, err if err != nil {
} return cfg, err
return cfg, p.Up(context.Background(), options.Up{ }
Create: options.Create{ return cfg, p.Up(context.Background(), options.Up{
NoRecreate: true, Create: options.Create{
}, NoRecreate: true,
Log: cfg.Rancher.Log, },
}) Log: cfg.Rancher.Log,
}, })
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { }},
syscall.Sync() config.CfgFuncData{"sync", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
return cfg, nil syscall.Sync()
}, return cfg, nil
func(cfg *config.CloudConfig) (*config.CloudConfig, error) { }},
log.Infof("RancherOS %s started", config.Version) config.CfgFuncData{"banner", func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
return cfg, nil log.Infof("RancherOS %s started", config.Version)
}) return cfg, nil
}}})
return err return err
} }

15
main.go
View File

@ -1,6 +1,9 @@
package main package main
import ( import (
"fmt"
"os"
"github.com/containernetworking/cni/plugins/ipam/host-local" "github.com/containernetworking/cni/plugins/ipam/host-local"
"github.com/containernetworking/cni/plugins/main/bridge" "github.com/containernetworking/cni/plugins/main/bridge"
"github.com/docker/docker/docker" "github.com/docker/docker/docker"
@ -42,6 +45,18 @@ var entrypoints = map[string]func(){
} }
func main() { func main() {
if 0 == 1 {
// TODO: move this into a "dev/debug +build"
fmt.Fprintf(os.Stderr, "ros main(%s) ppid:%d - print to stdio\n", os.Args[0], os.Getppid())
filename := "/dev/kmsg"
f, err := os.OpenFile(filename, os.O_WRONLY, 0644)
if err == nil {
fmt.Fprintf(f, "ros main(%s) ppid:%d - print to %s\n", os.Args[0], os.Getppid(), filename)
}
f.Close()
}
for name, f := range entrypoints { for name, f := range entrypoints {
reexec.Register(name, f) reexec.Register(name, f)
} }