mirror of
https://github.com/StackExchange/dnscontrol.git
synced 2024-05-11 05:55:12 +00:00
wip!
This commit is contained in:
@@ -227,7 +227,7 @@ func (c *cloudflareProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*m
|
||||
return c.GetZoneRecordsCorrections(dc, records)
|
||||
}
|
||||
|
||||
func (c *cloudflareProvider) GetZoneRecordsCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||
func (c *cloudflareProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, records models.Records) ([]*models.Correction, error) {
|
||||
|
||||
if err := c.preprocessConfig(dc); err != nil {
|
||||
return nil, err
|
||||
@@ -241,6 +241,11 @@ func (c *cloudflareProvider) GetZoneRecordsCorrections(dc *models.DomainConfig)
|
||||
}
|
||||
}
|
||||
|
||||
domainID, err := c.getDomainID(dc.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if c.manageRedirects {
|
||||
prs, err := c.getPageRules(domainID, dc.Name)
|
||||
//printer.Printf("GET PAGE RULES:\n")
|
||||
|
||||
@@ -84,7 +84,7 @@ func (c *cloudnsProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
domainID, ok := c.domainIndex[dc.Name]
|
||||
_, ok := c.domainIndex[dc.Name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("'%s' not a zone in ClouDNS account", dc.Name)
|
||||
}
|
||||
@@ -104,6 +104,15 @@ func (c *cloudnsProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mode
|
||||
record.TTL = fixTTL(record.TTL)
|
||||
}
|
||||
|
||||
return c.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (c *cloudnsProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
domainID, ok := c.domainIndex[dc.Name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("'%s' not a zone in ClouDNS account", dc.Name)
|
||||
}
|
||||
|
||||
var corrections []*models.Correction
|
||||
var differ diff.Differ
|
||||
if !diff2.EnableDiff2 {
|
||||
|
||||
@@ -89,7 +89,12 @@ func (client *providerClient) GetDomainCorrections(dc *models.DomainConfig) ([]*
|
||||
|
||||
clean := PrepFoundRecords(existing)
|
||||
PrepDesiredRecords(dc)
|
||||
return client.GenerateDomainCorrections(dc, clean)
|
||||
|
||||
// Normalize
|
||||
models.PostProcessRecords(clean)
|
||||
//txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
|
||||
return client.GetZoneRecordsCorrections(dc, clean)
|
||||
}
|
||||
|
||||
// PrepFoundRecords munges any records to make them compatible with
|
||||
@@ -111,11 +116,7 @@ func PrepDesiredRecords(dc *models.DomainConfig) {
|
||||
}
|
||||
|
||||
// GetDomainCorrections gets existing records, diffs them against existing, and returns corrections.
|
||||
func (client *providerClient) GenerateDomainCorrections(dc *models.DomainConfig, foundRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
// Normalize
|
||||
models.PostProcessRecords(foundRecords)
|
||||
//txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
func (client *providerClient) GetZoneRecordsCorrections(dc *models.DomainConfig, foundRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
var corrections []*models.Correction
|
||||
var err error
|
||||
|
||||
@@ -93,7 +93,7 @@ func (c *desecProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models
|
||||
}
|
||||
c.mutex.Unlock()
|
||||
PrepDesiredRecords(dc, minTTL)
|
||||
return c.GenerateDomainCorrections(dc, clean)
|
||||
return c.GetZoneRecordsCorrections(dc, clean)
|
||||
}
|
||||
|
||||
// GetZoneRecords gets the records of a zone and returns them in RecordConfig format.
|
||||
@@ -162,7 +162,7 @@ func PrepDesiredRecords(dc *models.DomainConfig, minTTL uint32) {
|
||||
// a list of functions to call to actually make the desired
|
||||
// correction, and a message to output to the user when the change is
|
||||
// made.
|
||||
func (c *desecProvider) GenerateDomainCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
func (c *desecProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
|
||||
var corrections []*models.Correction
|
||||
var err error
|
||||
|
||||
@@ -134,7 +134,6 @@ func (api *digitaloceanProvider) GetZoneRecords(domain string) (models.Records,
|
||||
|
||||
// GetDomainCorrections returns a list of corretions for the domain.
|
||||
func (api *digitaloceanProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||
ctx := context.Background()
|
||||
dc.Punycode()
|
||||
|
||||
existingRecords, err := api.GetZoneRecords(dc.Name)
|
||||
@@ -146,6 +145,12 @@ func (api *digitaloceanProvider) GetDomainCorrections(dc *models.DomainConfig) (
|
||||
models.PostProcessRecords(existingRecords)
|
||||
txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
|
||||
return api.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (api *digitaloceanProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
ctx := context.Background()
|
||||
|
||||
var corrections []*models.Correction
|
||||
var differ diff.Differ
|
||||
if !diff2.EnableDiff2 {
|
||||
|
||||
@@ -141,19 +141,11 @@ func (c *dnsimpleProvider) GetZoneRecords(domain string) (models.Records, error)
|
||||
|
||||
// GetDomainCorrections returns corrections that update a domain.
|
||||
func (c *dnsimpleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||
var corrections []*models.Correction
|
||||
|
||||
err := dc.Punycode()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
dnssecFixes, err := c.getDNSSECCorrections(dc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
corrections = append(corrections, dnssecFixes...)
|
||||
|
||||
records, err := c.GetZoneRecords(dc.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -164,6 +156,17 @@ func (c *dnsimpleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mod
|
||||
|
||||
// Normalize
|
||||
models.PostProcessRecords(actual)
|
||||
return c.GetZoneRecordsCorrections(dc, actual)
|
||||
}
|
||||
|
||||
func (c *dnsimpleProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, actual models.Records) ([]*models.Correction, error) {
|
||||
var corrections []*models.Correction
|
||||
|
||||
dnssecFixes, err := c.getDNSSECCorrections(dc)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
corrections = append(corrections, dnssecFixes...)
|
||||
|
||||
var create, del, modify diff.Changeset
|
||||
if !diff2.EnableDiff2 {
|
||||
|
||||
@@ -86,11 +86,6 @@ func (api *dnsMadeEasyProvider) GetDomainCorrections(dc *models.DomainConfig) ([
|
||||
|
||||
domainName := dc.Name
|
||||
|
||||
domain, err := api.findDomain(domainName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Get existing records
|
||||
existingRecords, err := api.GetZoneRecords(domainName)
|
||||
if err != nil {
|
||||
@@ -101,6 +96,17 @@ func (api *dnsMadeEasyProvider) GetDomainCorrections(dc *models.DomainConfig) ([
|
||||
models.PostProcessRecords(existingRecords)
|
||||
txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
|
||||
return api.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (api *dnsMadeEasyProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
domainName := dc.Name
|
||||
domain, err := api.findDomain(domainName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var corrections []*models.Correction
|
||||
var create, del, modify diff.Changeset
|
||||
if !diff2.EnableDiff2 {
|
||||
|
||||
@@ -47,8 +47,14 @@ func (api *domainNameShopProvider) GetDomainCorrections(dc *models.DomainConfig)
|
||||
record.TTL = fixTTL(record.TTL)
|
||||
}
|
||||
|
||||
return api.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (api *domainNameShopProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
var corrections []*models.Correction
|
||||
var create, delete, modify diff.Changeset
|
||||
var err error
|
||||
if !diff2.EnableDiff2 {
|
||||
differ := diff.New(dc)
|
||||
_, create, delete, modify, err = differ.IncrementalDiff(existingRecords)
|
||||
|
||||
@@ -87,22 +87,13 @@ func (c *exoscaleProvider) GetNameservers(domain string) ([]*models.Nameserver,
|
||||
}
|
||||
|
||||
// GetZoneRecords gets the records of a zone and returns them in RecordConfig format.
|
||||
func (c *exoscaleProvider) GetZoneRecords(domain string) (models.Records, error) {
|
||||
return nil, fmt.Errorf("not implemented")
|
||||
// This enables the get-zones subcommand.
|
||||
// Implement this by extracting the code from GetDomainCorrections into
|
||||
// a single function. For most providers this should be relatively easy.
|
||||
}
|
||||
func (c *exoscaleProvider) GetZoneRecords(domainName string) (models.Records, error) {
|
||||
//dc.Punycode()
|
||||
|
||||
// GetDomainCorrections returns a list of corretions for the domain.
|
||||
func (c *exoscaleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||
dc.Punycode()
|
||||
|
||||
domain, err := c.findDomainByName(dc.Name)
|
||||
domain, err := c.findDomainByName(domainName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
domainID := *domain.ID
|
||||
|
||||
ctx := context.Background()
|
||||
@@ -164,7 +155,7 @@ func (c *exoscaleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mod
|
||||
if record.TTL != nil {
|
||||
rc.TTL = uint32(*record.TTL)
|
||||
}
|
||||
rc.SetLabel(rname, dc.Name)
|
||||
rc.SetLabel(rname, domainName)
|
||||
|
||||
switch rtype {
|
||||
case "ALIAS", "URL":
|
||||
@@ -177,7 +168,7 @@ func (c *exoscaleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mod
|
||||
}
|
||||
err = rc.SetTargetMX(prio, rcontent)
|
||||
default:
|
||||
err = rc.PopulateFromString(rtype, rcontent, dc.Name)
|
||||
err = rc.PopulateFromString(rtype, rcontent, domainName)
|
||||
}
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("unparsable record received from exoscale: %w", err)
|
||||
@@ -185,11 +176,32 @@ func (c *exoscaleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mod
|
||||
|
||||
existingRecords = append(existingRecords, rc)
|
||||
}
|
||||
removeOtherNS(dc)
|
||||
|
||||
// Normalize
|
||||
models.PostProcessRecords(existingRecords)
|
||||
|
||||
return existingRecords, nil
|
||||
}
|
||||
|
||||
// GetDomainCorrections returns a list of corretions for the domain.
|
||||
func (c *exoscaleProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Correction, error) {
|
||||
existingRecords, err := c.GetZoneRecords(dc.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
removeOtherNS(dc)
|
||||
return c.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (c *exoscaleProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
domain, err := c.findDomainByName(dc.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
domainID := *domain.ID
|
||||
|
||||
var corrections []*models.Correction
|
||||
var create, delete, modify diff.Changeset
|
||||
if !diff2.EnableDiff2 {
|
||||
|
||||
@@ -146,7 +146,7 @@ func (client *gandiv5Provider) GetDomainCorrections(dc *models.DomainConfig) ([]
|
||||
models.PostProcessRecords(existing)
|
||||
clean := PrepFoundRecords(existing)
|
||||
PrepDesiredRecords(dc)
|
||||
return client.GenerateDomainCorrections(dc, clean)
|
||||
return client.GetZoneRecordsCorrections(dc, clean)
|
||||
}
|
||||
|
||||
// GetZoneRecords gathers the DNS records and converts them to
|
||||
@@ -228,7 +228,7 @@ func PrepDesiredRecords(dc *models.DomainConfig) {
|
||||
// a list of functions to call to actually make the desired
|
||||
// correction, and a message to output to the user when the change is
|
||||
// made.
|
||||
func (client *gandiv5Provider) GenerateDomainCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
func (client *gandiv5Provider) GetZoneRecordsCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
if client.debug {
|
||||
debugRecords("GenDC input", existing)
|
||||
}
|
||||
|
||||
@@ -51,6 +51,9 @@ type gcloudProvider struct {
|
||||
project string
|
||||
nameServerSet *string
|
||||
zones map[string]*gdns.ManagedZone
|
||||
// diff1
|
||||
oldRRsMap map[string]map[key]*gdns.ResourceRecordSet
|
||||
zoneNameMap map[string]string
|
||||
}
|
||||
|
||||
type errNoExist struct {
|
||||
@@ -200,18 +203,26 @@ func (g *gcloudProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*model
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("getzonesets error: %w", err)
|
||||
}
|
||||
g.oldRRsMap[dc.Name] = oldRRs
|
||||
g.zoneNameMap[dc.Name] = zoneName
|
||||
|
||||
// Normalize
|
||||
models.PostProcessRecords(existingRecords)
|
||||
txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
|
||||
return GetZoneRecordsCorrections(dc, existingRecords)
|
||||
return g.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (g *gcloudProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
|
||||
// oldRRs :=
|
||||
// zoneName :=
|
||||
oldRRs, ok := g.oldRRsMap[dc.Name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("oldRRsMap: no zone named %q", dc.Name)
|
||||
}
|
||||
zoneName, ok := g.zoneNameMap[dc.Name]
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("zoneNameMap: no zone named %q", dc.Name)
|
||||
}
|
||||
|
||||
// first collect keys that have changed
|
||||
var differ diff.Differ
|
||||
|
||||
@@ -83,7 +83,7 @@ func (c *gcoreProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models
|
||||
models.PostProcessRecords(existing)
|
||||
clean := PrepFoundRecords(existing)
|
||||
PrepDesiredRecords(dc)
|
||||
return c.GenerateDomainCorrections(dc, clean)
|
||||
return c.GetZoneRecordsCorrections(dc, clean)
|
||||
}
|
||||
|
||||
// GetZoneRecords gets the records of a zone and returns them in RecordConfig format.
|
||||
@@ -153,7 +153,7 @@ func generateChangeMsg(updates []string) string {
|
||||
// a list of functions to call to actually make the desired
|
||||
// correction, and a message to output to the user when the change is
|
||||
// made.
|
||||
func (c *gcoreProvider) GenerateDomainCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
func (c *gcoreProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existing models.Records) ([]*models.Correction, error) {
|
||||
|
||||
// Make delete happen earlier than creates & updates.
|
||||
var corrections []*models.Correction
|
||||
|
||||
@@ -190,6 +190,11 @@ func (c *hednsProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*models
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c.GetZoneRecordsCorrections(dc, records)
|
||||
}
|
||||
|
||||
func (c *hednsProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, records models.Records) ([]*models.Correction, error) {
|
||||
|
||||
// Get the SOA record to get the ZoneID, then remove it from the list.
|
||||
zoneID := uint64(0)
|
||||
var prunedRecords models.Records
|
||||
|
||||
@@ -102,8 +102,15 @@ func (api *hetznerProvider) GetDomainCorrections(dc *models.DomainConfig) ([]*mo
|
||||
models.PostProcessRecords(existingRecords)
|
||||
txtutil.SplitSingleLongTxt(dc.Records) // Autosplit long TXT records
|
||||
|
||||
return api.GetZoneRecordsCorrections(dc, existingRecords)
|
||||
}
|
||||
|
||||
func (api *hetznerProvider) GetZoneRecordsCorrections(dc *models.DomainConfig, existingRecords models.Records) ([]*models.Correction, error) {
|
||||
domain := dc.Name
|
||||
|
||||
var corrections []*models.Correction
|
||||
var create, del, modify diff.Changeset
|
||||
var err error
|
||||
if !diff2.EnableDiff2 {
|
||||
differ := diff.New(dc)
|
||||
_, create, del, modify, err = differ.IncrementalDiff(existingRecords)
|
||||
|
||||
@@ -74,8 +74,14 @@ func (n *HXClient) GetDomainCorrections(dc *models.DomainConfig) ([]*models.Corr
|
||||
models.PostProcessRecords(actual)
|
||||
txtutil.SplitSingleLongTxt(dc.Records)
|
||||
|
||||
return n.GetZoneRecordsCorrections(dc, actual)
|
||||
}
|
||||
|
||||
func (n *HXClient) GetZoneRecordsCorrections(dc *models.DomainConfig, actual models.Records) ([]*models.Correction, error) {
|
||||
|
||||
var corrections []*models.Correction
|
||||
var create, del, mod diff.Changeset
|
||||
var err error
|
||||
if !diff2.EnableDiff2 {
|
||||
differ := diff.New(dc)
|
||||
_, create, del, mod, err = differ.IncrementalDiff(actual)
|
||||
|
||||
Reference in New Issue
Block a user