package installer import ( "github.com/hashicorp/go-multierror" "github.com/mudler/luet/pkg/helpers" fileHelper "github.com/mudler/luet/pkg/helpers/file" . "github.com/mudler/luet/pkg/logger" pkg "github.com/mudler/luet/pkg/package" "github.com/mudler/luet/pkg/tree" ) type System struct { Database pkg.PackageDatabase Target string } func (s *System) World() (pkg.Packages, error) { return s.Database.World(), nil } type templatedata map[string]interface{} func (s *System) ExecuteFinalizers(packs []pkg.Package) error { var errs error executedFinalizer := map[string]bool{} for _, p := range packs { if fileHelper.Exists(p.Rel(tree.FinalizerFile)) { out, err := helpers.RenderFiles(p.Rel(tree.FinalizerFile), p.Rel(tree.DefinitionFile)) if err != nil { Warning("Failed rendering finalizer for ", p.HumanReadableString(), err.Error()) errs = multierror.Append(errs, err) continue } if _, exists := executedFinalizer[p.GetFingerPrint()]; !exists { executedFinalizer[p.GetFingerPrint()] = true Info("Executing finalizer for " + p.HumanReadableString()) finalizer, err := NewLuetFinalizerFromYaml([]byte(out)) if err != nil { Warning("Failed reading finalizer for ", p.HumanReadableString(), err.Error()) errs = multierror.Append(errs, err) continue } err = finalizer.RunInstall(s) if err != nil { Warning("Failed running finalizer for ", p.HumanReadableString(), err.Error()) errs = multierror.Append(errs, err) continue } } } } return errs } func (s *System) ExistsPackageFile(file string) (bool, pkg.Package, error) { for _, p := range s.Database.World() { files, err := s.Database.GetPackageFiles(p) if err != nil { return false, nil, err } for _, f := range files { if f == file { return true, p, nil } } } return false, nil, nil }