diff --git a/cmd/podman/secrets/list.go b/cmd/podman/secrets/list.go index b222c84a6e..536e3c78c8 100644 --- a/cmd/podman/secrets/list.go +++ b/cmd/podman/secrets/list.go @@ -46,8 +46,8 @@ func init() { flags := lsCmd.Flags() formatFlagName := "format" - flags.StringVar(&listFlag.format, formatFlagName, "{{range .}}{{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.CreatedAt}}\t{{.UpdatedAt}}\n{{end -}}", "Format volume output using Go template") - _ = lsCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&entities.SecretInfoReport{})) + flags.StringVar(&listFlag.format, formatFlagName, "{{range .}}{{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.CreatedAt}}\t{{.UpdatedAt}}\n{{end -}}", "Format secret output using Go template") + _ = lsCmd.RegisterFlagCompletionFunc(formatFlagName, common.AutocompleteFormat(&entities.SecretListReport{})) filterFlagName := "filter" flags.StringArrayVarP(&listFlag.filter, filterFlagName, "f", []string{}, "Filter secret output") diff --git a/docs/source/markdown/podman-secret-ls.1.md.in b/docs/source/markdown/podman-secret-ls.1.md.in index a83a4be6b9..f6c5dfa395 100644 --- a/docs/source/markdown/podman-secret-ls.1.md.in +++ b/docs/source/markdown/podman-secret-ls.1.md.in @@ -32,16 +32,11 @@ Valid placeholders for the Go template are listed below: | **Placeholder** | **Description** | | ------------------------ | ----------------------------------------------------------------- | -| .CreatedAt ... | When secret was created (relative timestamp, human-readable) | +| .CreatedAt | When secret was created (relative timestamp, human-readable) | +| .Driver | Driver name (string) | | .ID | ID of secret | -| .SecretData | Secret Data (Displayed only with --showsecret option) | -| .Spec ... | Details of secret | -| .Spec.Driver ... | Driver info | -| .Spec.Driver.Name | Driver name (string) | -| .Spec.Driver.Options ... | Driver options (map of driver-specific options) | -| .Spec.Labels ... | Labels for this secret | -| .Spec.Name | Name of secret | -| .UpdatedAt ... | When secret was last updated (relative timestamp, human-readable) | +| .Name | Name of secret | +| .UpdatedAt | When secret was last updated (relative timestamp, human-readable) | @@option noheading diff --git a/test/e2e/secret_test.go b/test/e2e/secret_test.go index 102e082161..586b7e23f3 100644 --- a/test/e2e/secret_test.go +++ b/test/e2e/secret_test.go @@ -325,6 +325,35 @@ var _ = Describe("Podman secret", func() { Expect(list.OutputToStringArray()).To(HaveLen(2), list.OutputToString()) }) + It("podman secret ls with valid format fields Driver/CreatedAt", func() { + secretFilePath := filepath.Join(podmanTest.TempDir, "secret") + err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755) + Expect(err).ToNot(HaveOccurred()) + + podmanTest.PodmanExitCleanly("secret", "create", "fmt", secretFilePath) + + // .Driver should be available on SecretListReport + list := podmanTest.PodmanExitCleanly("secret", "ls", "--format", "{{.Driver}}") + Expect(list.OutputToString()).ToNot(BeEmpty()) + + // .CreatedAt should be available and human-readable (e.g., "X ago") + list = podmanTest.PodmanExitCleanly("secret", "ls", "--format", "{{.CreatedAt}}") + Expect(list.OutputToString()).To(ContainSubstring("ago")) + }) + + It("podman secret ls with invalid Spec.* format should error", func() { + secretFilePath := filepath.Join(podmanTest.TempDir, "secret") + err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755) + Expect(err).ToNot(HaveOccurred()) + + podmanTest.PodmanExitCleanly("secret", "create", "fmt2", secretFilePath) + + bad := podmanTest.Podman([]string{"secret", "ls", "--format", "{{.Spec.Name}}"}) + bad.WaitWithDefaultTimeout() + Expect(bad).To(Not(ExitCleanly())) + Expect(bad.ErrorToString()).To(ContainSubstring("can't evaluate field Spec")) + }) + It("podman secret rm", func() { secretFilePath := filepath.Join(podmanTest.TempDir, "secret") err := os.WriteFile(secretFilePath, []byte("mysecret"), 0755)