Skip to content

Commit 0fb8be0

Browse files
committed
Introduce dns-enable option to deploy DNS provider
1 parent 1ca3eec commit 0fb8be0

File tree

3 files changed

+50
-21
lines changed

3 files changed

+50
-21
lines changed

netmaster/main.go

+9
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ type cliOpts struct {
3939
storeURL string
4040
listenURL string
4141
clusterMode string
42+
dnsEnabled bool
4243
version bool
4344
}
4445

@@ -107,6 +108,10 @@ func parseOpts(opts *cliOpts) error {
107108
"cluster-mode",
108109
"docker",
109110
"{docker, kubernetes}")
111+
flagSet.BoolVar(&opts.dnsEnabled,
112+
"dns-enable",
113+
true,
114+
"Turn on DNS {true, false}")
110115
flagSet.BoolVar(&opts.version,
111116
"version",
112117
false,
@@ -142,6 +147,10 @@ func execOpts(opts *cliOpts) core.StateDriver {
142147
log.Fatalf("Failed to set cluster-mode. Error: %s", err)
143148
}
144149

150+
if err := master.SetDNSEnabled(opts.dnsEnabled); err != nil {
151+
log.Fatalf("Failed to set dns-enable. Error: %s", err)
152+
}
153+
145154
sd, err := initStateDriver(opts)
146155
if err != nil {
147156
log.Fatalf("Failed to init state-store. Error: %s", err)

netmaster/master/netmaster.go

+28-8
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ const (
3838
// Run Time config of netmaster
3939
type nmRunTimeConf struct {
4040
clusterMode string
41+
dnsEnabled bool
4142
}
4243

4344
var masterRTCfg nmRunTimeConf
@@ -53,6 +54,7 @@ func SetClusterMode(cm string) error {
5354
}
5455

5556
masterRTCfg.clusterMode = cm
57+
SetDNSEnabled(false)
5658
return nil
5759
}
5860

@@ -61,6 +63,22 @@ func GetClusterMode() string {
6163
return masterRTCfg.clusterMode
6264
}
6365

66+
// IsDNSEnabled gets the status of whether DNS is enabled
67+
func IsDNSEnabled() bool {
68+
return masterRTCfg.dnsEnabled
69+
}
70+
71+
// SetDNSEnabled sets the status of DNS Enable
72+
func SetDNSEnabled(dnsEnableFlag bool) error {
73+
log.Infof("Setting dns flag to %s", dnsEnableFlag)
74+
masterRTCfg.dnsEnabled = dnsEnableFlag
75+
return nil
76+
}
77+
78+
func getDNSName(tenantName string) string {
79+
return tenantName + "dns"
80+
}
81+
6482
func getEpName(networkName string, ep *intent.ConfigEP) string {
6583
if ep.Container != "" {
6684
return networkName + "-" + ep.Container
@@ -196,12 +214,12 @@ func CreateTenant(stateDriver core.StateDriver, tenant *intent.ConfigTenant) err
196214
return err
197215
}
198216

199-
if GetClusterMode() == "docker" {
217+
if IsDNSEnabled() {
200218
// start skydns container
201219
err = startServiceContainer(tenant.Name)
202220
if err != nil {
203-
log.Errorf("Error starting service container. Err: %v", err)
204-
return err
221+
log.Errorf("Error starting service container. Err: %v. Disabling DNS option.", err)
222+
SetDNSEnabled(false)
205223
}
206224
}
207225

@@ -243,7 +261,7 @@ func startServiceContainer(tenantName string) error {
243261
"SKYDNS_ADDR=0.0.0.0:53",
244262
"SKYDNS_DOMAIN=" + tenantName}}
245263

246-
containerID, err := docker.CreateContainer(containerConfig, tenantName+"dns", nil)
264+
containerID, err := docker.CreateContainer(containerConfig, getDNSName(tenantName), nil)
247265
if err != nil {
248266
log.Errorf("Error creating DNS container for tenant: %s. Error: %s", tenantName, err)
249267
}
@@ -268,7 +286,7 @@ func stopAndRemoveServiceContainer(tenantName string) error {
268286
return err
269287
}
270288

271-
dnsContName := tenantName + "dns"
289+
dnsContName := getDNSName(tenantName)
272290
// Stop the container
273291
err = docker.StopContainer(dnsContName, 10)
274292
if err != nil {
@@ -286,15 +304,17 @@ func stopAndRemoveServiceContainer(tenantName string) error {
286304

287305
// DeleteTenantID deletes a tenant from the state store, by ID.
288306
func DeleteTenantID(stateDriver core.StateDriver, tenantID string) error {
289-
if GetClusterMode() == "docker" {
290-
err := stopAndRemoveServiceContainer(tenantID)
307+
var err error
308+
309+
if IsDNSEnabled() {
310+
err = stopAndRemoveServiceContainer(tenantID)
291311
if err != nil {
292312
log.Errorf("Error in stopping service container for tenant: %+v", tenantID)
293313
return err
294314
}
295315
}
296316

297-
return nil
317+
return err
298318
}
299319

300320
// DeleteTenant deletes a tenant from the state store based on its ConfigTenant.

netmaster/master/network.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,9 @@ func CreateNetwork(network intent.ConfigNetwork, stateDriver core.StateDriver, t
148148
log.Errorf("Error creating network %s in docker. Err: %v", nwCfg.ID, err)
149149
return err
150150
}
151+
}
151152

153+
if IsDNSEnabled() {
152154
// Attach service container endpoint to the network
153155
err = attachServiceContainer(tenantName, network.Name, stateDriver)
154156
if err != nil {
@@ -162,7 +164,7 @@ func CreateNetwork(network intent.ConfigNetwork, stateDriver core.StateDriver, t
162164
}
163165

164166
func attachServiceContainer(tenantName, networkName string, stateDriver core.StateDriver) error {
165-
contName := tenantName + "dns"
167+
contName := getDNSName(tenantName)
166168
docker, err := utils.GetDockerClient()
167169
if err != nil {
168170
log.Errorf("Unable to connect to docker. Error %v", err)
@@ -236,7 +238,7 @@ func detachServiceContainer(tenantName, networkName string) error {
236238
return errors.New("Unable to connect to docker")
237239
}
238240

239-
dnsContName := tenantName + "dns"
241+
dnsContName := getDNSName(tenantName)
240242
cinfo, err := docker.InspectContainer(dnsContName)
241243
if err != nil {
242244
log.Errorf("Error inspecting the container %s. Err: %v", dnsContName, err)
@@ -338,18 +340,20 @@ func DeleteNetworkID(stateDriver core.StateDriver, netID string) error {
338340
return err
339341
}
340342

341-
// Check if there are any active endpoints
342-
if hasActiveEndpoints(nwCfg) {
343-
return core.Errorf("Error: Network has active endpoints")
344-
}
345-
346-
if GetClusterMode() == "docker" {
343+
if IsDNSEnabled() {
347344
// detach Dns container
348345
err = detachServiceContainer(nwCfg.Tenant, nwCfg.NetworkName)
349346
if err != nil {
350347
log.Errorf("Error detaching service container. Err: %v", err)
351348
}
349+
}
352350

351+
// Check if there are any active endpoints
352+
if hasActiveEndpoints(nwCfg) {
353+
return core.Errorf("Error: Network has active endpoints")
354+
}
355+
356+
if GetClusterMode() == "docker" {
353357
// Delete the docker network
354358
err = docknet.DeleteDockNet(nwCfg.Tenant, nwCfg.NetworkName, "")
355359
if err != nil {
@@ -499,9 +503,5 @@ func networkReleaseAddress(nwCfg *mastercfg.CfgNetworkState, ipAddress string) e
499503
}
500504

501505
func hasActiveEndpoints(nwCfg *mastercfg.CfgNetworkState) bool {
502-
// Uncomment the below after https://github.com/contiv/netplugin/pull/269 is merged
503-
// We spin a dns container if IsDNSEnabled() == true
504-
// We need to exlude that from Active EPs check.
505-
//return (IsDNSEnabled() && nwCfg.EpCount > 1) || ((!IsDNSEnabled()) && nwCfg.EpCount > 0)
506-
return nwCfg.EpCount > 1
506+
return nwCfg.EpCount > 0
507507
}

0 commit comments

Comments
 (0)