Skip to content

Commit 3c843d7

Browse files
committed
Pass directory rather than socket filename to CNIServer.Start()
1 parent 2f29592 commit 3c843d7

File tree

6 files changed

+35
-27
lines changed

6 files changed

+35
-27
lines changed

pkg/network/node/cniserver/cniserver.go

Lines changed: 17 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import (
99
"net"
1010
"net/http"
1111
"os"
12-
"path"
12+
"path/filepath"
1313
"strings"
1414

1515
"github.com/golang/glog"
@@ -44,9 +44,12 @@ import (
4444
// removed and re-created with 0700 permissions each time openshift-node is
4545
// started.
4646

47-
// Default CNIServer unix domain socket path which the OpenShift SDN CNI
48-
// plugin uses to talk to the CNIServer
49-
const CNIServerSocketPath string = "/var/run/openshift-sdn/cni-server.sock"
47+
// Default directory for CNIServer runtime files
48+
const CNIServerRunDir string = "/var/run/openshift-sdn"
49+
50+
// CNIServer socket name, and default full path
51+
const CNIServerSocketName string = "cni-server.sock"
52+
const CNIServerSocketPath string = CNIServerRunDir + "/" + CNIServerSocketName
5053

5154
// Explicit type for CNI commands the server handles
5255
type CNICommand string
@@ -95,19 +98,18 @@ type cniRequestFunc func(request *PodRequest) ([]byte, error)
9598
type CNIServer struct {
9699
http.Server
97100
requestFunc cniRequestFunc
98-
path string
101+
rundir string
99102
}
100103

101-
// Create and return a new CNIServer object which will listen on the given
102-
// socket path
103-
func NewCNIServer(socketPath string) *CNIServer {
104+
// Create and return a new CNIServer object which will listen on a socket in the given path
105+
func NewCNIServer(rundir string) *CNIServer {
104106
router := mux.NewRouter()
105107

106108
s := &CNIServer{
107109
Server: http.Server{
108110
Handler: router,
109111
},
110-
path: socketPath,
112+
rundir: rundir,
111113
}
112114
router.NotFoundHandler = http.HandlerFunc(http.NotFound)
113115
router.HandleFunc("/", s.handleCNIRequest).Methods("POST")
@@ -125,25 +127,25 @@ func (s *CNIServer) Start(requestFunc cniRequestFunc) error {
125127
s.requestFunc = requestFunc
126128

127129
// Remove and re-create the socket directory with root-only permissions
128-
dirName := path.Dir(s.path)
129-
if err := os.RemoveAll(s.path); err != nil && !os.IsNotExist(err) {
130+
if err := os.RemoveAll(s.rundir); err != nil && !os.IsNotExist(err) {
130131
utilruntime.HandleError(fmt.Errorf("failed to remove old pod info socket: %v", err))
131132
}
132-
if err := os.RemoveAll(dirName); err != nil && !os.IsNotExist(err) {
133+
if err := os.RemoveAll(s.rundir); err != nil && !os.IsNotExist(err) {
133134
utilruntime.HandleError(fmt.Errorf("failed to remove contents of socket directory: %v", err))
134135
}
135-
if err := os.MkdirAll(dirName, 0700); err != nil {
136+
if err := os.MkdirAll(s.rundir, 0700); err != nil {
136137
return fmt.Errorf("failed to create pod info socket directory: %v", err)
137138
}
138139

139140
// On Linux the socket is created with the permissions of the directory
140141
// it is in, so as long as the directory is root-only we can avoid
141142
// racy umask manipulation.
142-
l, err := net.Listen("unix", s.path)
143+
socketPath := filepath.Join(s.rundir, CNIServerSocketName)
144+
l, err := net.Listen("unix", socketPath)
143145
if err != nil {
144146
return fmt.Errorf("failed to listen on pod info socket: %v", err)
145147
}
146-
if err := os.Chmod(s.path, 0600); err != nil {
148+
if err := os.Chmod(socketPath, 0600); err != nil {
147149
l.Close()
148150
return fmt.Errorf("failed to set pod info socket mode: %v", err)
149151
}

pkg/network/node/cniserver/cniserver_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -60,17 +60,17 @@ func TestCNIServer(t *testing.T) {
6060
t.Fatalf("failed to create temp directory: %v", err)
6161
}
6262
defer os.RemoveAll(tmpDir)
63+
socketPath := filepath.Join(tmpDir, CNIServerSocketName)
6364

64-
path := filepath.Join(tmpDir, "cni-server.sock")
65-
s := NewCNIServer(path)
65+
s := NewCNIServer(tmpDir)
6666
if err := s.Start(serverHandleCNI); err != nil {
6767
t.Fatalf("error starting CNI server: %v", err)
6868
}
6969

7070
client := &http.Client{
7171
Transport: &http.Transport{
7272
Dial: func(proto, addr string) (net.Conn, error) {
73-
return net.Dial("unix", path)
73+
return net.Dial("unix", socketPath)
7474
},
7575
},
7676
}

pkg/network/node/node.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,7 +346,7 @@ func (node *OsdnNode) Start() error {
346346
}
347347

348348
glog.V(2).Infof("Starting openshift-sdn pod manager")
349-
if err := node.podManager.Start(cniserver.CNIServerSocketPath, node.localSubnetCIDR, node.networkInfo.ClusterNetworks); err != nil {
349+
if err := node.podManager.Start(cniserver.CNIServerRunDir, node.localSubnetCIDR, node.networkInfo.ClusterNetworks); err != nil {
350350
return err
351351
}
352352

pkg/network/node/pod.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ func getIPAMConfig(clusterNetworks []common.ClusterNetwork, localSubnet string)
167167
}
168168

169169
// Start the CNI server and start processing requests from it
170-
func (m *podManager) Start(socketPath string, localSubnetCIDR string, clusterNetworks []common.ClusterNetwork) error {
170+
func (m *podManager) Start(rundir string, localSubnetCIDR string, clusterNetworks []common.ClusterNetwork) error {
171171
if m.enableHostports {
172172
iptInterface := utiliptables.New(utilexec.New(), utildbus.New(), utiliptables.ProtocolIpv4)
173173
m.hostportSyncer = kubehostport.NewHostportSyncer(iptInterface)
@@ -180,7 +180,7 @@ func (m *podManager) Start(socketPath string, localSubnetCIDR string, clusterNet
180180

181181
go m.processCNIRequests()
182182

183-
m.cniServer = cniserver.NewCNIServer(socketPath)
183+
m.cniServer = cniserver.NewCNIServer(rundir)
184184
return m.cniServer.Start(m.handleCNIRequest)
185185
}
186186

pkg/network/node/pod_test.go

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,7 @@ func TestPodManager(t *testing.T) {
156156
t.Fatalf("failed to create temp directory: %v", err)
157157
}
158158
defer os.RemoveAll(tmpDir)
159-
socketPath := filepath.Join(tmpDir, "cni-server.sock")
159+
socketPath := filepath.Join(tmpDir, cniserver.CNIServerSocketName)
160160

161161
testcases := map[string]struct {
162162
operations []*operation
@@ -318,7 +318,10 @@ func TestPodManager(t *testing.T) {
318318
podManager := newDefaultPodManager()
319319
podManager.podHandler = podTester
320320
_, cidr, _ := net.ParseCIDR("1.2.0.0/16")
321-
podManager.Start(socketPath, "1.2.3.0/24", []common.ClusterNetwork{{ClusterCIDR: cidr, HostSubnetLength: 8}})
321+
err := podManager.Start(tmpDir, "1.2.3.0/24", []common.ClusterNetwork{{ClusterCIDR: cidr, HostSubnetLength: 8}})
322+
if err != nil {
323+
t.Fatalf("could not start PodManager: %v", err)
324+
}
322325

323326
// Add pods to our expected pod list before kicking off the
324327
// actual pod setup to ensure we don't concurrently access
@@ -408,13 +411,16 @@ func TestDirectPodUpdate(t *testing.T) {
408411
t.Fatalf("failed to create temp directory: %v", err)
409412
}
410413
defer os.RemoveAll(tmpDir)
411-
socketPath := filepath.Join(tmpDir, "cni-server.sock")
414+
socketPath := filepath.Join(tmpDir, cniserver.CNIServerSocketName)
412415

413416
podTester := newPodTester(t, "update", socketPath)
414417
podManager := newDefaultPodManager()
415418
podManager.podHandler = podTester
416419
_, cidr, _ := net.ParseCIDR("1.2.0.0/16")
417-
podManager.Start(socketPath, "1.2.3.0/24", []common.ClusterNetwork{{ClusterCIDR: cidr, HostSubnetLength: 8}})
420+
err = podManager.Start(tmpDir, "1.2.3.0/24", []common.ClusterNetwork{{ClusterCIDR: cidr, HostSubnetLength: 8}})
421+
if err != nil {
422+
t.Fatalf("could not start PodManager: %v", err)
423+
}
418424

419425
op := &operation{
420426
command: cniserver.CNI_UPDATE,

pkg/network/sdn-cni-plugin/sdn_cni_plugin_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ func TestOpenshiftSdnCNIPlugin(t *testing.T) {
6363
}
6464
defer os.RemoveAll(tmpDir)
6565

66-
path := filepath.Join(tmpDir, "cni-server.sock")
67-
server := cniserver.NewCNIServer(path)
66+
path := filepath.Join(tmpDir, cniserver.CNIServerSocketName)
67+
server := cniserver.NewCNIServer(tmpDir)
6868
if err := server.Start(serverHandleCNI); err != nil {
6969
t.Fatalf("error starting CNI server: %v", err)
7070
}

0 commit comments

Comments
 (0)