| package misc | |
| import ( | |
| "io" | |
| "os" | |
| "path/filepath" | |
| log "github.com/sirupsen/logrus" | |
| ) | |
| func CopyConfigTemplate(src, dst string) error { | |
| in, err := os.Open(src) | |
| if err != nil { | |
| return err | |
| } | |
| defer func() { | |
| if errClose := in.Close(); errClose != nil { | |
| log.WithError(errClose).Warn("failed to close source config file") | |
| } | |
| }() | |
| if err = os.MkdirAll(filepath.Dir(dst), 0o700); err != nil { | |
| return err | |
| } | |
| out, err := os.OpenFile(dst, os.O_CREATE|os.O_WRONLY|os.O_TRUNC, 0o600) | |
| if err != nil { | |
| return err | |
| } | |
| defer func() { | |
| if errClose := out.Close(); errClose != nil { | |
| log.WithError(errClose).Warn("failed to close destination config file") | |
| } | |
| }() | |
| if _, err = io.Copy(out, in); err != nil { | |
| return err | |
| } | |
| return out.Sync() | |
| } | |