mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
BIND: Enable hermetic zone builds (#2275)
Co-authored-by: Tom Limoncelli <tal@whatexit.org>
This commit is contained in:
@ -9,6 +9,7 @@ import (
|
|||||||
"golang.org/x/net/idna"
|
"golang.org/x/net/idna"
|
||||||
|
|
||||||
"github.com/StackExchange/dnscontrol/v3/models"
|
"github.com/StackExchange/dnscontrol/v3/models"
|
||||||
|
"github.com/StackExchange/dnscontrol/v3/pkg/bindserial"
|
||||||
"github.com/StackExchange/dnscontrol/v3/pkg/credsfile"
|
"github.com/StackExchange/dnscontrol/v3/pkg/credsfile"
|
||||||
"github.com/StackExchange/dnscontrol/v3/pkg/diff2"
|
"github.com/StackExchange/dnscontrol/v3/pkg/diff2"
|
||||||
"github.com/StackExchange/dnscontrol/v3/pkg/nameservers"
|
"github.com/StackExchange/dnscontrol/v3/pkg/nameservers"
|
||||||
@ -68,6 +69,11 @@ func (args *PreviewArgs) flags() []cli.Flag {
|
|||||||
Destination: &args.Full,
|
Destination: &args.Full,
|
||||||
Usage: `Add headings, providers names, notifications of no changes, etc`,
|
Usage: `Add headings, providers names, notifications of no changes, etc`,
|
||||||
})
|
})
|
||||||
|
flags = append(flags, &cli.Int64Flag{
|
||||||
|
Name: "bindserial",
|
||||||
|
Destination: &bindserial.ForcedValue,
|
||||||
|
Usage: `Force BIND serial numbers to this value (for reproducibility)`,
|
||||||
|
})
|
||||||
return flags
|
return flags
|
||||||
}
|
}
|
||||||
|
|
||||||
|
11
pkg/bindserial/main.go
Normal file
11
pkg/bindserial/main.go
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package bindserial
|
||||||
|
|
||||||
|
// NB(tlim): Yes, its gross to use a global variable for this.
|
||||||
|
// However there's no cleaner way to do it. Ideally we'd add a way to
|
||||||
|
// have per-provider flags or settings on the command line. At least
|
||||||
|
// by isolating it to this file we limit the blast radius of this bad
|
||||||
|
// decision.
|
||||||
|
|
||||||
|
// ForceBindSerial if non-zero, BIND will generate SOA serial numbers
|
||||||
|
// using this value.
|
||||||
|
var ForcedValue int64
|
@ -4,6 +4,8 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"strconv"
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/StackExchange/dnscontrol/v3/pkg/bindserial"
|
||||||
)
|
)
|
||||||
|
|
||||||
var nowFunc = time.Now
|
var nowFunc = time.Now
|
||||||
@ -18,6 +20,12 @@ func generateSerial(oldSerial uint32) uint32 {
|
|||||||
// that is smaller than the old one, we punt and increment the old number.
|
// that is smaller than the old one, we punt and increment the old number.
|
||||||
// At no time will a serial number == 0 be returned.
|
// At no time will a serial number == 0 be returned.
|
||||||
|
|
||||||
|
if bindserial.ForcedValue != 0 {
|
||||||
|
// https://github.com/StackExchange/dnscontrol/issues/1859
|
||||||
|
// User needs to have reproducible builds and BIND generates
|
||||||
|
return uint32(bindserial.ForcedValue & 0xFFFF)
|
||||||
|
}
|
||||||
|
|
||||||
original := oldSerial
|
original := oldSerial
|
||||||
var newSerial uint32
|
var newSerial uint32
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user