diff --git a/go.mod b/go.mod index 35843769..f05f8be3 100644 --- a/go.mod +++ b/go.mod @@ -15,6 +15,7 @@ require ( github.com/fsouza/go-dockerclient v1.6.4 github.com/ghodss/yaml v1.0.0 github.com/google/go-containerregistry v0.2.1 + github.com/hashicorp/go-multierror v1.0.0 github.com/hashicorp/go-version v1.2.0 github.com/jedib0t/go-pretty v4.3.0+incompatible github.com/jedib0t/go-pretty/v6 v6.0.5 diff --git a/go.sum b/go.sum index c6d9e40d..4bcf6243 100644 --- a/go.sum +++ b/go.sum @@ -440,11 +440,13 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v0.0.0-20141028054710-7554cd9344ce/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v0.0.0-20161216184304-ed905158d874/go.mod h1:JMRHfdO9jKNzS/+BTlxCjKNQHg/jZAft8U7LloJvN7I= +github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index 23d5bb58..61078971 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -587,7 +587,7 @@ func (l *LuetInstaller) install(syncedRepos Repositories, toInstall map[string]A } } - return s.ExecuteFinalizers(toFinalize, l.Options.Force) + return s.ExecuteFinalizers(toFinalize) } func (l *LuetInstaller) downloadPackage(a ArtifactMatch) (compiler.Artifact, error) { diff --git a/pkg/installer/system.go b/pkg/installer/system.go index a7cd4044..372bd7dd 100644 --- a/pkg/installer/system.go +++ b/pkg/installer/system.go @@ -1,12 +1,11 @@ package installer import ( - . "github.com/mudler/luet/pkg/logger" - + "github.com/hashicorp/go-multierror" "github.com/mudler/luet/pkg/helpers" + . "github.com/mudler/luet/pkg/logger" pkg "github.com/mudler/luet/pkg/package" "github.com/mudler/luet/pkg/tree" - "github.com/pkg/errors" ) type System struct { @@ -20,28 +19,35 @@ func (s *System) World() (pkg.Packages, error) { type templatedata map[string]interface{} -func (s *System) ExecuteFinalizers(packs []pkg.Package, force bool) error { +func (s *System) ExecuteFinalizers(packs []pkg.Package) error { + var errs error executedFinalizer := map[string]bool{} for _, p := range packs { if helpers.Exists(p.Rel(tree.FinalizerFile)) { out, err := helpers.RenderFiles(p.Rel(tree.FinalizerFile), p.Rel(tree.DefinitionFile), "") - if err != nil && !force { - return errors.Wrap(err, "reading file "+p.Rel(tree.FinalizerFile)) + if err != nil { + Warning("Failed rendering finalizer for ", p.HumanReadableString(), err.Error()) + errs = multierror.Append(errs, err) + continue } if _, exists := executedFinalizer[p.GetFingerPrint()]; !exists { Info("Executing finalizer for " + p.HumanReadableString()) finalizer, err := NewLuetFinalizerFromYaml([]byte(out)) - if err != nil && !force { - return errors.Wrap(err, "Error reading finalizer "+p.Rel(tree.FinalizerFile)) + 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 && !force { - return errors.Wrap(err, "Error executing install finalizer "+p.Rel(tree.FinalizerFile)) + if err != nil { + Warning("Failed running finalizer for ", p.HumanReadableString(), err.Error()) + errs = multierror.Append(errs, err) + continue } executedFinalizer[p.GetFingerPrint()] = true } } } - return nil + return errs }