mirror of
https://github.com/caddyserver/caddy.git
synced 2025-05-31 00:06:04 +08:00
reverse_proxy: Add UnmarshalCaddyfile for random_choose selection policy
Also allow caddy.Duration to be given integer values which are treated like regular time.Duration values (nanoseconds). Fixes #2856
This commit is contained in:
@ -20,10 +20,12 @@ import (
|
||||
weakrand "math/rand"
|
||||
"net"
|
||||
"net/http"
|
||||
"strconv"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/caddyserver/caddy/v2"
|
||||
"github.com/caddyserver/caddy/v2/caddyconfig/caddyfile"
|
||||
)
|
||||
|
||||
func init() {
|
||||
@ -87,6 +89,22 @@ func (RandomChoiceSelection) CaddyModule() caddy.ModuleInfo {
|
||||
}
|
||||
}
|
||||
|
||||
// UnmarshalCaddyfile sets up the module from Caddyfile tokens.
|
||||
func (r *RandomChoiceSelection) UnmarshalCaddyfile(d *caddyfile.Dispenser) error {
|
||||
for d.Next() {
|
||||
if !d.NextArg() {
|
||||
return d.ArgErr()
|
||||
}
|
||||
chooseStr := d.Val()
|
||||
choose, err := strconv.Atoi(chooseStr)
|
||||
if err != nil {
|
||||
return d.Errf("invalid choice value '%s': %v", chooseStr, err)
|
||||
}
|
||||
r.Choose = choose
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Provision sets up r.
|
||||
func (r *RandomChoiceSelection) Provision(ctx caddy.Context) error {
|
||||
if r.Choose == 0 {
|
||||
@ -350,4 +368,6 @@ var (
|
||||
|
||||
_ caddy.Validator = (*RandomChoiceSelection)(nil)
|
||||
_ caddy.Provisioner = (*RandomChoiceSelection)(nil)
|
||||
|
||||
_ caddyfile.Unmarshaler = (*RandomChoiceSelection)(nil)
|
||||
)
|
||||
|
Reference in New Issue
Block a user