@@ -106,6 +106,14 @@ func createSandbox(ContainerID, netns string) (string, error) {
106106
107107func createEndpoint (ContainerID string , netConfig types.NetConf ) (client.EndpointInfo , error ) {
108108 var ep client.EndpointInfo
109+ // Create network if it doesnt exist. Need to handle refcount to delete
110+ // network on last pod delete. Also handle different network types and option
111+ if ! networkExists (netConfig .Name ) {
112+ if err := createNetwork (netConfig .Name , "overlay" ); err != nil {
113+ return ep , err
114+ }
115+ }
116+
109117 sc := client.ServiceCreate {Name : ContainerID , Network : netConfig .Name , DisableResolution : true }
110118 obj , _ , err := readBody (httpCall ("POST" , "/services" , sc , nil ))
111119 if err != nil {
@@ -123,3 +131,43 @@ func endpointJoin(sandboxID, endpointID, netns string) (retErr error) {
123131
124132 return err
125133}
134+
135+ func networkExists (networkName string ) bool {
136+ fmt .Printf ("Check if %s network exists \n " , networkName )
137+ obj , statusCode , err := readBody (httpCall ("GET" , "/networks?name=" + networkName , nil , nil ))
138+ if err != nil {
139+ fmt .Printf ("%s network does not exists \n " , networkName )
140+ return false
141+ }
142+ if statusCode != http .StatusOK {
143+ fmt .Printf ("%s network does not exists \n " , networkName )
144+ return false
145+ }
146+ var list []* client.NetworkResource
147+ err = json .Unmarshal (obj , & list )
148+ if err != nil {
149+ return false
150+ }
151+ fmt .Printf ("%s network exists \n " , networkName )
152+ return (len (list ) != 0 )
153+ }
154+
155+ // createNetwork is a very simple utility to create a default network
156+ // if not present. This needs to be expanded into a more full utility function
157+ func createNetwork (networkName string , driver string ) error {
158+ fmt .Printf ("Creating a network %s driver: %s \n " , networkName , driver )
159+ driverOpts := make (map [string ]string )
160+ driverOpts ["hostaccess" ] = ""
161+ nc := client.NetworkCreate {Name : networkName , NetworkType : driver ,
162+ DriverOpts : driverOpts }
163+ obj , _ , err := readBody (httpCall ("POST" , "/networks" , nc , nil ))
164+ if err != nil {
165+ return err
166+ }
167+ var replyID string
168+ err = json .Unmarshal (obj , & replyID )
169+ if err != nil {
170+ return err
171+ }
172+ return nil
173+ }
0 commit comments