From f2dff41dbc95812b4fa9f36279e6daf6999e4452 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Fri, 18 Jun 2021 17:33:31 -0400 Subject: Support log_tag defaults from containers.conf Fixes: https://github.com/containers/podman/issues/10204 Signed-off-by: Daniel J Walsh --- pkg/specgen/generate/container.go | 13 +++++++++++++ test/e2e/config/containers-journald.conf | 4 ++++ test/e2e/containers_conf_test.go | 30 ++++++++++++++++++++++++------ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 test/e2e/config/containers-journald.conf diff --git a/pkg/specgen/generate/container.go b/pkg/specgen/generate/container.go index d00e51e82..1f6d00eb7 100644 --- a/pkg/specgen/generate/container.go +++ b/pkg/specgen/generate/container.go @@ -7,12 +7,14 @@ import ( "github.com/containers/common/libimage" "github.com/containers/podman/v3/libpod" + "github.com/containers/podman/v3/libpod/define" ann "github.com/containers/podman/v3/pkg/annotations" envLib "github.com/containers/podman/v3/pkg/env" "github.com/containers/podman/v3/pkg/signal" "github.com/containers/podman/v3/pkg/specgen" spec "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" + "github.com/sirupsen/logrus" "golang.org/x/sys/unix" ) @@ -203,6 +205,17 @@ func CompleteSpec(ctx context.Context, r *libpod.Runtime, s *specgen.SpecGenerat if len(s.LogConfiguration.Driver) < 1 { s.LogConfiguration.Driver = rtc.Containers.LogDriver } + if len(rtc.Containers.LogTag) > 0 { + if s.LogConfiguration.Driver != define.JSONLogging { + if s.LogConfiguration.Options == nil { + s.LogConfiguration.Options = make(map[string]string) + } + + s.LogConfiguration.Options["tag"] = rtc.Containers.LogTag + } else { + logrus.Warnf("log_tag %q is not allowed with %q log_driver", rtc.Containers.LogTag, define.JSONLogging) + } + } warnings, err := verifyContainerResources(s) if err != nil { diff --git a/test/e2e/config/containers-journald.conf b/test/e2e/config/containers-journald.conf new file mode 100644 index 000000000..463f9a9fa --- /dev/null +++ b/test/e2e/config/containers-journald.conf @@ -0,0 +1,4 @@ +[containers] + +log_driver="journald" +log_tag="{{.ImageName}}" diff --git a/test/e2e/containers_conf_test.go b/test/e2e/containers_conf_test.go index a354de3b2..054454798 100644 --- a/test/e2e/containers_conf_test.go +++ b/test/e2e/containers_conf_test.go @@ -167,16 +167,34 @@ var _ = Describe("Podman run", func() { verifyNSHandling("/proc/self/ns/cgroup", "--cgroupns") }) + It("using journald for container with container log_tag", func() { + SkipIfInContainer("journalctl inside a container doesn't work correctly") + os.Setenv("CONTAINERS_CONF", "config/containers-journald.conf") + if IsRemote() { + podmanTest.RestartRemoteService() + } + logc := podmanTest.Podman([]string{"run", "-d", ALPINE, "sh", "-c", "echo podman; sleep 0.1; echo podman; sleep 0.1; echo podman"}) + logc.WaitWithDefaultTimeout() + Expect(logc.ExitCode()).To(Equal(0)) + cid := logc.OutputToString() + + wait := podmanTest.Podman([]string{"wait", cid}) + wait.WaitWithDefaultTimeout() + Expect(wait.ExitCode()).To(Equal(0)) + + cmd := exec.Command("journalctl", "--no-pager", "-o", "json", "--output-fields=CONTAINER_TAG", fmt.Sprintf("CONTAINER_ID_FULL=%s", cid)) + out, err := cmd.CombinedOutput() + Expect(err).To(BeNil()) + Expect(string(out)).To(ContainSubstring("alpine")) + }) + It("podman containers.conf additionalvolumes", func() { conffile := filepath.Join(podmanTest.TempDir, "container.conf") tempdir, err = CreateTempDirInTempDir() - if err != nil { - os.Exit(1) - } + Expect(err).To(BeNil()) + err := ioutil.WriteFile(conffile, []byte(fmt.Sprintf("[containers]\nvolumes=[\"%s:%s:Z\",]\n", tempdir, tempdir)), 0755) - if err != nil { - os.Exit(1) - } + Expect(err).To(BeNil()) os.Setenv("CONTAINERS_CONF", conffile) if IsRemote() { -- cgit v1.2.3-54-g00ecf