Explorar o código

POR-1703: remove direct access to the powerdns client (#3554)

jose-fully-ported %!s(int64=2) %!d(string=hai) anos
pai
achega
589f46af5d

+ 1 - 1
api/server/handlers/porter_app/apply.go

@@ -133,7 +133,7 @@ func (c *ApplyPorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Request
 		subdomainCreateInput := porter_app.CreatePorterSubdomainInput{
 			AppName:             appProto.Name,
 			RootDomain:          c.Config().ServerConf.AppRootDomain,
-			PowerDNSClient:      c.Config().PowerDNSClient,
+			DNSClient:           c.Config().DNSClient,
 			DNSRecordRepository: c.Repo().DNSRecord(),
 			KubernetesAgent:     agent,
 		}

+ 5 - 5
api/server/handlers/porter_app/create.go

@@ -182,11 +182,11 @@ func (c *CreatePorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 			ExistingHelmValues:        releaseValues,
 			ExistingChartDependencies: releaseDependencies,
 			SubdomainCreateOpts: SubdomainCreateOpts{
-				k8sAgent:       k8sAgent,
-				dnsRepo:        c.Repo().DNSRecord(),
-				powerDnsClient: c.Config().PowerDNSClient,
-				appRootDomain:  c.Config().ServerConf.AppRootDomain,
-				stackName:      appName,
+				k8sAgent:      k8sAgent,
+				dnsRepo:       c.Repo().DNSRecord(),
+				dnsClient:     c.Config().DNSClient,
+				appRootDomain: c.Config().ServerConf.AppRootDomain,
+				stackName:     appName,
 			},
 			InjectLauncherToStartCommand: injectLauncher,
 			ShouldValidateHelmValues:     shouldCreate,

+ 3 - 3
api/server/handlers/porter_app/create_subdomain.go

@@ -132,13 +132,13 @@ func (c *CreateSubdomainHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 
 	_record := domain.DNSRecord(*record)
 
-	if c.Config().PowerDNSClient == nil {
-		err := telemetry.Error(ctx, span, nil, "powerdns client is nil")
+	if c.Config().DNSClient == nil {
+		err := telemetry.Error(ctx, span, nil, "dns client is nil")
 		c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))
 		return
 	}
 
-	err = _record.CreateDomain(c.Config().PowerDNSClient)
+	err = _record.CreateDomain(c.Config().DNSClient)
 	if err != nil {
 		err := telemetry.Error(ctx, span, nil, "error creating domain")
 		c.HandleAPIError(w, r, apierrors.NewErrPassThroughToClient(err, http.StatusInternalServerError))

+ 9 - 9
api/server/handlers/porter_app/parse.go

@@ -10,7 +10,7 @@ import (
 	"github.com/porter-dev/porter/api/types"
 	porterAppUtils "github.com/porter-dev/porter/api/utils/porter_app"
 	"github.com/porter-dev/porter/internal/helm/loader"
-	"github.com/porter-dev/porter/internal/integrations/powerdns"
+	"github.com/porter-dev/porter/internal/integrations/dns"
 	"github.com/porter-dev/porter/internal/kubernetes"
 	"github.com/porter-dev/porter/internal/kubernetes/domain"
 	"github.com/porter-dev/porter/internal/kubernetes/environment_groups"
@@ -70,11 +70,11 @@ type SyncedEnvSectionKey struct {
 }
 
 type SubdomainCreateOpts struct {
-	k8sAgent       *kubernetes.Agent
-	dnsRepo        repository.DNSRecordRepository
-	powerDnsClient *powerdns.Client
-	appRootDomain  string
-	stackName      string
+	k8sAgent      *kubernetes.Agent
+	dnsRepo       repository.DNSRecordRepository
+	dnsClient     *dns.Client
+	appRootDomain string
+	stackName     string
 }
 
 type ParseConf struct {
@@ -721,8 +721,8 @@ func createSubdomainIfRequired(
 }
 
 func createDNSRecord(opts SubdomainCreateOpts) (*types.DNSRecord, error) {
-	if opts.powerDnsClient == nil {
-		return nil, fmt.Errorf("cannot create subdomain because powerdns client is nil")
+	if opts.dnsClient == nil {
+		return nil, fmt.Errorf("cannot create subdomain because dns client is nil")
 	}
 
 	endpoint, found, err := domain.GetNGINXIngressServiceIP(opts.k8sAgent.Clientset)
@@ -749,7 +749,7 @@ func createDNSRecord(opts SubdomainCreateOpts) (*types.DNSRecord, error) {
 
 	_record := domain.DNSRecord(*record)
 
-	err = _record.CreateDomain(opts.powerDnsClient)
+	err = _record.CreateDomain(opts.dnsClient)
 
 	if err != nil {
 		return nil, err

+ 5 - 5
api/server/handlers/porter_app/rollback.go

@@ -121,11 +121,11 @@ func (c *RollbackPorterAppHandler) ServeHTTP(w http.ResponseWriter, r *http.Requ
 			ProjectID:     cluster.ProjectID,
 			Namespace:     namespace,
 			SubdomainCreateOpts: SubdomainCreateOpts{
-				k8sAgent:       k8sAgent,
-				dnsRepo:        c.Repo().DNSRecord(),
-				powerDnsClient: c.Config().PowerDNSClient,
-				appRootDomain:  c.Config().ServerConf.AppRootDomain,
-				stackName:      appName,
+				k8sAgent:      k8sAgent,
+				dnsRepo:       c.Repo().DNSRecord(),
+				dnsClient:     c.Config().DNSClient,
+				appRootDomain: c.Config().ServerConf.AppRootDomain,
+				stackName:     appName,
 			},
 			InjectLauncherToStartCommand: injectLauncher,
 			FullHelmValues:               string(valuesYaml),

+ 1 - 1
api/server/handlers/release/create_subdomain.go

@@ -66,7 +66,7 @@ func (c *CreateSubdomainHandler) ServeHTTP(w http.ResponseWriter, r *http.Reques
 
 	_record := domain.DNSRecord(*record)
 
-	err = _record.CreateDomain(c.Config().PowerDNSClient)
+	err = _record.CreateDomain(c.Config().DNSClient)
 
 	if err != nil {
 		c.HandleAPIError(w, r, apierrors.NewErrInternal(err))

+ 3 - 3
api/server/shared/config/config.go

@@ -11,7 +11,7 @@ import (
 	"github.com/porter-dev/porter/internal/billing"
 	"github.com/porter-dev/porter/internal/features"
 	"github.com/porter-dev/porter/internal/helm/urlcache"
-	"github.com/porter-dev/porter/internal/integrations/powerdns"
+	"github.com/porter-dev/porter/internal/integrations/dns"
 	"github.com/porter-dev/porter/internal/nats"
 	"github.com/porter-dev/porter/internal/notifier"
 	"github.com/porter-dev/porter/internal/oauth"
@@ -97,8 +97,8 @@ type Config struct {
 	// WhitelistedUsers do not count toward usage limits
 	WhitelistedUsers map[uint]uint
 
-	// PowerDNSClient is a client for PowerDNS, if the Porter instance supports vanity URLs
-	PowerDNSClient *powerdns.Client
+	// DNSClient is a client for DNS, if the Porter instance supports vanity URLs
+	DNSClient *dns.Client
 
 	// ClusterControlPlaneClient is a client for ClusterControlPlane
 	ClusterControlPlaneClient porterv1connect.ClusterControlPlaneServiceClient

+ 2 - 1
api/server/shared/config/loader/loader.go

@@ -25,6 +25,7 @@ import (
 	"github.com/porter-dev/porter/internal/billing"
 	"github.com/porter-dev/porter/internal/features"
 	"github.com/porter-dev/porter/internal/helm/urlcache"
+	"github.com/porter-dev/porter/internal/integrations/dns"
 	"github.com/porter-dev/porter/internal/integrations/powerdns"
 	"github.com/porter-dev/porter/internal/notifier"
 	"github.com/porter-dev/porter/internal/notifier/sendgrid"
@@ -304,7 +305,7 @@ func (e *EnvConfigLoader) LoadConfig() (res *config.Config, err error) {
 	res.Logger.Info().Msg("Created analytics client")
 
 	if sc.PowerDNSAPIKey != "" && sc.PowerDNSAPIServerURL != "" {
-		res.PowerDNSClient = powerdns.NewClient(sc.PowerDNSAPIServerURL, sc.PowerDNSAPIKey, sc.AppRootDomain)
+		res.DNSClient = &dns.Client{Client: powerdns.NewClient(sc.PowerDNSAPIServerURL, sc.PowerDNSAPIKey, sc.AppRootDomain)}
 	}
 
 	res.EnableCAPIProvisioner = sc.EnableCAPIProvisioner

+ 19 - 0
internal/integrations/dns/dns.go

@@ -0,0 +1,19 @@
+package dns
+
+import "github.com/porter-dev/porter/internal/integrations/powerdns"
+
+// Client wraps the underlying powerdns client
+// providing a stable api around interacting with DNS
+type Client struct {
+	Client *powerdns.Client
+}
+
+// CreateARecord creates a new A record
+func (c Client) CreateARecord(value, hostname string) error {
+	return c.Client.CreateARecord(value, hostname)
+}
+
+// CreateCNAMERecord creates a new CNAME record
+func (c Client) CreateCNAMERecord(value, hostname string) error {
+	return c.Client.CreateCNAMERecord(value, hostname)
+}

+ 4 - 4
internal/kubernetes/domain/domain.go

@@ -7,7 +7,7 @@ import (
 	"strings"
 
 	"github.com/porter-dev/porter/internal/encryption"
-	"github.com/porter-dev/porter/internal/integrations/powerdns"
+	"github.com/porter-dev/porter/internal/integrations/dns"
 	"github.com/porter-dev/porter/internal/models"
 	v1 "k8s.io/api/core/v1"
 	"k8s.io/client-go/kubernetes"
@@ -99,13 +99,13 @@ func (c *CreateDNSRecordConfig) NewDNSRecordForEndpoint() *models.DNSRecord {
 }
 
 // CreateDomain creates a new record for the vanity domain
-func (e *DNSRecord) CreateDomain(powerDNSClient *powerdns.Client) error {
+func (e *DNSRecord) CreateDomain(dnsClient *dns.Client) error {
 	isIPv4 := net.ParseIP(e.Endpoint) != nil
 	domain := fmt.Sprintf("%s.%s", e.SubdomainPrefix, e.RootDomain)
 
 	if isIPv4 {
-		return powerDNSClient.CreateARecord(e.Endpoint, domain)
+		return dnsClient.CreateARecord(e.Endpoint, domain)
 	}
 
-	return powerDNSClient.CreateCNAMERecord(e.Endpoint, domain)
+	return dnsClient.CreateCNAMERecord(e.Endpoint, domain)
 }

+ 4 - 4
internal/porter_app/create_subdomain.go

@@ -3,7 +3,7 @@ package porter_app
 import (
 	"context"
 
-	"github.com/porter-dev/porter/internal/integrations/powerdns"
+	"github.com/porter-dev/porter/internal/integrations/dns"
 	"github.com/porter-dev/porter/internal/kubernetes"
 	"github.com/porter-dev/porter/internal/kubernetes/domain"
 	"github.com/porter-dev/porter/internal/repository"
@@ -15,7 +15,7 @@ type CreatePorterSubdomainInput struct {
 	AppName             string
 	RootDomain          string
 	KubernetesAgent     *kubernetes.Agent
-	PowerDNSClient      *powerdns.Client
+	DNSClient           *dns.Client
 	DNSRecordRepository repository.DNSRecordRepository
 }
 
@@ -29,7 +29,7 @@ func CreatePorterSubdomain(ctx context.Context, input CreatePorterSubdomainInput
 	if input.KubernetesAgent == nil {
 		return "", telemetry.Error(ctx, span, nil, "k8s agent is nil")
 	}
-	if input.PowerDNSClient == nil {
+	if input.DNSClient == nil {
 		return "", telemetry.Error(ctx, span, nil, "powerdns client is nil")
 	}
 	if input.AppName == "" {
@@ -66,7 +66,7 @@ func CreatePorterSubdomain(ctx context.Context, input CreatePorterSubdomainInput
 
 	_record := domain.DNSRecord(*record)
 
-	err = _record.CreateDomain(input.PowerDNSClient)
+	err = _record.CreateDomain(input.DNSClient)
 	if err != nil {
 		return createdDomain, telemetry.Error(ctx, span, err, "error creating domain")
 	}