diff options
Diffstat (limited to 'internal/resource/pkg/pkg.go')
| -rw-r--r-- | internal/resource/pkg/pkg.go | 47 |
1 files changed, 47 insertions, 0 deletions
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 +} |
