pkg/controller/dns/util.go (70 lines of code) (raw):
package dns
import (
"context"
"strings"
"github.com/Azure/aks-app-routing-operator/api/v1alpha1"
"github.com/Azure/aks-app-routing-operator/pkg/config"
"github.com/Azure/aks-app-routing-operator/pkg/manifests"
"github.com/Azure/aks-app-routing-operator/pkg/util"
"github.com/hashicorp/go-multierror"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"sigs.k8s.io/controller-runtime/pkg/client"
)
type ExternalDNSCRDConfiguration interface {
GetTenantId() *string
GetInputServiceAccount() string
GetResourceNamespace() string
GetInputResourceName() string
GetResourceTypes() []string
GetDnsZoneresourceIDs() []string
GetFilters() *v1alpha1.ExternalDNSFilters
GetNamespaced() bool
}
func buildInputDNSConfig(e ExternalDNSCRDConfiguration, config *config.Config) manifests.InputExternalDNSConfig {
ret := manifests.InputExternalDNSConfig{
IdentityType: manifests.IdentityTypeWorkloadIdentity,
InputServiceAccount: e.GetInputServiceAccount(),
Namespace: e.GetResourceNamespace(),
InputResourceName: e.GetInputResourceName(),
ResourceTypes: extractResourceTypes(e.GetResourceTypes()),
DnsZoneresourceIDs: e.GetDnsZoneresourceIDs(),
Filters: e.GetFilters(),
IsNamespaced: e.GetNamespaced(),
}
switch e.GetTenantId() {
case nil:
ret.TenantId = config.TenantID
default:
ret.TenantId = *e.GetTenantId()
}
return ret
}
func extractResourceTypes(resourceTypes []string) map[manifests.ResourceType]struct{} {
ret := map[manifests.ResourceType]struct{}{}
for _, rt := range resourceTypes {
if strings.EqualFold(rt, manifests.ResourceTypeIngress.String()) {
ret[manifests.ResourceTypeIngress] = struct{}{}
}
if strings.EqualFold(rt, manifests.ResourceTypeGateway.String()) {
ret[manifests.ResourceTypeGateway] = struct{}{}
}
}
return ret
}
func generateManifestsConf(config *config.Config, obj ExternalDNSCRDConfiguration) (*manifests.ExternalDnsConfig, error) {
inputDNSConf := buildInputDNSConfig(obj, config)
manifestsConf, err := manifests.NewExternalDNSConfig(config, inputDNSConf)
if err != nil {
return nil, util.NewUserError(err, "failed to generate ExternalDNS resources: "+err.Error())
}
return manifestsConf, nil
}
func deployExternalDNSResources(ctx context.Context, client client.Client, manifestsConf *manifests.ExternalDnsConfig, owners []metav1.OwnerReference) error {
// create the ExternalDNS resources
multiError := &multierror.Error{}
for _, resource := range manifestsConf.Resources() {
resource.SetOwnerReferences(owners)
currentResourceErr := util.Upsert(ctx, client, resource)
multiError = multierror.Append(multiError, currentResourceErr)
}
return multiError.ErrorOrNil()
}