Skip to content

Commit 3846d87

Browse files
authored
Merge pull request #876 from salasberryfin/support-alter-components-custom-func
✨ Support alter components custom func
2 parents 0d08400 + 5b3b26b commit 3846d87

File tree

2 files changed

+37
-20
lines changed

2 files changed

+37
-20
lines changed

controller/alias.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,3 +66,6 @@ type ProviderMapper = providercontroller.ProviderMapper
6666

6767
// WithProviderMapper is an alias for the internal WithProviderMapper function.
6868
var WithProviderMapper = providercontroller.WithProviderMapper
69+
70+
// WithCustomAlterComponentsFuncs is an alias for the internal WithCustomAlterComponentsFuncs function.
71+
var WithCustomAlterComponentsFuncs = providercontroller.WithCustomAlterComponentsFuncs

internal/controller/phases.go

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -79,50 +79,58 @@ type PhaseReconciler struct {
7979
providerLister ProviderLister
8080
providerConverter ProviderConverter
8181

82-
ctrlClient client.Client
83-
ctrlConfig *rest.Config
84-
repo repository.Repository
85-
contract string
86-
options repository.ComponentsOptions
87-
providerConfig configclient.Provider
88-
configClient configclient.Client
89-
overridesClient configclient.Client
90-
components repository.Components
91-
clusterctlProvider *clusterctlv1.Provider
92-
needsCompression bool
93-
}
94-
95-
// PhaseReconcielerOption is a function that configures the reconciler.
96-
type PhaseReconcielerOption func(*PhaseReconciler)
82+
ctrlClient client.Client
83+
ctrlConfig *rest.Config
84+
repo repository.Repository
85+
contract string
86+
options repository.ComponentsOptions
87+
providerConfig configclient.Provider
88+
configClient configclient.Client
89+
overridesClient configclient.Client
90+
components repository.Components
91+
clusterctlProvider *clusterctlv1.Provider
92+
needsCompression bool
93+
customAlterComponentsFuncs []repository.ComponentsAlterFn
94+
}
95+
96+
// PhaseReconcilerOption is a function that configures the reconciler.
97+
type PhaseReconcilerOption func(*PhaseReconciler)
9798

9899
// WithProviderTypeMapper configures the reconciler to use the given clustectlv1 provider type mapper.
99-
func WithProviderTypeMapper(providerTypeMapper ProviderTypeMapper) PhaseReconcielerOption {
100+
func WithProviderTypeMapper(providerTypeMapper ProviderTypeMapper) PhaseReconcilerOption {
100101
return func(r *PhaseReconciler) {
101102
r.providerTypeMapper = providerTypeMapper
102103
}
103104
}
104105

105106
// WithProviderLister configures the reconciler to use the given provider lister.
106-
func WithProviderLister(providerLister ProviderLister) PhaseReconcielerOption {
107+
func WithProviderLister(providerLister ProviderLister) PhaseReconcilerOption {
107108
return func(r *PhaseReconciler) {
108109
r.providerLister = providerLister
109110
}
110111
}
111112

112113
// WithProviderConverter configures the reconciler to use the given provider converter.
113-
func WithProviderConverter(providerConverter ProviderConverter) PhaseReconcielerOption {
114+
func WithProviderConverter(providerConverter ProviderConverter) PhaseReconcilerOption {
114115
return func(r *PhaseReconciler) {
115116
r.providerConverter = providerConverter
116117
}
117118
}
118119

119120
// WithProviderMapper configures the reconciler to use the given provider mapper.
120-
func WithProviderMapper(providerMapper ProviderMapper) PhaseReconcielerOption {
121+
func WithProviderMapper(providerMapper ProviderMapper) PhaseReconcilerOption {
121122
return func(r *PhaseReconciler) {
122123
r.providerMapper = providerMapper
123124
}
124125
}
125126

127+
// WithCustomAlterComponentsFuncs configures the reconciler to use the given custom alter components functions.
128+
func WithCustomAlterComponentsFuncs(fns []repository.ComponentsAlterFn) PhaseReconcilerOption {
129+
return func(r *PhaseReconciler) {
130+
r.customAlterComponentsFuncs = fns
131+
}
132+
}
133+
126134
// PhaseFn is a function that represent a phase of the reconciliation.
127135
type PhaseFn func(context.Context) (*Result, error)
128136

@@ -169,7 +177,7 @@ func wrapPhaseError(err error, reason string, condition clusterv1.ConditionType)
169177
}
170178

171179
// NewPhaseReconciler returns phase reconciler for the given provider.
172-
func NewPhaseReconciler(r GenericProviderReconciler, provider genericprovider.GenericProvider, providerList genericprovider.GenericProviderList, options ...PhaseReconcielerOption) *PhaseReconciler {
180+
func NewPhaseReconciler(r GenericProviderReconciler, provider genericprovider.GenericProvider, providerList genericprovider.GenericProviderList, options ...PhaseReconcilerOption) *PhaseReconciler {
173181
rec := &PhaseReconciler{
174182
ctrlClient: r.Client,
175183
ctrlConfig: r.Config,
@@ -616,6 +624,12 @@ func (p *PhaseReconciler) Fetch(ctx context.Context) (*Result, error) {
616624
return &Result{}, wrapPhaseError(err, operatorv1.ComponentsImageOverrideErrorReason, operatorv1.ProviderInstalledCondition)
617625
}
618626

627+
for _, fn := range p.customAlterComponentsFuncs {
628+
if err := repository.AlterComponents(p.components, fn); err != nil {
629+
return &Result{}, wrapPhaseError(err, operatorv1.ComponentsCustomizationErrorReason, operatorv1.ProviderInstalledCondition)
630+
}
631+
}
632+
619633
return &Result{}, nil
620634
}
621635

0 commit comments

Comments
 (0)