Skip to content
This repository has been archived by the owner on Mar 9, 2022. It is now read-only.

Commit

Permalink
Merge pull request #1102 from Random-Liu/uts-namespace-and-fix-array
Browse files Browse the repository at this point in the history
Uts namespace and fix array
  • Loading branch information
Random-Liu committed Apr 1, 2019
2 parents 32dd659 + 4b4182c commit b23b406
Show file tree
Hide file tree
Showing 5 changed files with 41 additions and 18 deletions.
25 changes: 18 additions & 7 deletions integration/pod_hostname_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ func TestPodHostname(t *testing.T) {
for name, test := range map[string]struct {
opts []PodSandboxOpts
expectedHostname string
expectErr bool
}{
"regular pod with custom hostname": {
opts: []PodSandboxOpts{
Expand All @@ -47,12 +48,12 @@ func TestPodHostname(t *testing.T) {
},
expectedHostname: hostname,
},
"host network pod with custom hostname": {
"host network pod with custom hostname should fail": {
opts: []PodSandboxOpts{
WithHostNetwork,
WithPodHostname("test-hostname"),
},
expectedHostname: "test-hostname",
expectErr: true,
},
} {
t.Run(name, func(t *testing.T) {
Expand All @@ -64,11 +65,21 @@ func TestPodHostname(t *testing.T) {
t.Log("Create a sandbox with hostname")
sbConfig := PodSandboxConfig("sandbox", "hostname", opts...)
sb, err := runtimeService.RunPodSandbox(sbConfig, *runtimeHandler)
require.NoError(t, err)
defer func() {
assert.NoError(t, runtimeService.StopPodSandbox(sb))
assert.NoError(t, runtimeService.RemovePodSandbox(sb))
}()
if err != nil {
if !test.expectErr {
t.Fatalf("Unexpected RunPodSandbox error: %v", err)
}
return
} else {
// Make sure the sandbox is cleaned up.
defer func() {
assert.NoError(t, runtimeService.StopPodSandbox(sb))
assert.NoError(t, runtimeService.RemovePodSandbox(sb))
}()
if test.expectErr {
t.Fatalf("Expected RunPodSandbox to return error")
}
}

const (
testImage = "busybox"
Expand Down
25 changes: 15 additions & 10 deletions pkg/containerd/opts/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,15 +64,19 @@ func WithAdditionalGIDs(userstr string) oci.SpecOpts {
}

func mergeGids(gids1, gids2 []uint32) []uint32 {
gidsMap := make(map[uint32]struct{})
for _, gid1 := range gids1 {
for i, gid2 := range gids2 {
if gid1 == gid2 {
gids2 = append(gids2[:i], gids2[i+1:]...)
break
}
}
gidsMap[gid1] = struct{}{}
}
for _, gid2 := range gids2 {
gidsMap[gid2] = struct{}{}
}
var gids []uint32
for gid := range gidsMap {
gids = append(gids, gid)
}
return append(gids1, gids2...)
sort.Slice(gids, func(i, j int) bool { return gids[i] < gids[j] })
return gids
}

// WithoutRunMount removes the `/run` inside the spec
Expand Down Expand Up @@ -668,12 +672,13 @@ func WithoutNamespace(t runtimespec.LinuxNamespaceType) oci.SpecOpts {
if s.Linux == nil {
return nil
}
var namespaces []runtimespec.LinuxNamespace
for i, ns := range s.Linux.Namespaces {
if ns.Type == t {
s.Linux.Namespaces = append(s.Linux.Namespaces[:i], s.Linux.Namespaces[i+1:]...)
return nil
if ns.Type != t {
namespaces = append(namespaces, s.Linux.Namespaces[i])
}
}
s.Linux.Namespaces = namespaces
return nil
}
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/containerd/opts/spec_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ import (
func TestMergeGids(t *testing.T) {
gids1 := []uint32{3, 2, 1}
gids2 := []uint32{2, 3, 4}
assert.Equal(t, []uint32{3, 2, 1, 4}, mergeGids(gids1, gids2))
assert.Equal(t, []uint32{1, 2, 3, 4}, mergeGids(gids1, gids2))
}

func TestOrderedMounts(t *testing.T) {
Expand Down
1 change: 1 addition & 0 deletions pkg/server/sandbox_run.go
Original file line number Diff line number Diff line change
Expand Up @@ -385,6 +385,7 @@ func (c *criService) generateSandboxContainerSpec(id string, config *runtime.Pod
)
if nsOptions.GetNetwork() == runtime.NamespaceMode_NODE {
specOpts = append(specOpts, customopts.WithoutNamespace(runtimespec.NetworkNamespace))
specOpts = append(specOpts, customopts.WithoutNamespace(runtimespec.UTSNamespace))
} else {
//TODO(Abhi): May be move this to containerd spec opts (WithLinuxSpaceOption)
specOpts = append(specOpts, oci.WithLinuxNamespace(
Expand Down
6 changes: 6 additions & 0 deletions pkg/server/sandbox_run_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,9 @@ func TestGenerateSandboxContainerSpec(t *testing.T) {
Type: runtimespec.NetworkNamespace,
Path: nsPath,
})
assert.Contains(t, spec.Linux.Namespaces, runtimespec.LinuxNamespace{
Type: runtimespec.UTSNamespace,
})
assert.Contains(t, spec.Linux.Namespaces, runtimespec.LinuxNamespace{
Type: runtimespec.PIDNamespace,
})
Expand All @@ -125,6 +128,9 @@ func TestGenerateSandboxContainerSpec(t *testing.T) {
assert.NotContains(t, spec.Linux.Namespaces, runtimespec.LinuxNamespace{
Type: runtimespec.NetworkNamespace,
})
assert.NotContains(t, spec.Linux.Namespaces, runtimespec.LinuxNamespace{
Type: runtimespec.UTSNamespace,
})
assert.NotContains(t, spec.Linux.Namespaces, runtimespec.LinuxNamespace{
Type: runtimespec.PIDNamespace,
})
Expand Down

0 comments on commit b23b406

Please sign in to comment.