From 65b5bd97b7c06f674e62a7c9a36dbdfdd771fc9d Mon Sep 17 00:00:00 2001 From: fcd <1352288+femnad@users.noreply.github.com> Date: Wed, 27 Dec 2023 05:13:07 +0300 Subject: [PATCH] consolidate unwanted dirs provisionenr into dir provisioner --- base/fup.go | 3 +-- common/ensure.go | 2 +- entity/aptrepo.go | 2 +- entity/dir.go | 6 ++++++ internal/dir.go | 12 +++++++++++- provision/ensuredirs.go | 35 ++++++++++++++++++++++++++++++----- provision/provision.go | 7 ------- provision/service.go | 2 +- provision/unwanteddirs.go | 37 ------------------------------------- provision/userkey.go | 2 +- remote/http.go | 2 +- 11 files changed, 53 insertions(+), 57 deletions(-) create mode 100644 entity/dir.go delete mode 100644 provision/unwanteddirs.go diff --git a/base/fup.go b/base/fup.go index ae61519..249d524 100644 --- a/base/fup.go +++ b/base/fup.go @@ -27,7 +27,7 @@ type Config struct { Binaries []entity.Binary `yaml:"binary"` Cargo []CargoPkg `yaml:"rust"` DnfRepos []entity.DnfRepo `yaml:"dnf_repo"` - EnsureDirs []string `yaml:"dir"` + EnsureDirs []entity.Dir `yaml:"dir"` EnsureLines []LineInFile `yaml:"line"` Flatpak entity.Flatpak `yaml:"flatpak"` GithubUserKey UserKey `yaml:"github_key"` @@ -44,7 +44,6 @@ type Config struct { Tasks []Task `yaml:"task"` Templates []Template `yaml:"template"` UserInGroup UserInGroupSpec `yaml:"user_group"` - UnwantedDirs []string `yaml:"rmdir"` } func (c Config) IsRemote() bool { diff --git a/common/ensure.go b/common/ensure.go index 693184d..0c85cff 100644 --- a/common/ensure.go +++ b/common/ensure.go @@ -15,7 +15,7 @@ func EnsureLinesInFile(file string, lines []string) error { file = internal.ExpandUser(file) dir, _ := path.Split(file) - if err := internal.EnsureDir(dir); err != nil { + if err := internal.EnsureDirExists(dir); err != nil { return err } diff --git a/entity/aptrepo.go b/entity/aptrepo.go index 47a81d5..4ef27b3 100644 --- a/entity/aptrepo.go +++ b/entity/aptrepo.go @@ -118,7 +118,7 @@ func (AptRepo) ensureKeyFile(keyUrl, keyRingFile string) error { } func (a AptRepo) Install() error { - err := internal.EnsureDir(keyRingsDir) + err := internal.EnsureDirExists(keyRingsDir) if err != nil { return err } diff --git a/entity/dir.go b/entity/dir.go new file mode 100644 index 0000000..c787002 --- /dev/null +++ b/entity/dir.go @@ -0,0 +1,6 @@ +package entity + +type Dir struct { + Absent bool `yaml:"absent"` + Name string `yaml:"name"` +} diff --git a/internal/dir.go b/internal/dir.go index 500b720..f41f0d1 100644 --- a/internal/dir.go +++ b/internal/dir.go @@ -2,7 +2,17 @@ package internal import "os" -func EnsureDir(dir string) error { +func EnsureDirAbsent(dir string) error { + _, err := os.Stat(dir) + if os.IsNotExist(err) { + return nil + } else if err != nil { + return err + } + return os.RemoveAll(dir) +} + +func EnsureDirExists(dir string) error { _, err := os.Stat(dir) if os.IsNotExist(err) { err = os.MkdirAll(dir, 0744) diff --git a/provision/ensuredirs.go b/provision/ensuredirs.go index e36b1cb..5c3c7cc 100644 --- a/provision/ensuredirs.go +++ b/provision/ensuredirs.go @@ -1,21 +1,46 @@ package provision import ( + "errors" "fmt" "github.com/femnad/fup/base" + "github.com/femnad/fup/entity" "github.com/femnad/fup/internal" ) -func doEnsureDirs(dirs []string) error { +func ensureDirAbsent(dir entity.Dir) error { + dirName := internal.ExpandUser(dir.Name) + if err := internal.EnsureDirAbsent(dirName); err != nil { + return fmt.Errorf("error removing directory %s: %v", dirName, err) + } + + return nil +} + +func ensureDirExist(dir entity.Dir) error { + dirName := internal.ExpandUser(dir.Name) + if err := internal.EnsureDirExists(dirName); err != nil { + return fmt.Errorf("error creating directory %s: %v", dirName, err) + } + + return nil +} + +func doEnsureDirs(dirs []entity.Dir) error { + var errs []error + for _, dir := range dirs { - dir = internal.ExpandUser(dir) - if err := internal.EnsureDir(dir); err != nil { - return fmt.Errorf("error ensuring directory %s: %v", dir, err) + var err error + if dir.Absent { + err = ensureDirAbsent(dir) + } else { + err = ensureDirExist(dir) } + errs = append(errs, err) } - return nil + return errors.Join(errs...) } func ensureDirs(config base.Config) error { diff --git a/provision/provision.go b/provision/provision.go index 5d3a78e..ae5c941 100644 --- a/provision/provision.go +++ b/provision/provision.go @@ -106,7 +106,6 @@ func NewProvisioner(cfg base.Config, filter []string) (Provisioner, error) { {"line", p.ensureLines}, {"flatpak", p.flatpakInstall}, {"snap", p.snapInstall}, - {"rmdir", p.unwantedDirs}, {"group", p.userInGroup}, {"post", p.runPostFlightTasks}, } @@ -242,12 +241,6 @@ func (p Provisioner) sshClone() error { return sshClone(p.Config) } -func (p Provisioner) unwantedDirs() error { - internal.Log.Noticef("Removing unwanted dirs") - - return removeUnwantedDirs(p.Config) -} - func (p Provisioner) userInGroup() error { internal.Log.Noticef("Ensuring user is in desired groups") diff --git a/provision/service.go b/provision/service.go index 4642f4d..6a55b49 100644 --- a/provision/service.go +++ b/provision/service.go @@ -163,7 +163,7 @@ func persist(s base.Service) error { serviceFilePath := getServiceFilePath(s) if !s.System { dir, _ := path.Split(serviceFilePath) - if err := internal.EnsureDir(dir); err != nil { + if err := internal.EnsureDirExists(dir); err != nil { return err } } diff --git a/provision/unwanteddirs.go b/provision/unwanteddirs.go deleted file mode 100644 index 3b731b0..0000000 --- a/provision/unwanteddirs.go +++ /dev/null @@ -1,37 +0,0 @@ -package provision - -import ( - "fmt" - "os" - - "github.com/femnad/fup/base" - "github.com/femnad/fup/internal" -) - -func removeDirs(dirs []string) error { - for _, dir := range dirs { - dir = internal.ExpandUser(dir) - _, err := os.Stat(dir) - if os.IsNotExist(err) { - continue - } else if err != nil { - return err - } - err = os.RemoveAll(dir) - if err != nil { - return fmt.Errorf("error removing directory %s: %v", dir, err) - } - } - - return nil -} - -func removeUnwantedDirs(config base.Config) error { - err := removeDirs(config.UnwantedDirs) - if err != nil { - internal.Log.Errorf("error removing unwanted dirs: %v", err) - return err - } - - return nil -} diff --git a/provision/userkey.go b/provision/userkey.go index b783b35..4ca5140 100644 --- a/provision/userkey.go +++ b/provision/userkey.go @@ -35,7 +35,7 @@ func ensureUserKeys(user string) error { keyFile := internal.ExpandUser(authorizedKeysFile) dir, _ := path.Split(keyFile) - if err = internal.EnsureDir(dir); err != nil { + if err = internal.EnsureDirExists(dir); err != nil { return err } diff --git a/remote/http.go b/remote/http.go index 3090b8c..92dcf45 100644 --- a/remote/http.go +++ b/remote/http.go @@ -100,7 +100,7 @@ func Download(url, target string) error { } dir, _ := path.Split(target) - if err = internal.EnsureDir(dir); err != nil { + if err = internal.EnsureDirExists(dir); err != nil { return err }