1
0
mirror of https://github.com/rancher/os.git synced 2025-07-10 13:23:03 +00:00
os/pkg/init/configfiles/configfiles.go

93 lines
2.5 KiB
Go
Raw Normal View History

2018-09-16 04:55:26 +00:00
package configfiles
import (
"io/ioutil"
"os"
"path/filepath"
"strings"
"github.com/rancher/os/config"
"github.com/rancher/os/pkg/log"
"github.com/rancher/os/pkg/util"
)
var (
ConfigFiles = map[string][]byte{}
)
func ReadConfigFiles(cfg *config.CloudConfig) (*config.CloudConfig, error) {
filesToCopy := []string{
config.CloudConfigInitFile,
config.CloudConfigScriptFile,
config.CloudConfigBootFile,
config.CloudConfigNetworkFile,
config.MetaDataFile,
config.EtcResolvConfFile,
}
// And all the files in /var/log/boot/
// TODO: I wonder if we can put this code into the log module, and have things write to the buffer until we FsReady()
bootLog := "/var/log/"
if files, err := ioutil.ReadDir(bootLog); err == nil {
for _, file := range files {
if !file.IsDir() {
filePath := filepath.Join(bootLog, file.Name())
filesToCopy = append(filesToCopy, filePath)
log.Debugf("Swizzle: Found %s to save", filePath)
}
}
}
bootLog = "/var/log/boot/"
if files, err := ioutil.ReadDir(bootLog); err == nil {
for _, file := range files {
filePath := filepath.Join(bootLog, file.Name())
filesToCopy = append(filesToCopy, filePath)
log.Debugf("Swizzle: Found %s to save", filePath)
}
}
for _, name := range filesToCopy {
if _, err := os.Lstat(name); !os.IsNotExist(err) {
content, err := ioutil.ReadFile(name)
if err != nil {
log.Errorf("read cfg file (%s) %s", name, err)
continue
}
log.Debugf("Swizzle: Saved %s to memory", name)
ConfigFiles[name] = content
}
}
return cfg, nil
}
func WriteConfigFiles(cfg *config.CloudConfig) (*config.CloudConfig, error) {
for name, content := range ConfigFiles {
dirMode := os.ModeDir | 0755
fileMode := os.FileMode(0444)
if strings.HasPrefix(name, "/var/lib/rancher/conf/") {
// only make the conf files harder to get to
dirMode = os.ModeDir | 0700
if name == config.CloudConfigScriptFile {
fileMode = os.FileMode(0755)
} else {
fileMode = os.FileMode(0400)
}
}
if err := os.MkdirAll(filepath.Dir(name), dirMode); err != nil {
log.Error(err)
}
if err := util.WriteFileAtomic(name, content, fileMode); err != nil {
log.Error(err)
}
log.Infof("Swizzle: Wrote file to %s", name)
}
if err := os.MkdirAll(config.VarRancherDir, os.ModeDir|0755); err != nil {
log.Error(err)
}
if err := os.Chmod(config.VarRancherDir, os.ModeDir|0755); err != nil {
log.Error(err)
}
log.FsReady()
log.Debugf("WARNING: switchroot and mount OEM2 and BOOT phases not written to log file")
2018-09-16 04:55:26 +00:00
return cfg, nil
}