Allow enabling/disabling target dhcp server (#160)
* Allow enabling/disabling target dhcp server * add test * extend tests
This commit is contained in:
@@ -25,7 +25,7 @@ mocks: mockgen
|
||||
release: semver goreleaser
|
||||
@version=$$($(LOCALBIN)/semver); \
|
||||
git tag -s $$version -m"Release $$version"
|
||||
$(GORELEASER) --rm-dist
|
||||
$(GORELEASER) --clean
|
||||
|
||||
test-release: goreleaser
|
||||
$(GORELEASER) --skip-publish --snapshot --rm-dist
|
||||
@@ -92,11 +92,11 @@ update-toolbox-tools:
|
||||
## toolbox - end
|
||||
|
||||
start-replica:
|
||||
docker run --pull always --name adguardhome-replica -p 9091:3000 --rm adguard/adguardhome:v0.107.23
|
||||
docker run --pull always --name adguardhome-replica -p 9091:3000 --rm adguard/adguardhome:latest
|
||||
# docker run --pull always --name adguardhome-replica -p 9090:80 -p 9091:3000 --rm adguard/adguardhome:v0.107.13
|
||||
|
||||
start-replica2:
|
||||
docker run --pull always --name adguardhome-replica2 -p 9093:3000 --rm adguard/adguardhome:v0.107.23
|
||||
docker run --pull always --name adguardhome-replica2 -p 9093:3000 --rm adguard/adguardhome:latest
|
||||
# docker run --pull always --name adguardhome-replica -p 9090:80 -p 9091:3000 --rm adguard/adguardhome:v0.107.13
|
||||
|
||||
check_defined = \
|
||||
|
||||
@@ -138,6 +138,7 @@ services:
|
||||
REPLICA1_APIPATH: '/some/path/control'
|
||||
# REPLICA1_AUTOSETUP: true # if true, AdGuardHome is automatically initialized.
|
||||
# REPLICA1_INTERFACENAME: 'ens18' # use custom dhcp interface name
|
||||
# REPLICA1_DHCPSERVERENABLED: true/false (optional) enables/disables the dhcp server on the replica
|
||||
CRON: '*/10 * * * *' # run every 10 minutes
|
||||
RUNONSTART: true
|
||||
# Configure sync features; by default all features are enabled.
|
||||
|
||||
+13
-1
@@ -58,6 +58,7 @@ const (
|
||||
envReplicasInterfaceName = "REPLICA%s_INTERFACENAME"
|
||||
// Deprecated: use envReplicasInterfaceName instead
|
||||
envReplicasInterfaceNameDeprecated = "REPLICA%s_INTERFACWENAME"
|
||||
envDHCPServerEnabled = "REPLICA%s_DHCPSERVERENABLED"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -152,7 +153,7 @@ func collectEnvReplicas(logger *zap.SugaredLogger) []types.AdGuardInstance {
|
||||
AutoSetup: strings.EqualFold(os.Getenv(fmt.Sprintf(envReplicasAutoSetup, sm[1])), "true"),
|
||||
InterfaceName: os.Getenv(fmt.Sprintf(envReplicasInterfaceName, sm[1])),
|
||||
}
|
||||
if re.InterfaceName != "" {
|
||||
if re.InterfaceName == "" {
|
||||
if in, ok := os.LookupEnv(fmt.Sprintf(envReplicasInterfaceNameDeprecated, sm[1])); ok {
|
||||
logger.
|
||||
With("correct", envReplicasInterfaceName, "deprecated", envReplicasInterfaceNameDeprecated).
|
||||
@@ -160,9 +161,20 @@ func collectEnvReplicas(logger *zap.SugaredLogger) []types.AdGuardInstance {
|
||||
re.InterfaceName = in
|
||||
}
|
||||
}
|
||||
if dhcpEnabled, ok := os.LookupEnv(fmt.Sprintf(envDHCPServerEnabled, sm[1])); ok {
|
||||
if strings.EqualFold(dhcpEnabled, "true") {
|
||||
re.DHCPServerEnabled = boolPtr(true)
|
||||
} else if strings.EqualFold(dhcpEnabled, "false") {
|
||||
re.DHCPServerEnabled = boolPtr(false)
|
||||
}
|
||||
}
|
||||
replicas = append(replicas, re)
|
||||
}
|
||||
}
|
||||
|
||||
return replicas
|
||||
}
|
||||
|
||||
func boolPtr(b bool) *bool {
|
||||
return &b
|
||||
}
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package cmd
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"os"
|
||||
|
||||
"github.com/bakito/adguardhome-sync/pkg/log"
|
||||
@@ -22,6 +23,9 @@ var envVars = []string{
|
||||
"FEATURES_DNS_SERVERCONFIG",
|
||||
"FEATURES_DNS_ACCESSLISTS",
|
||||
"FEATURES_DNS_REWRITES",
|
||||
"REPLICA1_INTERFACENAME",
|
||||
"REPLICA1_INTERFACWENAME",
|
||||
"REPLICA1_DHCPSERVERENABLED",
|
||||
}
|
||||
|
||||
var _ = Describe("Run", func() {
|
||||
@@ -33,6 +37,11 @@ var _ = Describe("Run", func() {
|
||||
}
|
||||
initConfig()
|
||||
})
|
||||
AfterEach(func() {
|
||||
for _, envVar := range envVars {
|
||||
Ω(os.Unsetenv(envVar)).ShouldNot(HaveOccurred())
|
||||
}
|
||||
})
|
||||
Context("getConfig", func() {
|
||||
It("features should be true by default", func() {
|
||||
cfg, err := getConfig(logger)
|
||||
@@ -47,6 +56,48 @@ var _ = Describe("Run", func() {
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
verifyFeatures(cfg, false)
|
||||
})
|
||||
Context("interface name", func() {
|
||||
It("should set interface name of replica 1", func() {
|
||||
Ω(os.Setenv("REPLICA1_URL", "https://foo.bar")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envReplicasInterfaceName, "1"), "eth0")).ShouldNot(HaveOccurred())
|
||||
cfg, err := getConfig(logger)
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
Ω(cfg.Replicas[0].InterfaceName).Should(Equal("eth0"))
|
||||
})
|
||||
It("should set interface name of replica 1 from deprecated env", func() {
|
||||
Ω(os.Setenv("REPLICA1_URL", "https://foo.bar")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envReplicasInterfaceNameDeprecated, "1"), "eth0")).ShouldNot(HaveOccurred())
|
||||
cfg, err := getConfig(logger)
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
Ω(cfg.Replicas[0].InterfaceName).Should(Equal("eth0"))
|
||||
})
|
||||
It("deprecated should not overwrite the correct", func() {
|
||||
Ω(os.Setenv("REPLICA1_URL", "https://foo.bar")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envReplicasInterfaceNameDeprecated, "1"), "eth1")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envReplicasInterfaceName, "1"), "eth0")).ShouldNot(HaveOccurred())
|
||||
cfg, err := getConfig(logger)
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
Ω(cfg.Replicas[0].InterfaceName).Should(Equal("eth0"))
|
||||
})
|
||||
})
|
||||
Context("dhcp server", func() {
|
||||
It("should enable the dhcp server of replica 1", func() {
|
||||
Ω(os.Setenv("REPLICA1_URL", "https://foo.bar")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envDHCPServerEnabled, "1"), "true")).ShouldNot(HaveOccurred())
|
||||
cfg, err := getConfig(logger)
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
Ω(cfg.Replicas[0].DHCPServerEnabled).ShouldNot(BeNil())
|
||||
Ω(*cfg.Replicas[0].DHCPServerEnabled).Should(BeTrue())
|
||||
})
|
||||
It("should disable the dhcp server of replica 1", func() {
|
||||
Ω(os.Setenv("REPLICA1_URL", "https://foo.bar")).ShouldNot(HaveOccurred())
|
||||
Ω(os.Setenv(fmt.Sprintf(envDHCPServerEnabled, "1"), "false")).ShouldNot(HaveOccurred())
|
||||
cfg, err := getConfig(logger)
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
Ω(cfg.Replicas[0].DHCPServerEnabled).ShouldNot(BeNil())
|
||||
Ω(*cfg.Replicas[0].DHCPServerEnabled).Should(BeFalse())
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@@ -492,6 +492,11 @@ func (w *worker) syncDHCPServer(osc *types.DHCPServerConfig, rc client.Client, r
|
||||
// overwrite interface name
|
||||
origClone.InterfaceName = replica.InterfaceName
|
||||
}
|
||||
if replica.DHCPServerEnabled != nil {
|
||||
// overwrite dhcp enabled
|
||||
origClone.Enabled = *replica.DHCPServerEnabled
|
||||
}
|
||||
|
||||
if !sc.Equals(origClone) {
|
||||
if err = rc.SetDHCPServerConfig(origClone); err != nil {
|
||||
return err
|
||||
|
||||
@@ -13,6 +13,8 @@ import (
|
||||
. "github.com/onsi/gomega"
|
||||
)
|
||||
|
||||
var boolTrue = true
|
||||
|
||||
var _ = Describe("Sync", func() {
|
||||
var (
|
||||
mockCtrl *gm.Controller
|
||||
@@ -455,6 +457,14 @@ var _ = Describe("Sync", func() {
|
||||
err := w.syncDHCPServer(osc, cl, types.AdGuardInstance{InterfaceName: "foo"})
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
})
|
||||
It("should enable the target dhcp server", func() {
|
||||
cl.EXPECT().DHCPServerConfig().Return(rsc, nil)
|
||||
oscClone := osc.Clone()
|
||||
oscClone.Enabled = true
|
||||
cl.EXPECT().SetDHCPServerConfig(oscClone)
|
||||
err := w.syncDHCPServer(osc, cl, types.AdGuardInstance{DHCPServerEnabled: &boolTrue})
|
||||
Ω(err).ShouldNot(HaveOccurred())
|
||||
})
|
||||
})
|
||||
|
||||
Context("sync", func() {
|
||||
|
||||
@@ -64,6 +64,7 @@ type AdGuardInstance struct {
|
||||
InsecureSkipVerify bool `json:"insecureSkipVerify" yaml:"insecureSkipVerify"`
|
||||
AutoSetup bool `json:"autoSetup" yaml:"autoSetup"`
|
||||
InterfaceName string `json:"interfaceName" yaml:"interfaceName"`
|
||||
DHCPServerEnabled *bool `json:"dhcpServerEnabled,omitempty" yaml:"dhcpServerEnabled,omitempty"`
|
||||
}
|
||||
|
||||
// Key AdGuardInstance key
|
||||
|
||||
Reference in New Issue
Block a user