mirror of
https://github.com/containers/podman.git
synced 2025-06-27 21:50:18 +08:00
fix security-opt generate kube
fix #4950 add selinux options from --security-opt of the container to generate kube result Signed-off-by: Qi Wang <qiwan@redhat.com>
This commit is contained in:
@ -468,11 +468,26 @@ func generateKubeSecurityContext(c *Container) (*v1.SecurityContext, error) {
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var selinuxOpts v1.SELinuxOptions
|
||||||
|
opts := strings.SplitN(c.config.Spec.Annotations[InspectAnnotationLabel], ":", 2)
|
||||||
|
if len(opts) == 2 {
|
||||||
|
switch opts[0] {
|
||||||
|
case "type":
|
||||||
|
selinuxOpts.Type = opts[1]
|
||||||
|
case "level":
|
||||||
|
selinuxOpts.Level = opts[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(opts) == 1 {
|
||||||
|
if opts[0] == "disable" {
|
||||||
|
selinuxOpts.Type = "spc_t"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
sc := v1.SecurityContext{
|
sc := v1.SecurityContext{
|
||||||
Capabilities: newCaps,
|
Capabilities: newCaps,
|
||||||
Privileged: &priv,
|
Privileged: &priv,
|
||||||
// TODO How do we know if selinux were passed into podman
|
SELinuxOptions: &selinuxOpts,
|
||||||
//SELinuxOptions:
|
|
||||||
// RunAsNonRoot is an optional parameter; our first implementations should be root only; however
|
// RunAsNonRoot is an optional parameter; our first implementations should be root only; however
|
||||||
// I'm leaving this as a bread-crumb for later
|
// I'm leaving this as a bread-crumb for later
|
||||||
//RunAsNonRoot: &nonRoot,
|
//RunAsNonRoot: &nonRoot,
|
||||||
|
@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/ghodss/yaml"
|
"github.com/ghodss/yaml"
|
||||||
. "github.com/onsi/ginkgo"
|
. "github.com/onsi/ginkgo"
|
||||||
. "github.com/onsi/gomega"
|
. "github.com/onsi/gomega"
|
||||||
"k8s.io/api/core/v1"
|
v1 "k8s.io/api/core/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
var _ = Describe("Podman generate kube", func() {
|
var _ = Describe("Podman generate kube", func() {
|
||||||
@ -69,6 +69,51 @@ var _ = Describe("Podman generate kube", func() {
|
|||||||
Expect(numContainers).To(Equal(1))
|
Expect(numContainers).To(Equal(1))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
It("podman generate service kube on container with --security-opt level", func() {
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", "test", "--security-opt", "label=level:s0:c100,c200", "alpine"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
kube := podmanTest.Podman([]string{"generate", "kube", "test"})
|
||||||
|
kube.WaitWithDefaultTimeout()
|
||||||
|
Expect(kube.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
pod := new(v1.Pod)
|
||||||
|
err := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(kube.OutputToString()).To(ContainSubstring("level: s0:c100,c200"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman generate service kube on container with --security-opt disable", func() {
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", "test-disable", "--security-opt", "label=disable", "alpine"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
kube := podmanTest.Podman([]string{"generate", "kube", "test-disable"})
|
||||||
|
kube.WaitWithDefaultTimeout()
|
||||||
|
Expect(kube.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
pod := new(v1.Pod)
|
||||||
|
err = yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(kube.OutputToString()).To(ContainSubstring("type: spc_t"))
|
||||||
|
})
|
||||||
|
|
||||||
|
It("podman generate service kube on container with --security-opt type", func() {
|
||||||
|
session := podmanTest.Podman([]string{"create", "--name", "test", "--security-opt", "label=type:foo_bar_t", "alpine"})
|
||||||
|
session.WaitWithDefaultTimeout()
|
||||||
|
Expect(session.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
kube := podmanTest.Podman([]string{"generate", "kube", "test"})
|
||||||
|
kube.WaitWithDefaultTimeout()
|
||||||
|
Expect(kube.ExitCode()).To(Equal(0))
|
||||||
|
|
||||||
|
pod := new(v1.Pod)
|
||||||
|
err = yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||||
|
Expect(err).To(BeNil())
|
||||||
|
Expect(kube.OutputToString()).To(ContainSubstring("type: foo_bar_t"))
|
||||||
|
})
|
||||||
|
|
||||||
It("podman generate service kube on container", func() {
|
It("podman generate service kube on container", func() {
|
||||||
session := podmanTest.RunTopContainer("top")
|
session := podmanTest.RunTopContainer("top")
|
||||||
session.WaitWithDefaultTimeout()
|
session.WaitWithDefaultTimeout()
|
||||||
|
Reference in New Issue
Block a user