pr-deployer/pkgs/services/dns.go

67 lines
1.3 KiB
Go

package services
import (
"context"
"fmt"
"gitea.com/gitea/pr-deployer/pkgs/settings"
"github.com/cloudflare/cloudflare-go"
"github.com/google/go-github/v39/github"
)
func getSubDomainName(number int) string {
return fmt.Sprintf("try-pr-%d", number)
}
func getFullSubDomain(number int) string {
return getSubDomainName(number) + "." + settings.PRParentDomain
}
func checkAndUpdateSubDomain(number int) error {
api, err := cloudflare.NewWithAPIToken(settings.CloudflareToken)
if err != nil {
return err
}
zoneID, err := api.ZoneIDByName(settings.PRParentDomain)
if err != nil {
return fmt.Errorf("ZoneIDByName: %v", err)
}
var found bool
var name = getSubDomainName(number)
var filter = cloudflare.DNSRecord{
Type: "A",
Name: getFullSubDomain(number),
}
recs, err := api.DNSRecords(context.Background(), zoneID, filter)
if err != nil {
return fmt.Errorf("DNSRecords: %v", err)
}
for _, r := range recs {
if filter.Name == r.Name {
found = true
break
}
}
if found {
// TODO: check ip address
return nil
}
asciiInput := cloudflare.DNSRecord{
Type: "A",
Name: name,
Content: settings.DomainIP,
Proxiable: false,
Proxied: github.Bool(false),
}
_, err = api.CreateDNSRecord(context.Background(), zoneID, asciiInput)
if err != nil {
return fmt.Errorf("CreateDNSRecord: %v", err)
}
return nil
}