68 lines
1.1 KiB
Go
68 lines
1.1 KiB
Go
|
package apply
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"io/ioutil"
|
||
|
"os"
|
||
|
"path/filepath"
|
||
|
"strings"
|
||
|
|
||
|
"novit.nc/direktil/inits/pkg/vars"
|
||
|
"novit.nc/direktil/pkg/config"
|
||
|
dlog "novit.nc/direktil/pkg/log"
|
||
|
)
|
||
|
|
||
|
// Files writes the files from the given config
|
||
|
func Files(cfg *config.Config, log *dlog.Log) (err error) {
|
||
|
err = writeFile(
|
||
|
"/root/.ssh/authorized_keys",
|
||
|
[]byte(strings.Join(cfg.RootUser.AuthorizedKeys, "\n")),
|
||
|
0600, 0700, cfg, log,
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for _, file := range cfg.Files {
|
||
|
mode := file.Mode
|
||
|
if mode == 0 {
|
||
|
mode = 0644
|
||
|
}
|
||
|
|
||
|
content := []byte(file.Content)
|
||
|
|
||
|
err = writeFile(
|
||
|
file.Path,
|
||
|
content,
|
||
|
mode,
|
||
|
0755,
|
||
|
cfg,
|
||
|
log,
|
||
|
)
|
||
|
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func writeFile(path string, content []byte, fileMode, dirMode os.FileMode,
|
||
|
cfg *config.Config, log *dlog.Log) (err error) {
|
||
|
|
||
|
if err = os.MkdirAll(filepath.Dir(path), dirMode); err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
content = vars.Substitute(content, cfg)
|
||
|
|
||
|
log.Printf("writing %q, mode %04o, %d bytes", path, fileMode, len(content))
|
||
|
if err = ioutil.WriteFile(path, content, fileMode); err != nil {
|
||
|
err = fmt.Errorf("failed to write %s: %v", path, err)
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|