@@ -19,23 +19,23 @@ const heartbeatInterval = 10 * time.Second
1919const persistenceInterval = 30 * time .Second
2020
2121type Config struct {
22- BW2Entity string `yaml:"bw2Entity"`
23- BW2Agent string `yaml:"bw2Agent"`
24- Path string `yaml:"path"`
25- CPUShares uint64 `yaml:"cpuShares"`
26- Memory uint64 `yaml:"memory"`
27- Backend string `yaml:"backend"`
22+ BW2Entity string `yaml:"bw2Entity"`
23+ BW2Agent string `yaml:"bw2Agent"`
24+ Path string `yaml:"path"`
25+ CPUShares uint64 `yaml:"cpuShares"`
26+ Memory uint64 `yaml:"memory"`
27+ Backend string `yaml:"backend"`
28+ EnableHostNetworking bool `yaml:"enableHostNetworking"`
29+ EnableDeviceMapping bool `yaml:"enableDeviceMapping"`
2830}
2931
3032type SpawnpointDaemon struct {
33+ Config
3134 bw2Client * bw2.BW2Client
3235 bw2Service * bw2.Service
3336 backend backend.ServiceBackend
3437 logger * logging.Logger
35- path string
3638 alias string
37- totalCPUShares uint64
38- totalMemory uint64
3939 availableCPUShares uint64
4040 availableMemory uint64
4141 resourceLock sync.RWMutex
@@ -56,11 +56,9 @@ func New(config *Config, logger *logging.Logger) (*SpawnpointDaemon, error) {
5656
5757 pathElements := strings .Split (config .Path , "/" )
5858 daemon := SpawnpointDaemon {
59+ Config : * config ,
5960 logger : logger ,
6061 alias : pathElements [len (pathElements )- 1 ],
61- path : config .Path ,
62- totalCPUShares : config .CPUShares ,
63- totalMemory : config .Memory ,
6462 availableCPUShares : config .CPUShares ,
6563 availableMemory : config .Memory ,
6664 serviceRegistry : make (map [string ]* serviceManifest ),
@@ -152,6 +150,22 @@ func (daemon *SpawnpointDaemon) handleConfig(msg *bw2.SimpleMessage) {
152150 return
153151 }
154152
153+ if svcConfig .UseHostNet && ! daemon .EnableHostNetworking {
154+ daemon .logger .Debugf ("(%s) Configuration requests use of host network, which is disabled" , svcConfig .Name )
155+ msg := "[ERROR] Use of host networking stack not allowed on this host"
156+ if err := daemon .publishLogMessage (svcConfig .Name , msg ); err != nil {
157+ daemon .logger .Errorf ("(%s) Failed to publish log message" , svcConfig .Name )
158+ }
159+ return
160+ } else if len (svcConfig .Devices ) > 0 && ! daemon .EnableDeviceMapping {
161+ daemon .logger .Debugf ("(%s) Configuration requests device mapping(s), which are disabled" , svcConfig .Name )
162+ msg := "[ERROR] Mapping devices into container not allowed on this host"
163+ if err := daemon .publishLogMessage (svcConfig .Name , msg ); err != nil {
164+ daemon .logger .Errorf ("(%s) Failed to publish log message" , svcConfig .Name )
165+ }
166+ return
167+ }
168+
155169 svc := serviceManifest {Configuration : & svcConfig }
156170 daemon .addService (& svc , true )
157171}
0 commit comments