Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
C
Coredns
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Railgun
Coredns
Commits
7c41f2ce
Commit
7c41f2ce
authored
Jul 06, 2018
by
Miek Gieben
Committed by
corbot[bot]
Jul 06, 2018
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
plugin/loadbalance: add parse and tests (#1947)
Automatically submitted.
parent
bcc749db
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
71 additions
and
16 deletions
+71
-16
plugin/loadbalance/README.md
plugin/loadbalance/README.md
+3
-3
plugin/loadbalance/loadbalance.go
plugin/loadbalance/loadbalance.go
+3
-11
plugin/loadbalance/setup.go
plugin/loadbalance/setup.go
+22
-2
plugin/loadbalance/setup_test.go
plugin/loadbalance/setup_test.go
+43
-0
No files found.
plugin/loadbalance/README.md
View file @
7c41f2ce
...
...
@@ -2,12 +2,12 @@
## Name
*loadbalance*
- randomize the order of A
and AAAA
records.
*loadbalance*
- randomize the order of A
, AAAA and MX
records.
## Description
The
*loadbalance*
will act as a round-robin DNS loadbalancer by randomizing the order of A
and AAAA
records in the answer.
The
*loadbalance*
will act as a round-robin DNS loadbalancer by randomizing the order of A
, AAAA,
and MX
records in the answer.
See
[
Wikipedia
](
https://en.wikipedia.org/wiki/Round-robin_DNS
)
about the pros and cons on this
setup. It will take care to sort any CNAMEs before any address records, because some stub resolver
...
...
plugin/loadbalance/loadbalance.go
View file @
7c41f2ce
// Package loadbalance shuffles A
and AAAA
records.
// Package loadbalance shuffles A
, AAAA and MX
records.
package
loadbalance
import
(
"github.com/miekg/dns"
)
// RoundRobinResponseWriter is a response writer that shuffles A and AAAA records.
type
RoundRobinResponseWriter
struct
{
dns
.
ResponseWriter
}
// RoundRobinResponseWriter is a response writer that shuffles A, AAAA and MX records.
type
RoundRobinResponseWriter
struct
{
dns
.
ResponseWriter
}
// WriteMsg implements the dns.ResponseWriter interface.
func
(
r
*
RoundRobinResponseWriter
)
WriteMsg
(
res
*
dns
.
Msg
)
error
{
...
...
@@ -77,9 +75,3 @@ func (r *RoundRobinResponseWriter) Write(buf []byte) (int, error) {
n
,
err
:=
r
.
ResponseWriter
.
Write
(
buf
)
return
n
,
err
}
// Hijack implements the dns.ResponseWriter interface.
func
(
r
*
RoundRobinResponseWriter
)
Hijack
()
{
r
.
ResponseWriter
.
Hijack
()
return
}
plugin/loadbalance/setup.go
View file @
7c41f2ce
package
loadbalance
import
(
"fmt"
"github.com/coredns/coredns/core/dnsserver"
"github.com/coredns/coredns/plugin"
clog
"github.com/coredns/coredns/plugin/pkg/log"
...
...
@@ -18,8 +20,9 @@ func init() {
}
func
setup
(
c
*
caddy
.
Controller
)
error
{
for
c
.
Next
()
{
// TODO(miek): block and option parsing
err
:=
parse
(
c
)
if
err
!=
nil
{
return
plugin
.
Error
(
"loadbalance"
,
err
)
}
dnsserver
.
GetConfig
(
c
)
.
AddPlugin
(
func
(
next
plugin
.
Handler
)
plugin
.
Handler
{
...
...
@@ -28,3 +31,20 @@ func setup(c *caddy.Controller) error {
return
nil
}
func
parse
(
c
*
caddy
.
Controller
)
error
{
for
c
.
Next
()
{
args
:=
c
.
RemainingArgs
()
switch
len
(
args
)
{
case
0
:
return
nil
case
1
:
if
args
[
0
]
!=
"round_robin"
{
return
fmt
.
Errorf
(
"unknown policy: %s"
,
args
[
0
])
}
return
nil
}
}
return
c
.
ArgErr
()
}
plugin/loadbalance/setup_test.go
0 → 100644
View file @
7c41f2ce
package
loadbalance
import
(
"strings"
"testing"
"github.com/mholt/caddy"
)
func
TestSetup
(
t
*
testing
.
T
)
{
tests
:=
[]
struct
{
input
string
shouldErr
bool
expectedPolicy
string
expectedErrContent
string
// substring from the expected error. Empty for positive cases.
}{
// positive
{
`loadbalance`
,
false
,
"round_robin"
,
""
},
{
`loadbalance round_robin`
,
false
,
"round_robin"
,
""
},
// negative
{
`loadbalance fleeb`
,
true
,
""
,
"unknown policy"
},
{
`loadbalance a b`
,
true
,
""
,
"argument count or unexpected line"
},
}
for
i
,
test
:=
range
tests
{
c
:=
caddy
.
NewTestController
(
"dns"
,
test
.
input
)
err
:=
parse
(
c
)
if
test
.
shouldErr
&&
err
==
nil
{
t
.
Errorf
(
"Test %d: Expected error but found %s for input %s"
,
i
,
err
,
test
.
input
)
}
if
err
!=
nil
{
if
!
test
.
shouldErr
{
t
.
Errorf
(
"Test %d: Expected no error but found one for input %s. Error was: %v"
,
i
,
test
.
input
,
err
)
}
if
!
strings
.
Contains
(
err
.
Error
(),
test
.
expectedErrContent
)
{
t
.
Errorf
(
"Test %d: Expected error to contain: %v, found error: %v, input: %s"
,
i
,
test
.
expectedErrContent
,
err
,
test
.
input
)
}
}
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment