Skip to content

Commit 9573519

Browse files
Merge pull request containers#25452 from ygalblum/quadlet-warning-messages
Quadlet warning messages
2 parents 3e16ddc + 02658bc commit 9573519

File tree

5 files changed

+109
-77
lines changed

5 files changed

+109
-77
lines changed

cmd/quadlet/main.go

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -631,15 +631,15 @@ func generateUnitsInfoMap(units []*parser.UnitFile) map[string]*quadlet.UnitInfo
631631
}
632632

633633
func main() {
634-
if err := process(); err != nil {
635-
Logf("%s", err.Error())
634+
if processErred := process(); processErred {
635+
Logf("processing encountered some errors")
636636
os.Exit(1)
637637
}
638638
os.Exit(0)
639639
}
640640

641-
func process() error {
642-
var prevError error
641+
func process() bool {
642+
var processErred bool
643643

644644
prgname := path.Base(os.Args[0])
645645
isUserFlag = strings.Contains(prgname, "user")
@@ -648,7 +648,7 @@ func process() error {
648648

649649
if versionFlag {
650650
fmt.Printf("%s\n", rawversion.RawVersion)
651-
return prevError
651+
return processErred
652652
}
653653

654654
if verboseFlag || dryRunFlag {
@@ -660,15 +660,13 @@ func process() error {
660660
}
661661

662662
reportError := func(err error) {
663-
if prevError != nil {
664-
err = fmt.Errorf("%s\n%s", prevError, err)
665-
}
666-
prevError = err
663+
Logf("%s", err.Error())
664+
processErred = true
667665
}
668666

669667
if !dryRunFlag && flag.NArg() < 1 {
670668
reportError(errors.New("missing output directory argument"))
671-
return prevError
669+
return processErred
672670
}
673671

674672
var outputPath string
@@ -694,7 +692,7 @@ func process() error {
694692
// containers/podman/issues/17374: exit cleanly but log that we
695693
// had nothing to do
696694
Debugf("No files parsed from %s", sourcePathsMap)
697-
return prevError
695+
return processErred
698696
}
699697

700698
for _, unit := range units {
@@ -707,7 +705,7 @@ func process() error {
707705
err := os.MkdirAll(outputPath, os.ModePerm)
708706
if err != nil {
709707
reportError(err)
710-
return prevError
708+
return processErred
711709
}
712710
}
713711

@@ -730,31 +728,35 @@ func process() error {
730728

731729
for _, unit := range units {
732730
var service *parser.UnitFile
733-
var err error
731+
var warnings, err error
734732

735733
switch {
736734
case strings.HasSuffix(unit.Filename, ".container"):
737735
warnIfAmbiguousName(unit, quadlet.ContainerGroup)
738-
service, err = quadlet.ConvertContainer(unit, isUserFlag, unitsInfoMap)
736+
service, warnings, err = quadlet.ConvertContainer(unit, isUserFlag, unitsInfoMap)
739737
case strings.HasSuffix(unit.Filename, ".volume"):
740738
warnIfAmbiguousName(unit, quadlet.VolumeGroup)
741-
service, err = quadlet.ConvertVolume(unit, unit.Filename, unitsInfoMap, isUserFlag)
739+
service, warnings, err = quadlet.ConvertVolume(unit, unit.Filename, unitsInfoMap, isUserFlag)
742740
case strings.HasSuffix(unit.Filename, ".kube"):
743741
service, err = quadlet.ConvertKube(unit, unitsInfoMap, isUserFlag)
744742
case strings.HasSuffix(unit.Filename, ".network"):
745-
service, err = quadlet.ConvertNetwork(unit, unit.Filename, unitsInfoMap, isUserFlag)
743+
service, warnings, err = quadlet.ConvertNetwork(unit, unit.Filename, unitsInfoMap, isUserFlag)
746744
case strings.HasSuffix(unit.Filename, ".image"):
747745
warnIfAmbiguousName(unit, quadlet.ImageGroup)
748746
service, err = quadlet.ConvertImage(unit, unitsInfoMap, isUserFlag)
749747
case strings.HasSuffix(unit.Filename, ".build"):
750-
service, err = quadlet.ConvertBuild(unit, unitsInfoMap, isUserFlag)
748+
service, warnings, err = quadlet.ConvertBuild(unit, unitsInfoMap, isUserFlag)
751749
case strings.HasSuffix(unit.Filename, ".pod"):
752750
service, err = quadlet.ConvertPod(unit, unit.Filename, unitsInfoMap, isUserFlag)
753751
default:
754752
Logf("Unsupported file type %q", unit.Filename)
755753
continue
756754
}
757755

756+
if warnings != nil {
757+
Logf("%s", warnings.Error())
758+
}
759+
758760
if err != nil {
759761
reportError(fmt.Errorf("converting %q: %w", unit.Filename, err))
760762
continue
@@ -776,7 +778,7 @@ func process() error {
776778
}
777779
enableServiceFile(outputPath, service)
778780
}
779-
return prevError
781+
return processErred
780782
}
781783

782784
func init() {

pkg/systemd/parser/unitfile.go

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package parser
22

33
import (
4+
"errors"
45
"fmt"
56
"io"
67
"math"
@@ -838,21 +839,26 @@ func (f *UnitFile) LookupLastArgs(groupName string, key string) ([]string, bool)
838839
}
839840

840841
// Look up 'Environment' style key-value keys
841-
func (f *UnitFile) LookupAllKeyVal(groupName string, key string) map[string]string {
842+
func (f *UnitFile) LookupAllKeyVal(groupName string, key string) (map[string]string, error) {
843+
var warnings error
842844
res := make(map[string]string)
843845
allKeyvals := f.LookupAll(groupName, key)
844846
for _, keyvals := range allKeyvals {
845847
assigns, err := splitString(keyvals, WhitespaceSeparators, SplitRelax|SplitUnquote|SplitCUnescape)
846-
if err == nil {
847-
for _, assign := range assigns {
848-
key, value, found := strings.Cut(assign, "=")
849-
if found {
850-
res[key] = value
851-
}
848+
if err != nil {
849+
warnings = errors.Join(warnings, err)
850+
continue
851+
}
852+
for _, assign := range assigns {
853+
key, value, found := strings.Cut(assign, "=")
854+
if found {
855+
res[key] = value
856+
} else {
857+
warnings = errors.Join(warnings, fmt.Errorf("separator was not found for %s", assign))
852858
}
853859
}
854860
}
855-
return res
861+
return res, warnings
856862
}
857863

858864
func (f *UnitFile) Set(groupName string, key string, value string) {

0 commit comments

Comments
 (0)