50
internal/pkg/util/copyfile.go
Normal file
50
internal/pkg/util/copyfile.go
Normal file
@@ -0,0 +1,50 @@
|
||||
package util
|
||||
|
||||
import (
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/hpcng/warewulf/internal/pkg/wwlog"
|
||||
)
|
||||
|
||||
func CopyFile(src string, dst string) error {
|
||||
|
||||
wwlog.Printf(wwlog.DEBUG, "Copying '%s' to '%s'\n", src, dst)
|
||||
|
||||
// Open source file
|
||||
srcFD, err := os.Open(src)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not open source file %s: %s\n", src, err)
|
||||
return err
|
||||
}
|
||||
defer srcFD.Close()
|
||||
|
||||
// Confirm source file structure is readable
|
||||
_, err = srcFD.Stat()
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not stat source file %s: %s\n", src, err)
|
||||
return err
|
||||
}
|
||||
|
||||
dstFD, err := os.Create(dst)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Could not create destination file %s: %s\n", dst, err)
|
||||
return err
|
||||
}
|
||||
defer dstFD.Close()
|
||||
|
||||
bytes, err := io.Copy(srcFD, dstFD)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "File copy from %s to %s failed.\n %s\n", src, dst, err)
|
||||
return err
|
||||
} else {
|
||||
wwlog.Printf(wwlog.DEBUG, "Copied %d bytes from %s to %s.\n", bytes, src, dst)
|
||||
}
|
||||
|
||||
err = CopyUIDGID(src, dst)
|
||||
if err != nil {
|
||||
wwlog.Printf(wwlog.ERROR, "Ownership copy from %s to %s failed.\n %s\n", src, dst, err)
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -73,37 +73,6 @@ func RandomString(n int) string {
|
||||
return string(b)
|
||||
}
|
||||
|
||||
func CopyFile(source string, dest string) error {
|
||||
wwlog.Printf(wwlog.DEBUG, "Copying '%s' to '%s'\n", source, dest)
|
||||
sourceFD, err := os.Open(source)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
finfo, err := sourceFD.Stat()
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to stat source")
|
||||
}
|
||||
|
||||
destFD, err := os.OpenFile(dest, os.O_RDWR|os.O_CREATE, finfo.Mode())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
_, err = io.Copy(destFD, sourceFD)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = CopyUIDGID(source, dest)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "failed to set ownership")
|
||||
}
|
||||
sourceFD.Close()
|
||||
|
||||
return destFD.Close()
|
||||
}
|
||||
|
||||
func CopyFiles(source string, dest string) error {
|
||||
err := filepath.Walk(source, func(location string, info os.FileInfo, err error) error {
|
||||
if err != nil {
|
||||
|
||||
Reference in New Issue
Block a user