mirror of
https://github.com/rancher/os.git
synced 2025-06-25 14:31:33 +00:00
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
|
package control
|
||
|
|
||
|
import (
|
||
|
log "github.com/Sirupsen/logrus"
|
||
|
|
||
|
"github.com/codegangsta/cli"
|
||
|
"github.com/rancherio/os/config"
|
||
|
"github.com/rancherio/os/docker"
|
||
|
)
|
||
|
|
||
|
func parseContainers(cfg *config.Config) map[string]*docker.Container {
|
||
|
result := map[string]*docker.Container{}
|
||
|
|
||
|
for _, containerConfig := range cfg.SystemContainers {
|
||
|
container := docker.NewContainer(config.DOCKER_SYSTEM_HOST, &containerConfig)
|
||
|
if containerConfig.Id != "" {
|
||
|
result[containerConfig.Id] = container
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return result
|
||
|
}
|
||
|
|
||
|
func reload(c *cli.Context) {
|
||
|
cfg, err := config.LoadConfig()
|
||
|
if err != nil {
|
||
|
log.Fatal(err)
|
||
|
}
|
||
|
|
||
|
containers := parseContainers(cfg)
|
||
|
toStart := make([]*docker.Container, 0, len(c.Args()))
|
||
|
|
||
|
for _, id := range c.Args() {
|
||
|
if container, ok := containers[id]; ok {
|
||
|
toStart = append(toStart, container.Stage())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var firstErr error
|
||
|
for _, c := range toStart {
|
||
|
err := c.Start().Err
|
||
|
if err != nil {
|
||
|
log.Errorf("Failed to start %s : %v", c.ContainerCfg.Id, err)
|
||
|
if firstErr != nil {
|
||
|
firstErr = err
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if firstErr != nil {
|
||
|
log.Fatal(firstErr)
|
||
|
}
|
||
|
}
|