~ knotless Search/
↑↓ move↵ open⇧↵ all results
0
0
main
48 lines · 1.1 KB Raw History
package guestdisk

import (
	"fmt"
	"os"

	"github.com/johnandersen777/socialweb-computer-kcp/internal/guestseed"
)

func Clone(src, dst string) error {
	in, err := os.Open(src)
	if err != nil {
		return fmt.Errorf("guestdisk: %w", err)
	}
	defer in.Close()
	out, err := os.OpenFile(dst, os.O_CREATE|os.O_EXCL|os.O_WRONLY, 0o600)
	if err != nil {
		return fmt.Errorf("guestdisk: %w", err)
	}
	if err := cloneInto(out, in); err != nil {
		out.Close()
		os.Remove(dst)
		return fmt.Errorf("guestdisk: copying %s to %s: %w", src, dst, err)
	}
	return out.Close()
}

func GrowTo(path string, mib int) error {
	if mib <= 0 {
		return nil
	}
	st, err := os.Stat(path)
	if err != nil {
		return fmt.Errorf("guestdisk: %w", err)
	}
	want := int64(mib) << 20
	if st.Size() >= want {
		return nil
	}
	if err := os.Truncate(path, want); err != nil {
		return fmt.Errorf("guestdisk: growing %s to %d MiB: %w", path, mib, err)
	}
	return nil
}

func WriteSeed(path string, userData, metaData, networkConfig []byte) error {
	return guestseed.WriteFile(path, guestseed.Seed{UserData: userData, MetaData: metaData, NetworkConfig: networkConfig})
}