Skip to content

Commit ec30272

Browse files
authored
external-dns reconciliation logic (#2377)
1 parent 66266c9 commit ec30272

3 files changed

Lines changed: 34 additions & 8 deletions

File tree

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package externaldns
2+
3+
import "github.com/stackrox/acs-fleet-manager/internal/central/pkg/api/private"
4+
5+
// IsEnabled checks if the external DNS feature is enabled for the given managed central.
6+
func IsEnabled(managedCentral private.ManagedCentral) bool {
7+
isEnabled, ok := managedCentral.Spec.TenantResourcesValues["externalDnsEnabled"].(bool)
8+
return ok && isEnabled
9+
}

internal/central/pkg/services/central.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import (
1515
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/api/dbapi"
1616
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/centrals/types"
1717
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/config"
18+
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/externaldns"
19+
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/presenters"
1820
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/rhsso"
1921
"github.com/stackrox/acs-fleet-manager/pkg/api"
2022
"github.com/stackrox/acs-fleet-manager/pkg/auth"
@@ -137,13 +139,14 @@ type centralService struct {
137139
iamConfig *iam.IAMConfig
138140
rhSSODynamicClientsAPI *dynamicClientAPI.AcsTenantsApiService
139141
telemetry *Telemetry
142+
managedCentralPresenter *presenters.ManagedCentralPresenter
140143
}
141144

142145
// NewCentralService ...
143146
func NewCentralService(connectionFactory *db.ConnectionFactory, clusterService ClusterService,
144147
iamConfig *iam.IAMConfig, centralConfig *config.CentralConfig, dataplaneClusterConfig *config.DataplaneClusterConfig, awsConfig *config.AWSConfig,
145148
quotaServiceFactory QuotaServiceFactory, awsClientFactory aws.ClientFactory,
146-
clusterPlacementStrategy ClusterPlacementStrategy, amsClient ocm.AMSClient, telemetry *Telemetry) CentralService {
149+
clusterPlacementStrategy ClusterPlacementStrategy, amsClient ocm.AMSClient, telemetry *Telemetry, managedCentralPresenter *presenters.ManagedCentralPresenter) CentralService {
147150
return &centralService{
148151
connectionFactory: connectionFactory,
149152
clusterService: clusterService,
@@ -157,6 +160,7 @@ func NewCentralService(connectionFactory *db.ConnectionFactory, clusterService C
157160
amsClient: amsClient,
158161
rhSSODynamicClientsAPI: dynamicclients.NewDynamicClientsAPI(iamConfig.RedhatSSORealm),
159162
telemetry: telemetry,
163+
managedCentralPresenter: managedCentralPresenter,
160164
}
161165
}
162166

@@ -597,8 +601,12 @@ func (k *centralService) Delete(centralRequest *dbapi.CentralRequest, force bool
597601
if err != nil {
598602
return errors.NewWithCause(errors.ErrorGeneral, err, "failed to get routes")
599603
}
604+
managedCentral, err := k.managedCentralPresenter.PresentManagedCentral(centralRequest)
605+
if err != nil {
606+
return errors.NewWithCause(errors.ErrorGeneral, err, "failed to present managed central")
607+
}
600608
// Only delete the routes when they are set
601-
if routes != nil && k.centralConfig.EnableCentralExternalDomain {
609+
if routes != nil && k.centralConfig.EnableCentralExternalDomain && !externaldns.IsEnabled(managedCentral) {
602610
_, err := k.ChangeCentralCNAMErecords(centralRequest, CentralRoutesActionDelete)
603611
if err != nil {
604612
if force {

internal/central/pkg/workers/centralmgrs/centrals_routes_cname_mgr.go

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ import (
55
"github.com/google/uuid"
66
"github.com/pkg/errors"
77
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/config"
8+
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/externaldns"
9+
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/presenters"
810
"github.com/stackrox/acs-fleet-manager/internal/central/pkg/services"
911
"github.com/stackrox/acs-fleet-manager/pkg/metrics"
1012
"github.com/stackrox/acs-fleet-manager/pkg/workers"
@@ -15,23 +17,25 @@ const centralDNSWorkerType = "central_dns"
1517
// CentralRoutesCNAMEManager ...
1618
type CentralRoutesCNAMEManager struct {
1719
workers.BaseWorker
18-
centralService services.CentralService
19-
centralConfig *config.CentralConfig
20+
centralService services.CentralService
21+
centralConfig *config.CentralConfig
22+
managedCentralPresenter *presenters.ManagedCentralPresenter
2023
}
2124

2225
var _ workers.Worker = &CentralRoutesCNAMEManager{}
2326

2427
// NewCentralCNAMEManager ...
25-
func NewCentralCNAMEManager(centralService services.CentralService, centralConfig *config.CentralConfig) *CentralRoutesCNAMEManager {
28+
func NewCentralCNAMEManager(centralService services.CentralService, centralConfig *config.CentralConfig, managedCentralPresenter *presenters.ManagedCentralPresenter) *CentralRoutesCNAMEManager {
2629
metrics.InitReconcilerMetricsForType(centralDNSWorkerType)
2730
return &CentralRoutesCNAMEManager{
2831
BaseWorker: workers.BaseWorker{
2932
ID: uuid.New().String(),
3033
WorkerType: centralDNSWorkerType,
3134
Reconciler: workers.Reconciler{},
3235
},
33-
centralService: centralService,
34-
centralConfig: centralConfig,
36+
centralService: centralService,
37+
centralConfig: centralConfig,
38+
managedCentralPresenter: managedCentralPresenter,
3539
}
3640
}
3741

@@ -58,7 +62,12 @@ func (k *CentralRoutesCNAMEManager) Reconcile() []error {
5862
}
5963

6064
for _, central := range centrals {
61-
if k.centralConfig.EnableCentralExternalDomain {
65+
managedCentral, err := k.managedCentralPresenter.PresentManagedCentral(central)
66+
if err != nil {
67+
errs = append(errs, errors.Wrapf(err, "failed to present managed central for central %s", central.ID))
68+
continue
69+
}
70+
if k.centralConfig.EnableCentralExternalDomain && !externaldns.IsEnabled(managedCentral) {
6271
if central.RoutesCreationID == "" {
6372
glog.Infof("creating CNAME records for central %s", central.ID)
6473

0 commit comments

Comments
 (0)