mirror of
https://github.com/containers/podman.git
synced 2025-12-07 22:32:46 +08:00
Merge pull request #20253 from ygalblum/quadlet-command-args
Quadlet - add support for global arguments
This commit is contained in:
@@ -12,7 +12,7 @@
|
||||
## assert-key-is "Service" "Type" "notify"
|
||||
## assert-key-is "Service" "NotifyAccess" "all"
|
||||
## assert-key-is "Service" "SyslogIdentifier" "%N"
|
||||
## assert-key-is-regex "Service" "ExecStopPost" "-.*/podman rm -v -f -i --cidfile=%t/%N.cid"
|
||||
## assert-key-is-regex "Service" "ExecStopPost" "-[/S].*/podman rm -v -f -i --cidfile=%t/%N.cid"
|
||||
## assert-key-is-regex "Service" "ExecStop" ".*/podman rm -v -f -i --cidfile=%t/%N.cid"
|
||||
## assert-key-is "Service" "Environment" "PODMAN_SYSTEMD_UNIT=%n"
|
||||
|
||||
|
||||
7
test/e2e/quadlet/containersconfmodule.container
Normal file
7
test/e2e/quadlet/containersconfmodule.container
Normal file
@@ -0,0 +1,7 @@
|
||||
## assert-podman-global-args "run" "--module=/etc/container/1.conf"
|
||||
## assert-podman-global-args "run" "--module=/etc/container/2.conf"
|
||||
|
||||
[Container]
|
||||
Image=image
|
||||
ContainersConfModule=/etc/container/1.conf
|
||||
ContainersConfModule=/etc/container/2.conf
|
||||
7
test/e2e/quadlet/containersconfmodule.image
Normal file
7
test/e2e/quadlet/containersconfmodule.image
Normal file
@@ -0,0 +1,7 @@
|
||||
## assert-podman-global-args "image" "--module=/etc/container/1.conf"
|
||||
## assert-podman-global-args "image" "--module=/etc/container/2.conf"
|
||||
|
||||
[Image]
|
||||
Image=image:latest
|
||||
ContainersConfModule=/etc/container/1.conf
|
||||
ContainersConfModule=/etc/container/2.conf
|
||||
7
test/e2e/quadlet/containersconfmodule.kube
Normal file
7
test/e2e/quadlet/containersconfmodule.kube
Normal file
@@ -0,0 +1,7 @@
|
||||
## assert-podman-global-args "kube" "--module=/etc/container/1.conf"
|
||||
## assert-podman-global-args "kube" "--module=/etc/container/2.conf"
|
||||
|
||||
[Kube]
|
||||
Yaml=file.yml
|
||||
ContainersConfModule=/etc/container/1.conf
|
||||
ContainersConfModule=/etc/container/2.conf
|
||||
6
test/e2e/quadlet/containersconfmodule.network
Normal file
6
test/e2e/quadlet/containersconfmodule.network
Normal file
@@ -0,0 +1,6 @@
|
||||
## assert-podman-global-args "network" "--module=/etc/container/1.conf"
|
||||
## assert-podman-global-args "network" "--module=/etc/container/2.conf"
|
||||
|
||||
[Network]
|
||||
ContainersConfModule=/etc/container/1.conf
|
||||
ContainersConfModule=/etc/container/2.conf
|
||||
6
test/e2e/quadlet/containersconfmodule.volume
Normal file
6
test/e2e/quadlet/containersconfmodule.volume
Normal file
@@ -0,0 +1,6 @@
|
||||
## assert-podman-global-args "volume" "--module=/etc/container/1.conf"
|
||||
## assert-podman-global-args "volume" "--module=/etc/container/2.conf"
|
||||
|
||||
[Volume]
|
||||
ContainersConfModule=/etc/container/1.conf
|
||||
ContainersConfModule=/etc/container/2.conf
|
||||
16
test/e2e/quadlet/globalargs.container
Normal file
16
test/e2e/quadlet/globalargs.container
Normal file
@@ -0,0 +1,16 @@
|
||||
## assert-podman-global-args "run" "--conmon=/usr/bin/somewhere"
|
||||
## assert-podman-global-args "run" "--imagestore=/var/lib/somestore"
|
||||
## assert-podman-global-args "run" "--log-level=debug"
|
||||
|
||||
## assert-podman-stop-global-args "rm" "--conmon=/usr/bin/somewhere"
|
||||
## assert-podman-stop-global-args "rm" "--imagestore=/var/lib/somestore"
|
||||
## assert-podman-stop-global-args "rm" "--log-level=debug"
|
||||
|
||||
## assert-podman-stop-post-global-args "rm" "--conmon=/usr/bin/somewhere"
|
||||
## assert-podman-stop-post-global-args "rm" "--imagestore=/var/lib/somestore"
|
||||
## assert-podman-stop-post-global-args "rm" "--log-level=debug"
|
||||
|
||||
[Container]
|
||||
Image=image
|
||||
GlobalArgs=--conmon=/usr/bin/somewhere
|
||||
GlobalArgs=--imagestore=/var/lib/somestore --log-level=debug
|
||||
8
test/e2e/quadlet/globalargs.image
Normal file
8
test/e2e/quadlet/globalargs.image
Normal file
@@ -0,0 +1,8 @@
|
||||
## assert-podman-global-args "image" "--identity=path=/etc/identity"
|
||||
## assert-podman-global-args "image" "--syslog"
|
||||
## assert-podman-global-args "image" "--log-level=debug"
|
||||
|
||||
[Image]
|
||||
Image=image:latest
|
||||
GlobalArgs=--identity=path=/etc/identity
|
||||
GlobalArgs=--syslog --log-level=debug
|
||||
12
test/e2e/quadlet/globalargs.kube
Normal file
12
test/e2e/quadlet/globalargs.kube
Normal file
@@ -0,0 +1,12 @@
|
||||
## assert-podman-global-args "kube" "--conmon=/usr/bin/somewhere"
|
||||
## assert-podman-global-args "kube" "--imagestore=/var/lib/somestore"
|
||||
## assert-podman-global-args "kube" "--log-level=debug"
|
||||
|
||||
## assert-podman-stop-post-global-args "kube" "--conmon=/usr/bin/somewhere"
|
||||
## assert-podman-stop-post-global-args "kube" "--imagestore=/var/lib/somestore"
|
||||
## assert-podman-stop-post-global-args "kube" "--log-level=debug"
|
||||
|
||||
[Kube]
|
||||
Yaml=file.yml
|
||||
GlobalArgs=--conmon=/usr/bin/somewhere
|
||||
GlobalArgs=--imagestore=/var/lib/somestore --log-level=debug
|
||||
7
test/e2e/quadlet/globalargs.network
Normal file
7
test/e2e/quadlet/globalargs.network
Normal file
@@ -0,0 +1,7 @@
|
||||
## assert-podman-global-args "network" "--network-cmd-path=/usr/bin/network-cmd"
|
||||
## assert-podman-global-args "network" "--network-config-dir=/etc/network-config"
|
||||
## assert-podman-global-args "network" "--log-level=debug"
|
||||
|
||||
[Network]
|
||||
GlobalArgs=--network-cmd-path=/usr/bin/network-cmd
|
||||
GlobalArgs=--network-config-dir=/etc/network-config --log-level=debug
|
||||
7
test/e2e/quadlet/globalargs.volume
Normal file
7
test/e2e/quadlet/globalargs.volume
Normal file
@@ -0,0 +1,7 @@
|
||||
## assert-podman-global-args "volume" "--volumepath=/var/lib/somewhere"
|
||||
## assert-podman-global-args "volume" "--imagestore=/var/lib/store"
|
||||
## assert-podman-global-args "volume" "--log-level=debug"
|
||||
|
||||
[Volume]
|
||||
GlobalArgs=--volumepath=/var/lib/somewhere
|
||||
GlobalArgs=--imagestore=/var/lib/store --log-level=debug
|
||||
@@ -169,14 +169,26 @@ func (t *quadletTestcase) assertKeyContains(args []string, unit *parser.UnitFile
|
||||
return ok && strings.Contains(realValue, value)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertPodmanArgs(args []string, unit *parser.UnitFile, key string) bool {
|
||||
func (t *quadletTestcase) assertPodmanArgs(args []string, unit *parser.UnitFile, key string, allowRegex, globalOnly bool) bool {
|
||||
podmanArgs, _ := unit.LookupLastArgs("Service", key)
|
||||
return findSublist(podmanArgs, args) != -1
|
||||
}
|
||||
if globalOnly {
|
||||
podmanCmdLocation := findSublist(podmanArgs, []string{args[0]})
|
||||
if podmanCmdLocation == -1 {
|
||||
return false
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertPodmanArgsRegex(args []string, unit *parser.UnitFile, key string) bool {
|
||||
podmanArgs, _ := unit.LookupLastArgs("Service", key)
|
||||
return findSublistRegex(podmanArgs, args) != -1
|
||||
podmanArgs = podmanArgs[:podmanCmdLocation]
|
||||
args = args[1:]
|
||||
}
|
||||
|
||||
var location int
|
||||
if allowRegex {
|
||||
location = findSublistRegex(podmanArgs, args)
|
||||
} else {
|
||||
location = findSublist(podmanArgs, args)
|
||||
}
|
||||
|
||||
return location != -1
|
||||
}
|
||||
|
||||
func keyValueStringToMap(keyValueString, separator string) (map[string]string, error) {
|
||||
@@ -216,9 +228,19 @@ func keyValMapEqualRegex(expectedKeyValMap, actualKeyValMap map[string]string) b
|
||||
return true
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertPodmanArgsKeyVal(args []string, unit *parser.UnitFile, key string, allowRegex bool) bool {
|
||||
func (t *quadletTestcase) assertPodmanArgsKeyVal(args []string, unit *parser.UnitFile, key string, allowRegex, globalOnly bool) bool {
|
||||
podmanArgs, _ := unit.LookupLastArgs("Service", key)
|
||||
|
||||
if globalOnly {
|
||||
podmanCmdLocation := findSublist(podmanArgs, []string{args[0]})
|
||||
if podmanCmdLocation == -1 {
|
||||
return false
|
||||
}
|
||||
|
||||
podmanArgs = podmanArgs[:podmanCmdLocation]
|
||||
args = args[1:]
|
||||
}
|
||||
|
||||
expectedKeyValMap, err := keyValueStringToMap(args[2], args[1])
|
||||
if err != nil {
|
||||
return false
|
||||
@@ -270,19 +292,35 @@ func (t *quadletTestcase) assertPodmanFinalArgsRegex(args []string, unit *parser
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStart")
|
||||
return t.assertPodmanArgs(args, unit, "ExecStart", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanArgsRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsRegex(args, unit, "ExecStart")
|
||||
return t.assertPodmanArgs(args, unit, "ExecStart", true, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanGlobalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStart", false, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanGlobalArgsRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStart", true, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanArgsKeyVal(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", false)
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanArgsKeyValRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", true)
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", true, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanGlobalArgsKeyVal(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", false, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanGlobalArgsKeyValRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStart", true, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStartPodmanFinalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
@@ -294,7 +332,11 @@ func (t *quadletTestcase) assertStartPodmanFinalArgsRegex(args []string, unit *p
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPodmanArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStop")
|
||||
return t.assertPodmanArgs(args, unit, "ExecStop", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPodmanGlobalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStop", false, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPodmanFinalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
@@ -305,8 +347,20 @@ func (t *quadletTestcase) assertStopPodmanFinalArgsRegex(args []string, unit *pa
|
||||
return t.assertPodmanFinalArgsRegex(args, unit, "ExecStop")
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPodmanArgsKeyVal(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStop", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPodmanArgsKeyValRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStop", true, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPostPodmanArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStopPost")
|
||||
return t.assertPodmanArgs(args, unit, "ExecStopPost", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPostPodmanGlobalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgs(args, unit, "ExecStopPost", false, true)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPostPodmanFinalArgs(args []string, unit *parser.UnitFile) bool {
|
||||
@@ -317,6 +371,14 @@ func (t *quadletTestcase) assertStopPostPodmanFinalArgsRegex(args []string, unit
|
||||
return t.assertPodmanFinalArgsRegex(args, unit, "ExecStopPost")
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPostPodmanArgsKeyVal(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStopPost", false, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertStopPostPodmanArgsKeyValRegex(args []string, unit *parser.UnitFile) bool {
|
||||
return t.assertPodmanArgsKeyVal(args, unit, "ExecStopPost", true, false)
|
||||
}
|
||||
|
||||
func (t *quadletTestcase) assertSymlink(args []string, unit *parser.UnitFile) bool {
|
||||
Expect(args).To(HaveLen(2))
|
||||
symlink := args[0]
|
||||
@@ -366,6 +428,14 @@ func (t *quadletTestcase) doAssert(check []string, unit *parser.UnitFile, sessio
|
||||
ok = t.assertStartPodmanArgsKeyVal(args, unit)
|
||||
case "assert-podman-args-key-val-regex":
|
||||
ok = t.assertStartPodmanArgsKeyValRegex(args, unit)
|
||||
case "assert-podman-global-args":
|
||||
ok = t.assertStartPodmanGlobalArgs(args, unit)
|
||||
case "assert-podman-global-args-regex":
|
||||
ok = t.assertStartPodmanGlobalArgsRegex(args, unit)
|
||||
case "assert-podman-global-args-key-val":
|
||||
ok = t.assertStartPodmanGlobalArgsKeyVal(args, unit)
|
||||
case "assert-podman-global-args-key-val-regex":
|
||||
ok = t.assertStartPodmanGlobalArgsKeyValRegex(args, unit)
|
||||
case "assert-podman-final-args":
|
||||
ok = t.assertStartPodmanFinalArgs(args, unit)
|
||||
case "assert-podman-final-args-regex":
|
||||
@@ -374,16 +444,28 @@ func (t *quadletTestcase) doAssert(check []string, unit *parser.UnitFile, sessio
|
||||
ok = t.assertSymlink(args, unit)
|
||||
case "assert-podman-stop-args":
|
||||
ok = t.assertStopPodmanArgs(args, unit)
|
||||
case "assert-podman-stop-global-args":
|
||||
ok = t.assertStopPodmanGlobalArgs(args, unit)
|
||||
case "assert-podman-stop-final-args":
|
||||
ok = t.assertStopPodmanFinalArgs(args, unit)
|
||||
case "assert-podman-stop-final-args-regex":
|
||||
ok = t.assertStopPodmanFinalArgsRegex(args, unit)
|
||||
case "assert-podman-stop-args-key-val":
|
||||
ok = t.assertStopPodmanArgsKeyVal(args, unit)
|
||||
case "assert-podman-stop-args-key-val-regex":
|
||||
ok = t.assertStopPodmanArgsKeyValRegex(args, unit)
|
||||
case "assert-podman-stop-post-args":
|
||||
ok = t.assertStopPostPodmanArgs(args, unit)
|
||||
case "assert-podman-stop-post-global-args":
|
||||
ok = t.assertStopPostPodmanGlobalArgs(args, unit)
|
||||
case "assert-podman-stop-post-final-args":
|
||||
ok = t.assertStopPostPodmanFinalArgs(args, unit)
|
||||
case "assert-podman-stop-post-final-args-regex":
|
||||
ok = t.assertStopPostPodmanFinalArgsRegex(args, unit)
|
||||
case "assert-podman-stop-post-args-key-val":
|
||||
ok = t.assertStopPostPodmanArgsKeyVal(args, unit)
|
||||
case "assert-podman-stop-post-args-key-val-regex":
|
||||
ok = t.assertStopPostPodmanArgsKeyValRegex(args, unit)
|
||||
|
||||
default:
|
||||
return fmt.Errorf("Unsupported assertion %s", op)
|
||||
@@ -647,6 +729,8 @@ BOGUS=foo
|
||||
Entry("user.container", "user.container", 0, ""),
|
||||
Entry("volume.container", "volume.container", 0, ""),
|
||||
Entry("workingdir.container", "workingdir.container", 0, ""),
|
||||
Entry("Container - global args", "globalargs.container", 0, ""),
|
||||
Entry("Container - Containers Conf Modules", "containersconfmodule.container", 0, ""),
|
||||
|
||||
Entry("basic.volume", "basic.volume", 0, ""),
|
||||
Entry("device-copy.volume", "device-copy.volume", 0, ""),
|
||||
@@ -657,6 +741,8 @@ BOGUS=foo
|
||||
Entry("uid.volume", "uid.volume", 0, ""),
|
||||
Entry("image.volume", "image.volume", 0, ""),
|
||||
Entry("image-no-image.volume", "image-no-image.volume", 1, "converting \"image-no-image.volume\": the key Image is mandatory when using the image driver"),
|
||||
Entry("Volume - global args", "globalargs.volume", 0, ""),
|
||||
Entry("Volume - Containers Conf Modules", "containersconfmodule.volume", 0, ""),
|
||||
|
||||
Entry("Absolute Path", "absolute.path.kube", 0, ""),
|
||||
Entry("Basic kube", "basic.kube", 0, ""),
|
||||
@@ -676,6 +762,8 @@ BOGUS=foo
|
||||
Entry("Kube - Working Directory YAML Relative Path", "workingdir-yaml-rel.kube", 0, ""),
|
||||
Entry("Kube - Working Directory Unit", "workingdir-unit.kube", 0, ""),
|
||||
Entry("Kube - Working Directory already in Service", "workingdir-service.kube", 0, ""),
|
||||
Entry("Kube - global args", "globalargs.kube", 0, ""),
|
||||
Entry("Kube - Containers Conf Modules", "containersconfmodule.kube", 0, ""),
|
||||
|
||||
Entry("Network - Basic", "basic.network", 0, ""),
|
||||
Entry("Network - Disable DNS", "disable-dns.network", 0, ""),
|
||||
@@ -698,6 +786,8 @@ BOGUS=foo
|
||||
Entry("Network - Subnets", "subnets.network", 0, ""),
|
||||
Entry("Network - multiple subnet, gateway and range", "subnet-trio.multiple.network", 0, ""),
|
||||
Entry("Network - subnet, gateway and range", "subnet-trio.network", 0, ""),
|
||||
Entry("Network - global args", "globalargs.network", 0, ""),
|
||||
Entry("Network - Containers Conf Modules", "containersconfmodule.network", 0, ""),
|
||||
|
||||
Entry("Image - Basic", "basic.image", 0, ""),
|
||||
Entry("Image - No Image", "no-image.image", 1, "converting \"no-image.image\": no Image key specified"),
|
||||
@@ -711,6 +801,8 @@ BOGUS=foo
|
||||
Entry("Image - All Tags", "all-tags.image", 0, ""),
|
||||
Entry("Image - TLS Verify", "tls-verify.image", 0, ""),
|
||||
Entry("Image - Arch and OS", "arch-os.image", 0, ""),
|
||||
Entry("Image - global args", "globalargs.image", 0, ""),
|
||||
Entry("Image - Containers Conf Modules", "containersconfmodule.image", 0, ""),
|
||||
)
|
||||
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user