mirror of
https://github.com/containers/podman
synced 2024-10-19 16:54:07 +00:00
podman generate kube ignores --network=host
Signed-off-by: Milivoje Legenovic <m.legenovic@gmail.com>
This commit is contained in:
parent
2686e406a6
commit
cdbbc6120b
|
@ -1073,6 +1073,18 @@ func networkDisabled(c *Container) (bool, error) {
|
|||
return false, nil
|
||||
}
|
||||
|
||||
func (c *Container) HostNetwork() bool {
|
||||
if c.config.CreateNetNS || c.config.NetNsCtr != "" {
|
||||
return false
|
||||
}
|
||||
for _, ns := range c.config.Spec.Linux.Namespaces {
|
||||
if ns.Type == spec.NetworkNamespace {
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
||||
// ContainerState returns containerstate struct
|
||||
func (c *Container) ContainerState() (*ContainerState, error) {
|
||||
if !c.batched {
|
||||
|
|
|
@ -49,6 +49,7 @@ func (p *Pod) GenerateForKube() (*v1.Pod, []v1.ServicePort, error) {
|
|||
}
|
||||
|
||||
extraHost := make([]v1.HostAlias, 0)
|
||||
hostNetwork := false
|
||||
if p.HasInfraContainer() {
|
||||
infraContainer, err := p.getInfraContainer()
|
||||
if err != nil {
|
||||
|
@ -69,9 +70,9 @@ func (p *Pod) GenerateForKube() (*v1.Pod, []v1.ServicePort, error) {
|
|||
return nil, servicePorts, err
|
||||
}
|
||||
servicePorts = containerPortsToServicePorts(ports)
|
||||
|
||||
hostNetwork = p.config.InfraContainer.HostNetwork
|
||||
}
|
||||
pod, err := p.podWithContainers(allContainers, ports)
|
||||
pod, err := p.podWithContainers(allContainers, ports, hostNetwork)
|
||||
if err != nil {
|
||||
return nil, servicePorts, err
|
||||
}
|
||||
|
@ -167,7 +168,7 @@ func containersToServicePorts(containers []v1.Container) []v1.ServicePort {
|
|||
return sps
|
||||
}
|
||||
|
||||
func (p *Pod) podWithContainers(containers []*Container, ports []v1.ContainerPort) (*v1.Pod, error) {
|
||||
func (p *Pod) podWithContainers(containers []*Container, ports []v1.ContainerPort, hostNetwork bool) (*v1.Pod, error) {
|
||||
deDupPodVolumes := make(map[string]*v1.Volume)
|
||||
first := true
|
||||
podContainers := make([]v1.Container, 0, len(containers))
|
||||
|
@ -220,10 +221,10 @@ func (p *Pod) podWithContainers(containers []*Container, ports []v1.ContainerPor
|
|||
podVolumes = append(podVolumes, *vol)
|
||||
}
|
||||
|
||||
return addContainersAndVolumesToPodObject(podContainers, podVolumes, p.Name(), &dnsInfo), nil
|
||||
return addContainersAndVolumesToPodObject(podContainers, podVolumes, p.Name(), &dnsInfo, hostNetwork), nil
|
||||
}
|
||||
|
||||
func addContainersAndVolumesToPodObject(containers []v1.Container, volumes []v1.Volume, podName string, dnsOptions *v1.PodDNSConfig) *v1.Pod {
|
||||
func addContainersAndVolumesToPodObject(containers []v1.Container, volumes []v1.Volume, podName string, dnsOptions *v1.PodDNSConfig, hostNetwork bool) *v1.Pod {
|
||||
tm := v12.TypeMeta{
|
||||
Kind: "Pod",
|
||||
APIVersion: "v1",
|
||||
|
@ -242,8 +243,9 @@ func addContainersAndVolumesToPodObject(containers []v1.Container, volumes []v1.
|
|||
CreationTimestamp: v12.Now(),
|
||||
}
|
||||
ps := v1.PodSpec{
|
||||
Containers: containers,
|
||||
Volumes: volumes,
|
||||
Containers: containers,
|
||||
Volumes: volumes,
|
||||
HostNetwork: hostNetwork,
|
||||
}
|
||||
if dnsOptions != nil {
|
||||
ps.DNSConfig = dnsOptions
|
||||
|
@ -261,8 +263,12 @@ func addContainersAndVolumesToPodObject(containers []v1.Container, volumes []v1.
|
|||
func simplePodWithV1Containers(ctrs []*Container) (*v1.Pod, error) {
|
||||
kubeCtrs := make([]v1.Container, 0, len(ctrs))
|
||||
kubeVolumes := make([]v1.Volume, 0)
|
||||
hostNetwork := true
|
||||
podDNS := v1.PodDNSConfig{}
|
||||
for _, ctr := range ctrs {
|
||||
if !ctr.HostNetwork() {
|
||||
hostNetwork = false
|
||||
}
|
||||
kubeCtr, kubeVols, ctrDNS, err := containerToV1Container(ctr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -303,7 +309,7 @@ func simplePodWithV1Containers(ctrs []*Container) (*v1.Pod, error) {
|
|||
}
|
||||
} // end if ctrDNS
|
||||
}
|
||||
return addContainersAndVolumesToPodObject(kubeCtrs, kubeVolumes, strings.ReplaceAll(ctrs[0].Name(), "_", ""), &podDNS), nil
|
||||
return addContainersAndVolumesToPodObject(kubeCtrs, kubeVolumes, strings.ReplaceAll(ctrs[0].Name(), "_", ""), &podDNS, hostNetwork), nil
|
||||
}
|
||||
|
||||
// containerToV1Container converts information we know about a libpod container
|
||||
|
|
|
@ -60,6 +60,7 @@ var _ = Describe("Podman generate kube", func() {
|
|||
pod := new(v1.Pod)
|
||||
err := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||
Expect(err).To(BeNil())
|
||||
Expect(pod.Spec.HostNetwork).To(Equal(false))
|
||||
|
||||
numContainers := 0
|
||||
for range pod.Spec.Containers {
|
||||
|
@ -144,6 +145,7 @@ var _ = Describe("Podman generate kube", func() {
|
|||
pod := new(v1.Pod)
|
||||
err := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||
Expect(err).To(BeNil())
|
||||
Expect(pod.Spec.HostNetwork).To(Equal(false))
|
||||
|
||||
numContainers := 0
|
||||
for range pod.Spec.Containers {
|
||||
|
@ -152,6 +154,40 @@ var _ = Describe("Podman generate kube", func() {
|
|||
Expect(numContainers).To(Equal(1))
|
||||
})
|
||||
|
||||
It("podman generate kube on pod with host network", func() {
|
||||
podSession := podmanTest.Podman([]string{"pod", "create", "--name", "testHostNetwork", "--network", "host"})
|
||||
podSession.WaitWithDefaultTimeout()
|
||||
Expect(podSession.ExitCode()).To(Equal(0))
|
||||
|
||||
session := podmanTest.Podman([]string{"create", "--name", "topcontainer", "--pod", "testHostNetwork", "--network", "host", ALPINE, "top"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
kube := podmanTest.Podman([]string{"generate", "kube", "testHostNetwork"})
|
||||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
pod := new(v1.Pod)
|
||||
err := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||
Expect(err).To(BeNil())
|
||||
Expect(pod.Spec.HostNetwork).To(Equal(true))
|
||||
})
|
||||
|
||||
It("podman generate kube on container with host network", func() {
|
||||
session := podmanTest.RunTopContainerWithArgs("topcontainer", []string{"--network", "host"})
|
||||
session.WaitWithDefaultTimeout()
|
||||
Expect(session.ExitCode()).To(Equal(0))
|
||||
|
||||
kube := podmanTest.Podman([]string{"generate", "kube", "topcontainer"})
|
||||
kube.WaitWithDefaultTimeout()
|
||||
Expect(kube.ExitCode()).To(Equal(0))
|
||||
|
||||
pod := new(v1.Pod)
|
||||
err := yaml.Unmarshal(kube.Out.Contents(), pod)
|
||||
Expect(err).To(BeNil())
|
||||
Expect(pod.Spec.HostNetwork).To(Equal(true))
|
||||
})
|
||||
|
||||
It("podman generate kube on pod with hostAliases", func() {
|
||||
podName := "testHost"
|
||||
testIP := "127.0.0.1"
|
||||
|
|
Loading…
Reference in a new issue