From 62ff4e782bc057d277a7c41fa35a665e2aeca045 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Mon, 6 Jul 2026 23:56:32 +0300 Subject: initial package management --- internal/resource/pkg/pkg.go | 47 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 internal/resource/pkg/pkg.go (limited to 'internal/resource/pkg/pkg.go') diff --git a/internal/resource/pkg/pkg.go b/internal/resource/pkg/pkg.go new file mode 100644 index 0000000..72f098c --- /dev/null +++ b/internal/resource/pkg/pkg.go @@ -0,0 +1,47 @@ +package pkg + +import ( + "errors" + "os" +) + +type Ensure int + +const ( + PkgPresent Ensure = iota + PkgAbsent + PkgLatest +) + +type applyFunc func(name string, ensure Ensure) error + +func Present(name string, ensure Ensure) error { + bin, err := detect() + if err != nil { + return err + } + + var applyFunc applyFunc + + switch bin { + case "dnf": + applyFunc = applyDNF + } + + return applyFunc(name, ensure) +} + +func detect() (string, error) { + switch { + case exists("/etc/fedora-release"): + fallthrough + case exists("/etc/rocky-release"): + return "dnf", nil + } + return "", errors.New("unable to detect package manager!") +} + +func exists(path string) bool { + _, err := os.Stat(path) + return err == nil +} -- cgit v1.2.3