mirror of
https://github.com/rancher/os.git
synced 2025-09-05 08:42:38 +00:00
Merge pull request #972 from joshwget/boot-with-invalid-config
Fix boot issues due to invalid configs
This commit is contained in:
@@ -96,11 +96,7 @@ func saveFiles(cloudConfigBytes, scriptBytes []byte, metadata datasource.Metadat
|
|||||||
}
|
}
|
||||||
|
|
||||||
func currentDatasource() (datasource.Datasource, error) {
|
func currentDatasource() (datasource.Datasource, error) {
|
||||||
cfg, err := rancherConfig.LoadConfig()
|
cfg := rancherConfig.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
log.WithFields(log.Fields{"err": err}).Error("Failed to read rancher config")
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
dss := getDatasources(cfg)
|
dss := getDatasources(cfg)
|
||||||
if len(dss) == 0 {
|
if len(dss) == 0 {
|
||||||
@@ -169,10 +165,7 @@ func fetchUserData() ([]byte, datasource.Metadata, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func executeCloudConfig() error {
|
func executeCloudConfig() error {
|
||||||
cc, err := rancherConfig.LoadConfig()
|
cc := rancherConfig.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(cc.SSHAuthorizedKeys) > 0 {
|
if len(cc.SSHAuthorizedKeys) > 0 {
|
||||||
authorizeSSHKeys("rancher", cc.SSHAuthorizedKeys, sshKeyName)
|
authorizeSSHKeys("rancher", cc.SSHAuthorizedKeys, sshKeyName)
|
||||||
|
@@ -12,10 +12,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func envAction(c *cli.Context) error {
|
func envAction(c *cli.Context) error {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
args := c.Args()
|
args := c.Args()
|
||||||
if len(args) == 0 {
|
if len(args) == 0 {
|
||||||
|
@@ -58,10 +58,7 @@ func installAction(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
image := c.String("image")
|
image := c.String("image")
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
log.WithFields(log.Fields{"err": err}).Fatal("ros install: failed to load config")
|
|
||||||
}
|
|
||||||
if image == "" {
|
if image == "" {
|
||||||
image = cfg.Rancher.Upgrade.Image + ":" + config.VERSION + config.SUFFIX
|
image = cfg.Rancher.Upgrade.Image + ":" + config.VERSION + config.SUFFIX
|
||||||
}
|
}
|
||||||
|
@@ -289,10 +289,6 @@ func parseBody(body []byte) (*Images, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getUpgradeUrl() (string, error) {
|
func getUpgradeUrl() (string, error) {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
|
|
||||||
return cfg.Rancher.Upgrade.Url, nil
|
return cfg.Rancher.Upgrade.Url, nil
|
||||||
}
|
}
|
||||||
|
@@ -18,11 +18,7 @@ type projectFactory struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (p *projectFactory) Create(c *cli.Context) (project.APIProject, error) {
|
func (p *projectFactory) Create(c *cli.Context) (project.APIProject, error) {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
return compose.GetProject(cfg, true)
|
return compose.GetProject(cfg, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -92,10 +88,7 @@ func updateIncludedServices(cfg *config.CloudConfig) error {
|
|||||||
|
|
||||||
func disable(c *cli.Context) error {
|
func disable(c *cli.Context) error {
|
||||||
changed := false
|
changed := false
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, service := range c.Args() {
|
for _, service := range c.Args() {
|
||||||
if _, ok := cfg.Rancher.ServicesInclude[service]; !ok {
|
if _, ok := cfg.Rancher.ServicesInclude[service]; !ok {
|
||||||
@@ -107,7 +100,7 @@ func disable(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if changed {
|
if changed {
|
||||||
if err = updateIncludedServices(cfg); err != nil {
|
if err := updateIncludedServices(cfg); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -117,10 +110,7 @@ func disable(c *cli.Context) error {
|
|||||||
|
|
||||||
func del(c *cli.Context) error {
|
func del(c *cli.Context) error {
|
||||||
changed := false
|
changed := false
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
for _, service := range c.Args() {
|
for _, service := range c.Args() {
|
||||||
if _, ok := cfg.Rancher.ServicesInclude[service]; !ok {
|
if _, ok := cfg.Rancher.ServicesInclude[service]; !ok {
|
||||||
@@ -131,7 +121,7 @@ func del(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if changed {
|
if changed {
|
||||||
if err = updateIncludedServices(cfg); err != nil {
|
if err := updateIncludedServices(cfg); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -140,10 +130,7 @@ func del(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func enable(c *cli.Context) error {
|
func enable(c *cli.Context) error {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
var enabledServices []string
|
var enabledServices []string
|
||||||
|
|
||||||
@@ -163,7 +150,7 @@ func enable(c *cli.Context) error {
|
|||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err = updateIncludedServices(cfg); err != nil {
|
if err := updateIncludedServices(cfg); err != nil {
|
||||||
logrus.Fatal(err)
|
logrus.Fatal(err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -172,10 +159,7 @@ func enable(c *cli.Context) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func list(c *cli.Context) error {
|
func list(c *cli.Context) error {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
logrus.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
clone := make(map[string]bool)
|
clone := make(map[string]bool)
|
||||||
for service, enabled := range cfg.Rancher.ServicesInclude {
|
for service, enabled := range cfg.Rancher.ServicesInclude {
|
||||||
|
@@ -75,10 +75,7 @@ func writeCerts(generateServer bool, hostname []string, cfg *config.CloudConfig,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := config.LoadConfig()
|
cfg = config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := util.WriteFileAtomic(certPath, []byte(cfg.Rancher.Docker.ServerCert), 0400); err != nil {
|
if err := util.WriteFileAtomic(certPath, []byte(cfg.Rancher.Docker.ServerCert), 0400); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -113,10 +110,7 @@ func writeCaCerts(cfg *config.CloudConfig, caCertPath, caKeyPath string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := config.LoadConfig()
|
cfg = config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := util.WriteFileAtomic(caCertPath, []byte(cfg.Rancher.Docker.CACert), 0400); err != nil {
|
if err := util.WriteFileAtomic(caCertPath, []byte(cfg.Rancher.Docker.CACert), 0400); err != nil {
|
||||||
return err
|
return err
|
||||||
@@ -171,11 +165,9 @@ func Generate(generateServer bool, outDir string, hostnames []string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return err
|
err := writeCaCerts(cfg, caCertPath, caKeyPath)
|
||||||
}
|
|
||||||
err = writeCaCerts(cfg, caCertPath, caKeyPath)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@@ -47,10 +47,7 @@ func Main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
nameservers := cfg.Rancher.Network.Dns.Nameservers
|
nameservers := cfg.Rancher.Network.Dns.Nameservers
|
||||||
search := cfg.Rancher.Network.Dns.Search
|
search := cfg.Rancher.Network.Dns.Search
|
||||||
|
@@ -28,10 +28,7 @@ const (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func Main() {
|
func Main() {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := startDocker(cfg); err != nil {
|
if err := startDocker(cfg); err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
@@ -22,11 +22,7 @@ import (
|
|||||||
|
|
||||||
func CreateService(cfg *config.CloudConfig, name string, serviceConfig *composeConfig.ServiceConfigV1) (project.Service, error) {
|
func CreateService(cfg *config.CloudConfig, name string, serviceConfig *composeConfig.ServiceConfigV1) (project.Service, error) {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
var err error
|
cfg = config.LoadConfig()
|
||||||
cfg, err = config.LoadConfig()
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
p, err := CreateServiceSet("once", cfg, map[string]*composeConfig.ServiceConfigV1{
|
p, err := CreateServiceSet("once", cfg, map[string]*composeConfig.ServiceConfigV1{
|
||||||
@@ -195,11 +191,7 @@ func newCoreServiceProject(cfg *config.CloudConfig, useNetwork bool) (*project.P
|
|||||||
p.AddListener(projectEvents)
|
p.AddListener(projectEvents)
|
||||||
|
|
||||||
p.ReloadCallback = func() error {
|
p.ReloadCallback = func() error {
|
||||||
var err error
|
cfg = config.LoadConfig()
|
||||||
cfg, err = config.LoadConfig()
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
environmentLookup.SetConfig(cfg)
|
environmentLookup.SetConfig(cfg)
|
||||||
|
|
||||||
|
@@ -72,11 +72,11 @@ func StringifyValues(data map[interface{}]interface{}) map[interface{}]interface
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Merge(bytes []byte) error {
|
func Merge(bytes []byte) error {
|
||||||
data, err := readConfig(bytes, false)
|
data, err := readConfigs(bytes, false, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
existing, err := readConfig(nil, false, CloudConfigFile)
|
existing, err := readConfigs(nil, false, true, CloudConfigFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
@@ -84,7 +84,7 @@ func Merge(bytes []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Export(private, full bool) (string, error) {
|
func Export(private, full bool) (string, error) {
|
||||||
rawCfg, err := LoadRawConfig(full)
|
rawCfg := loadRawDiskConfig(full)
|
||||||
if !private {
|
if !private {
|
||||||
rawCfg = filterPrivateKeys(rawCfg)
|
rawCfg = filterPrivateKeys(rawCfg)
|
||||||
}
|
}
|
||||||
@@ -94,10 +94,7 @@ func Export(private, full bool) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Get(key string) (interface{}, error) {
|
func Get(key string) (interface{}, error) {
|
||||||
cfg, err := LoadConfig()
|
cfg := LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
data := map[interface{}]interface{}{}
|
data := map[interface{}]interface{}{}
|
||||||
if err := util.ConvertIgnoreOmitEmpty(cfg, &data); err != nil {
|
if err := util.ConvertIgnoreOmitEmpty(cfg, &data); err != nil {
|
||||||
@@ -109,13 +106,11 @@ func Get(key string) (interface{}, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func Set(key string, value interface{}) error {
|
func Set(key string, value interface{}) error {
|
||||||
data := map[interface{}]interface{}{}
|
existing, err := readConfigs(nil, false, true, CloudConfigFile)
|
||||||
_, data = getOrSetVal(key, data, value)
|
|
||||||
|
|
||||||
existing, err := readConfig(nil, false, CloudConfigFile)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
return WriteToFile(util.Merge(existing, data), CloudConfigFile)
|
_, modified := getOrSetVal(key, existing, value)
|
||||||
|
return WriteToFile(modified, CloudConfigFile)
|
||||||
}
|
}
|
||||||
|
168
config/disk.go
168
config/disk.go
@@ -15,65 +15,51 @@ import (
|
|||||||
"github.com/rancher/os/util"
|
"github.com/rancher/os/util"
|
||||||
)
|
)
|
||||||
|
|
||||||
func NewConfig() map[interface{}]interface{} {
|
|
||||||
osConfig, _ := readConfig(nil, true, OsConfigFile, OemConfigFile)
|
|
||||||
return osConfig
|
|
||||||
}
|
|
||||||
|
|
||||||
func ReadConfig(bytes []byte, substituteMetadataVars bool, files ...string) (*CloudConfig, error) {
|
func ReadConfig(bytes []byte, substituteMetadataVars bool, files ...string) (*CloudConfig, error) {
|
||||||
if data, err := readConfig(bytes, substituteMetadataVars, files...); err == nil {
|
data, err := readConfigs(bytes, substituteMetadataVars, true, files...)
|
||||||
c := &CloudConfig{}
|
if err != nil {
|
||||||
if err := util.Convert(data, c); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
c, _ = amendNils(c)
|
|
||||||
c, _ = amendContainerNames(c)
|
|
||||||
return c, nil
|
|
||||||
} else {
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
c := &CloudConfig{}
|
||||||
|
if err := util.Convert(data, c); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
c = amendNils(c)
|
||||||
|
c = amendContainerNames(c)
|
||||||
|
return c, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadRawConfig(full bool) (map[interface{}]interface{}, error) {
|
func loadRawDiskConfig(full bool) map[interface{}]interface{} {
|
||||||
var base map[interface{}]interface{}
|
var rawCfg map[interface{}]interface{}
|
||||||
if full {
|
if full {
|
||||||
base = NewConfig()
|
rawCfg, _ = readConfigs(nil, true, false, OsConfigFile, OemConfigFile)
|
||||||
}
|
}
|
||||||
user, err := readConfigs()
|
|
||||||
if err != nil {
|
files := append(CloudConfigDirFiles(), CloudConfigFile)
|
||||||
return nil, err
|
additionalCfgs, _ := readConfigs(nil, true, false, files...)
|
||||||
}
|
|
||||||
cmdline, err := readCmdline()
|
return util.Merge(rawCfg, additionalCfgs)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
merged := util.Merge(base, util.Merge(user, cmdline))
|
|
||||||
merged, err = applyDebugFlags(merged)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return mergeMetadata(merged, readMetadata()), nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func LoadConfig() (*CloudConfig, error) {
|
func loadRawConfig() map[interface{}]interface{} {
|
||||||
rawCfg, err := LoadRawConfig(true)
|
rawCfg := loadRawDiskConfig(true)
|
||||||
if err != nil {
|
rawCfg = util.Merge(rawCfg, readCmdline())
|
||||||
return nil, err
|
rawCfg = applyDebugFlags(rawCfg)
|
||||||
}
|
return mergeMetadata(rawCfg, readMetadata())
|
||||||
|
}
|
||||||
|
|
||||||
|
func LoadConfig() *CloudConfig {
|
||||||
|
rawCfg := loadRawConfig()
|
||||||
|
|
||||||
cfg := &CloudConfig{}
|
cfg := &CloudConfig{}
|
||||||
if err := util.Convert(rawCfg, cfg); err != nil {
|
if err := util.Convert(rawCfg, cfg); err != nil {
|
||||||
return nil, err
|
log.Errorf("Failed to parse configuration: %s", err)
|
||||||
|
return &CloudConfig{}
|
||||||
}
|
}
|
||||||
cfg, err = amendNils(cfg)
|
cfg = amendNils(cfg)
|
||||||
if err != nil {
|
cfg = amendContainerNames(cfg)
|
||||||
return nil, err
|
return cfg
|
||||||
}
|
|
||||||
cfg, err = amendContainerNames(cfg)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return cfg, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CloudConfigDirFiles() []string {
|
func CloudConfigDirFiles() []string {
|
||||||
@@ -98,10 +84,10 @@ func CloudConfigDirFiles() []string {
|
|||||||
return finalFiles
|
return finalFiles
|
||||||
}
|
}
|
||||||
|
|
||||||
func applyDebugFlags(rawCfg map[interface{}]interface{}) (map[interface{}]interface{}, error) {
|
func applyDebugFlags(rawCfg map[interface{}]interface{}) map[interface{}]interface{} {
|
||||||
cfg := &CloudConfig{}
|
cfg := &CloudConfig{}
|
||||||
if err := util.Convert(rawCfg, cfg); err != nil {
|
if err := util.Convert(rawCfg, cfg); err != nil {
|
||||||
return nil, err
|
return rawCfg
|
||||||
}
|
}
|
||||||
|
|
||||||
if cfg.Rancher.Debug {
|
if cfg.Rancher.Debug {
|
||||||
@@ -116,7 +102,7 @@ func applyDebugFlags(rawCfg map[interface{}]interface{}) (map[interface{}]interf
|
|||||||
|
|
||||||
_, rawCfg = getOrSetVal("rancher.docker.args", rawCfg, cfg.Rancher.Docker.Args)
|
_, rawCfg = getOrSetVal("rancher.docker.args", rawCfg, cfg.Rancher.Docker.Args)
|
||||||
_, rawCfg = getOrSetVal("rancher.system_docker.args", rawCfg, cfg.Rancher.SystemDocker.Args)
|
_, rawCfg = getOrSetVal("rancher.system_docker.args", rawCfg, cfg.Rancher.SystemDocker.Args)
|
||||||
return rawCfg, nil
|
return rawCfg
|
||||||
}
|
}
|
||||||
|
|
||||||
// mergeMetadata merges certain options from md (meta-data from the datasource)
|
// mergeMetadata merges certain options from md (meta-data from the datasource)
|
||||||
@@ -172,35 +158,26 @@ func readMetadata() datasource.Metadata {
|
|||||||
return metadata
|
return metadata
|
||||||
}
|
}
|
||||||
|
|
||||||
func readConfigs() (map[interface{}]interface{}, error) {
|
func readCmdline() map[interface{}]interface{} {
|
||||||
files := append(CloudConfigDirFiles(), CloudConfigFile)
|
|
||||||
data, err := readConfig(nil, true, files...)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
return data, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func readCmdline() (map[interface{}]interface{}, error) {
|
|
||||||
log.Debug("Reading config cmdline")
|
log.Debug("Reading config cmdline")
|
||||||
cmdLine, err := ioutil.ReadFile("/proc/cmdline")
|
cmdLine, err := ioutil.ReadFile("/proc/cmdline")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.WithFields(log.Fields{"err": err}).Error("Failed to read kernel params")
|
log.WithFields(log.Fields{"err": err}).Error("Failed to read kernel params")
|
||||||
return nil, err
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if len(cmdLine) == 0 {
|
if len(cmdLine) == 0 {
|
||||||
return nil, nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
log.Debugf("Config cmdline %s", cmdLine)
|
log.Debugf("Config cmdline %s", cmdLine)
|
||||||
|
|
||||||
cmdLineObj := parseCmdline(strings.TrimSpace(string(cmdLine)))
|
cmdLineObj := parseCmdline(strings.TrimSpace(string(cmdLine)))
|
||||||
|
|
||||||
return cmdLineObj, nil
|
return cmdLineObj
|
||||||
}
|
}
|
||||||
|
|
||||||
func amendNils(c *CloudConfig) (*CloudConfig, error) {
|
func amendNils(c *CloudConfig) *CloudConfig {
|
||||||
t := *c
|
t := *c
|
||||||
if t.Rancher.Environment == nil {
|
if t.Rancher.Environment == nil {
|
||||||
t.Rancher.Environment = map[string]string{}
|
t.Rancher.Environment = map[string]string{}
|
||||||
@@ -217,10 +194,10 @@ func amendNils(c *CloudConfig) (*CloudConfig, error) {
|
|||||||
if t.Rancher.ServicesInclude == nil {
|
if t.Rancher.ServicesInclude == nil {
|
||||||
t.Rancher.ServicesInclude = map[string]bool{}
|
t.Rancher.ServicesInclude = map[string]bool{}
|
||||||
}
|
}
|
||||||
return &t, nil
|
return &t
|
||||||
}
|
}
|
||||||
|
|
||||||
func amendContainerNames(c *CloudConfig) (*CloudConfig, error) {
|
func amendContainerNames(c *CloudConfig) *CloudConfig {
|
||||||
for _, scm := range []map[string]*composeConfig.ServiceConfigV1{
|
for _, scm := range []map[string]*composeConfig.ServiceConfigV1{
|
||||||
c.Rancher.Autoformat,
|
c.Rancher.Autoformat,
|
||||||
c.Rancher.BootstrapContainers,
|
c.Rancher.BootstrapContainers,
|
||||||
@@ -230,7 +207,7 @@ func amendContainerNames(c *CloudConfig) (*CloudConfig, error) {
|
|||||||
v.ContainerName = k
|
v.ContainerName = k
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return c, nil
|
return c
|
||||||
}
|
}
|
||||||
|
|
||||||
func WriteToFile(data interface{}, filename string) error {
|
func WriteToFile(data interface{}, filename string) error {
|
||||||
@@ -242,7 +219,7 @@ func WriteToFile(data interface{}, filename string) error {
|
|||||||
return util.WriteFileAtomic(filename, content, 400)
|
return util.WriteFileAtomic(filename, content, 400)
|
||||||
}
|
}
|
||||||
|
|
||||||
func readConfig(bytes []byte, substituteMetadataVars bool, files ...string) (map[interface{}]interface{}, error) {
|
func readConfigs(bytes []byte, substituteMetadataVars, returnErr bool, files ...string) (map[interface{}]interface{}, error) {
|
||||||
// You can't just overlay yaml bytes on to maps, it won't merge, but instead
|
// You can't just overlay yaml bytes on to maps, it won't merge, but instead
|
||||||
// just override the keys and not merge the map values.
|
// just override the keys and not merge the map values.
|
||||||
left := make(map[interface{}]interface{})
|
left := make(map[interface{}]interface{})
|
||||||
@@ -250,7 +227,11 @@ func readConfig(bytes []byte, substituteMetadataVars bool, files ...string) (map
|
|||||||
for _, file := range files {
|
for _, file := range files {
|
||||||
content, err := readConfigFile(file)
|
content, err := readConfigFile(file)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
if returnErr {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Errorf("Failed to read config file %s: %s", file, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
if len(content) == 0 {
|
if len(content) == 0 {
|
||||||
continue
|
continue
|
||||||
@@ -262,24 +243,53 @@ func readConfig(bytes []byte, substituteMetadataVars bool, files ...string) (map
|
|||||||
right := make(map[interface{}]interface{})
|
right := make(map[interface{}]interface{})
|
||||||
err = yaml.Unmarshal(content, &right)
|
err = yaml.Unmarshal(content, &right)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
if returnErr {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Errorf("Failed to parse config file %s: %s", file, err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
// Verify there are no issues converting to CloudConfig
|
||||||
|
c := &CloudConfig{}
|
||||||
|
if err := util.Convert(right, c); err != nil {
|
||||||
|
if returnErr {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Errorf("Failed to parse config file %s: %s", file, err)
|
||||||
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
left = util.Merge(left, right)
|
left = util.Merge(left, right)
|
||||||
}
|
}
|
||||||
|
|
||||||
if bytes != nil && len(bytes) > 0 {
|
if bytes == nil || len(bytes) == 0 {
|
||||||
right := make(map[interface{}]interface{})
|
return left, nil
|
||||||
if substituteMetadataVars {
|
|
||||||
bytes = substituteVars(bytes, metadata)
|
|
||||||
}
|
|
||||||
if err := yaml.Unmarshal(bytes, &right); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
left = util.Merge(left, right)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
right := make(map[interface{}]interface{})
|
||||||
|
if substituteMetadataVars {
|
||||||
|
bytes = substituteVars(bytes, metadata)
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := yaml.Unmarshal(bytes, &right); err != nil {
|
||||||
|
if returnErr {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Errorf("Failed to parse bytes: %s", err)
|
||||||
|
return left, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
c := &CloudConfig{}
|
||||||
|
if err := util.Convert(right, c); err != nil {
|
||||||
|
if returnErr {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
log.Errorf("Failed to parse bytes: %s", err)
|
||||||
|
return left, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
left = util.Merge(left, right)
|
||||||
return left, nil
|
return left, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -80,10 +80,7 @@ func (s *Service) shouldRebuild(ctx context.Context) (bool, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return false, err
|
|
||||||
}
|
|
||||||
for _, c := range containers {
|
for _, c := range containers {
|
||||||
outOfSync, err := c.(*docker.Container).OutOfSync(ctx, s.Service.Config().Image)
|
outOfSync, err := c.(*docker.Container).OutOfSync(ctx, s.Service.Config().Image)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
12
init/init.go
12
init/init.go
@@ -117,10 +117,7 @@ func mountState(cfg *config.CloudConfig) error {
|
|||||||
|
|
||||||
func mountOem(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func mountOem(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
if cfg == nil {
|
if cfg == nil {
|
||||||
var err error
|
cfg = config.LoadConfig()
|
||||||
if cfg, err = config.LoadConfig(); err != nil {
|
|
||||||
return cfg, err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if err := mountConfigured("oem", cfg.Rancher.State.OemDev, cfg.Rancher.State.OemFsType, config.OEM); err != nil {
|
if err := mountConfigured("oem", cfg.Rancher.State.OemDev, cfg.Rancher.State.OemFsType, config.OEM); err != nil {
|
||||||
log.Debugf("Not mounting OEM: %v", err)
|
log.Debugf("Not mounting OEM: %v", err)
|
||||||
@@ -198,10 +195,7 @@ func RunInit() error {
|
|||||||
},
|
},
|
||||||
mountOem,
|
mountOem,
|
||||||
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return cfg, err
|
|
||||||
}
|
|
||||||
|
|
||||||
if cfg.Rancher.Debug {
|
if cfg.Rancher.Debug {
|
||||||
cfgString, err := config.Export(false, true)
|
cfgString, err := config.Export(false, true)
|
||||||
@@ -217,7 +211,7 @@ func RunInit() error {
|
|||||||
loadModules,
|
loadModules,
|
||||||
tryMountAndBootstrap,
|
tryMountAndBootstrap,
|
||||||
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
func(_ *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
return config.LoadConfig()
|
return config.LoadConfig(), nil
|
||||||
},
|
},
|
||||||
loadModules,
|
loadModules,
|
||||||
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
func(c *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
|
@@ -89,12 +89,9 @@ func loadImages(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func SysInit() error {
|
func SysInit() error {
|
||||||
cfg, err := config.LoadConfig()
|
cfg := config.LoadConfig()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = config.ChainCfgFuncs(cfg,
|
_, err := config.ChainCfgFuncs(cfg,
|
||||||
loadImages,
|
loadImages,
|
||||||
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
func(cfg *config.CloudConfig) (*config.CloudConfig, error) {
|
||||||
p, err := compose.GetProject(cfg, false)
|
p, err := compose.GetProject(cfg, false)
|
||||||
|
Reference in New Issue
Block a user