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:
commit
b6847b40d0
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
71
init/init.go
71
init/init.go
@ -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
|
||||||
}
|
}
|
||||||
|
@ -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
15
main.go
@ -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)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user