Skip to content

Commit 712780b

Browse files
committed
Simplify dependency ready filters to use IsAvailable directly
Since IsAvailable implies Status.ID is set, the redundant check for Status.ID != nil can be removed. Made IsAvailable generic to allow passing it directly as a filter function, eliminating boilerplate lambdas across all controllers. This makes the code more concise and ensures consistent availability checking for all dependencies.
1 parent 7ce708f commit 712780b

13 files changed

Lines changed: 73 additions & 159 deletions

File tree

api/v1alpha1/conditions.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ func GetTerminalError(obj ObjectWithConditions) error {
113113
return nil
114114
}
115115

116-
func IsAvailable(obj ObjectWithConditions) bool {
116+
func IsAvailable[T ObjectWithConditions](obj T) bool {
117117
conditions := obj.GetConditions()
118118
available := meta.FindStatusCondition(conditions, ConditionAvailable)
119119

cmd/scaffold-controller/data/controller/actuator.go.template

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,10 @@ func (actuator {{ .PackageName }}Actuator) ListOSResourcesForImport(ctx context.
106106
var reconcileStatus progress.ReconcileStatus
107107
{{- range .ImportDependencies }}
108108
{{ $depNameCamelCase := . | camelCase }}
109-
{{ $depNameCamelCase }}, rs := dependency.FetchDependency(
109+
{{ $depNameCamelCase }}, rs := dependency.FetchDependency[*orcv1alpha1.{{ . }}](
110110
ctx, actuator.k8sClient, obj.Namespace,
111111
filter.{{ . }}Ref, "{{ . }}",
112-
func(dep *orcv1alpha1.{{ . }}) bool { return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil },
112+
orcv1alpha1.IsAvailable,
113113
)
114114
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
115115
{{- end }}
@@ -145,25 +145,21 @@ func (actuator {{ .PackageName }}Actuator) CreateResource(ctx context.Context, o
145145
{{- range .RequiredCreateDependencies }}
146146
{{ $depNameCamelCase := . | camelCase }}
147147
var {{ $depNameCamelCase }}ID string
148-
{{ $depNameCamelCase }}, {{ $depNameCamelCase }}DepRS := {{ $depNameCamelCase }}Dependency.GetDependency(
149-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.{{ . }}) bool {
150-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
151-
},
152-
)
153-
reconcileStatus = reconcileStatus.WithReconcileStatus({{ $depNameCamelCase }}DepRS)
154-
if {{ $depNameCamelCase }} != nil {
155-
{{ $depNameCamelCase }}ID = ptr.Deref({{ $depNameCamelCase }}.Status.ID, "")
156-
}
148+
{{ $depNameCamelCase }}, {{ $depNameCamelCase }}DepRS := {{ $depNameCamelCase }}Dependency.GetDependency(
149+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
150+
)
151+
reconcileStatus = reconcileStatus.WithReconcileStatus({{ $depNameCamelCase }}DepRS)
152+
if {{ $depNameCamelCase }} != nil {
153+
{{ $depNameCamelCase }}ID = ptr.Deref({{ $depNameCamelCase }}.Status.ID, "")
154+
}
157155

158156
{{- end }}
159157
{{- range .OptionalCreateDependencies }}
160158
{{ $depNameCamelCase := . | camelCase }}
161159
var {{ $depNameCamelCase }}ID string
162160
if resource.{{ . }}Ref != nil {
163161
{{ $depNameCamelCase }}, {{ $depNameCamelCase }}DepRS := {{ $depNameCamelCase }}Dependency.GetDependency(
164-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.{{ . }}) bool {
165-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
166-
},
162+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
167163
)
168164
reconcileStatus = reconcileStatus.WithReconcileStatus({{ $depNameCamelCase }}DepRS)
169165
if {{ $depNameCamelCase }} != nil {

internal/controllers/floatingip/actuator.go

Lines changed: 10 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -88,27 +88,21 @@ func (actuator floatingipActuator) ListOSResourcesForAdoption(ctx context.Contex
8888
func (actuator floatingipCreateActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
8989
var reconcileStatus progress.ReconcileStatus
9090

91-
network, rs := dependency.FetchDependency(
91+
network, rs := dependency.FetchDependency[*orcv1alpha1.Network](
9292
ctx, actuator.k8sClient, obj.Namespace, filter.FloatingNetworkRef, "Network",
93-
func(dep *orcv1alpha1.Network) bool {
94-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
95-
},
93+
orcv1alpha1.IsAvailable,
9694
)
9795
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9896

99-
port, rs := dependency.FetchDependency(
97+
port, rs := dependency.FetchDependency[*orcv1alpha1.Port](
10098
ctx, actuator.k8sClient, obj.Namespace, filter.PortRef, "Port",
101-
func(dep *orcv1alpha1.Port) bool {
102-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
103-
},
99+
orcv1alpha1.IsAvailable,
104100
)
105101
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
106102

107-
project, rs := dependency.FetchDependency(
103+
project, rs := dependency.FetchDependency[*orcv1alpha1.Project](
108104
ctx, actuator.k8sClient, obj.Namespace, filter.ProjectRef, "Project",
109-
func(dep *orcv1alpha1.Project) bool {
110-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
111-
},
105+
orcv1alpha1.IsAvailable,
112106
)
113107
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
114108

@@ -145,9 +139,7 @@ func (actuator floatingipCreateActuator) CreateResource(ctx context.Context, obj
145139
if resource.FloatingNetworkRef != nil {
146140
// Fetch dependencies and ensure they have our finalizer
147141
network, networkDepRS := networkDep.GetDependency(
148-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Network) bool {
149-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
150-
},
142+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
151143
)
152144
reconcileStatus = reconcileStatus.WithReconcileStatus(networkDepRS)
153145
if network != nil {
@@ -160,9 +152,7 @@ func (actuator floatingipCreateActuator) CreateResource(ctx context.Context, obj
160152
if resource.FloatingSubnetRef != nil {
161153
// Fetch dependencies and ensure they have our finalizer
162154
subnet, subnetDepRS := subnetDep.GetDependency(
163-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Subnet) bool {
164-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
165-
},
155+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
166156
)
167157
reconcileStatus = reconcileStatus.WithReconcileStatus(subnetDepRS)
168158
if subnet != nil {
@@ -175,9 +165,7 @@ func (actuator floatingipCreateActuator) CreateResource(ctx context.Context, obj
175165
if resource.PortRef != nil {
176166
// Fetch dependencies and ensure they have our finalizer
177167
port, portDepRS := portDep.GetDependency(
178-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Port) bool {
179-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
180-
},
168+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
181169
)
182170
reconcileStatus = reconcileStatus.WithReconcileStatus(portDepRS)
183171
if port != nil {
@@ -188,9 +176,7 @@ func (actuator floatingipCreateActuator) CreateResource(ctx context.Context, obj
188176
var projectID string
189177
if resource.ProjectRef != nil {
190178
project, projectDepRS := projectDependency.GetDependency(
191-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Project) bool {
192-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
193-
},
179+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
194180
)
195181
reconcileStatus = reconcileStatus.WithReconcileStatus(projectDepRS)
196182
if project != nil {

internal/controllers/group/actuator.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,9 @@ func (actuator groupActuator) ListOSResourcesForImport(ctx context.Context, obj
8282

8383
var reconcileStatus progress.ReconcileStatus
8484

85-
domain, rs := dependency.FetchDependency(
85+
domain, rs := dependency.FetchDependency[*orcv1alpha1.Domain](
8686
ctx, actuator.k8sClient, obj.Namespace, filter.DomainRef, "Domain",
87-
func(dep *orcv1alpha1.Domain) bool {
88-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
89-
},
87+
orcv1alpha1.IsAvailable,
9088
)
9189
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9290

@@ -115,9 +113,7 @@ func (actuator groupActuator) CreateResource(ctx context.Context, obj orcObjectP
115113
var domainID string
116114
if resource.DomainRef != nil {
117115
domain, domainDepRS := domainDependency.GetDependency(
118-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Domain) bool {
119-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
120-
},
116+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
121117
)
122118
reconcileStatus = reconcileStatus.WithReconcileStatus(domainDepRS)
123119
if domain != nil {

internal/controllers/network/actuator.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,9 @@ func (actuator networkActuator) ListOSResourcesForAdoption(ctx context.Context,
8383
func (actuator networkActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
8484
var reconcileStatus progress.ReconcileStatus
8585

86-
project, rs := dependency.FetchDependency(
86+
project, rs := dependency.FetchDependency[*orcv1alpha1.Project](
8787
ctx, actuator.k8sClient, obj.Namespace, filter.ProjectRef, "Project",
88-
func(dep *orcv1alpha1.Project) bool {
89-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
90-
},
88+
orcv1alpha1.IsAvailable,
9189
)
9290
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9391

@@ -118,9 +116,7 @@ func (actuator networkActuator) CreateResource(ctx context.Context, obj orcObjec
118116
var projectID string
119117
if resource.ProjectRef != nil {
120118
project, reconcileStatus := projectDependency.GetDependency(
121-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Project) bool {
122-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
123-
},
119+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
124120
)
125121
if needsReschedule, _ := reconcileStatus.NeedsReschedule(); needsReschedule {
126122
return nil, reconcileStatus

internal/controllers/port/actuator.go

Lines changed: 9 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -128,19 +128,15 @@ func (actuator portActuator) ListOSResourcesForAdoption(ctx context.Context, obj
128128
func (actuator portActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
129129
var reconcileStatus progress.ReconcileStatus
130130

131-
network, rs := dependency.FetchDependency(
131+
network, rs := dependency.FetchDependency[*orcv1alpha1.Network](
132132
ctx, actuator.k8sClient, obj.Namespace, &filter.NetworkRef, "Network",
133-
func(dep *orcv1alpha1.Network) bool {
134-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
135-
},
133+
orcv1alpha1.IsAvailable,
136134
)
137135
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
138136

139-
project, rs := dependency.FetchDependency(
137+
project, rs := dependency.FetchDependency[*orcv1alpha1.Project](
140138
ctx, actuator.k8sClient, obj.Namespace, filter.ProjectRef, "Project",
141-
func(dep *orcv1alpha1.Project) bool {
142-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
143-
},
139+
orcv1alpha1.IsAvailable,
144140
)
145141
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
146142

@@ -173,19 +169,13 @@ func (actuator portActuator) CreateResource(ctx context.Context, obj *orcv1alpha
173169

174170
// Fetch all dependencies and ensure they have our finalizer
175171
network, networkDepRS := networkDependency.GetDependency(
176-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Network) bool {
177-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
178-
},
172+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
179173
)
180174
subnetMap, subnetDepRS := subnetDependency.GetDependencies(
181-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Subnet) bool {
182-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
183-
},
175+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
184176
)
185177
secGroupMap, secGroupDepRS := securityGroupDependency.GetDependencies(
186-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.SecurityGroup) bool {
187-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
188-
},
178+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
189179
)
190180
reconcileStatus := progress.NewReconcileStatus().
191181
WithReconcileStatus(networkDepRS).
@@ -195,9 +185,7 @@ func (actuator portActuator) CreateResource(ctx context.Context, obj *orcv1alpha
195185
var projectID string
196186
if resource.ProjectRef != nil {
197187
project, projectDepRS := projectDependency.GetDependency(
198-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Project) bool {
199-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
200-
},
188+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
201189
)
202190
reconcileStatus = reconcileStatus.WithReconcileStatus(projectDepRS)
203191
if project != nil {
@@ -369,9 +357,7 @@ func (actuator portActuator) updateResource(ctx context.Context, obj orcObjectPT
369357
}
370358

371359
secGroupMap, secGroupDepRS := securityGroupDependency.GetDependencies(
372-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.SecurityGroup) bool {
373-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
374-
},
360+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
375361
)
376362

377363
reconcileStatus := progress.NewReconcileStatus().

internal/controllers/role/actuator.go

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,9 @@ func (actuator roleActuator) ListOSResourcesForAdoption(ctx context.Context, orc
8181
func (actuator roleActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
8282
var reconcileStatus progress.ReconcileStatus
8383

84-
domain, rs := dependency.FetchDependency(
84+
domain, rs := dependency.FetchDependency[*orcv1alpha1.Domain](
8585
ctx, actuator.k8sClient, obj.Namespace, filter.DomainRef, "Domain",
86-
func(dep *orcv1alpha1.Domain) bool {
87-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
88-
},
86+
orcv1alpha1.IsAvailable,
8987
)
9088
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9189

@@ -114,9 +112,7 @@ func (actuator roleActuator) CreateResource(ctx context.Context, obj orcObjectPT
114112
var domainID string
115113
if resource.DomainRef != nil {
116114
domain, domainDepRS := domainDependency.GetDependency(
117-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Domain) bool {
118-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
119-
},
115+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
120116
)
121117
reconcileStatus = reconcileStatus.WithReconcileStatus(domainDepRS)
122118
if domain != nil {

internal/controllers/router/actuator.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,9 @@ func (actuator routerActuator) ListOSResourcesForAdoption(ctx context.Context, o
8383
func (actuator routerCreateActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
8484
var reconcileStatus progress.ReconcileStatus
8585

86-
project, rs := dependency.FetchDependency(
86+
project, rs := dependency.FetchDependency[*orcv1alpha1.Project](
8787
ctx, actuator.k8sClient, obj.Namespace, filter.ProjectRef, "Project",
88-
func(dep *orcv1alpha1.Project) bool {
89-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
90-
},
88+
orcv1alpha1.IsAvailable,
9189
)
9290
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9391

@@ -123,9 +121,7 @@ func (actuator routerCreateActuator) CreateResource(ctx context.Context, obj *or
123121
var externalGW *orcv1alpha1.Network
124122
// Fetch dependencies and ensure they have our finalizer
125123
externalGW, reconcileStatus = externalGWDep.GetDependency(
126-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Network) bool {
127-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
128-
},
124+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
129125
)
130126
if externalGW != nil {
131127
gatewayInfo.NetworkID = ptr.Deref(externalGW.Status.ID, "")
@@ -135,9 +131,7 @@ func (actuator routerCreateActuator) CreateResource(ctx context.Context, obj *or
135131
var projectID string
136132
if resource.ProjectRef != nil {
137133
project, projectDepRS := projectDependency.GetDependency(
138-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Project) bool {
139-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
140-
},
134+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
141135
)
142136
reconcileStatus = reconcileStatus.WithReconcileStatus(projectDepRS)
143137
if project != nil {

internal/controllers/securitygroup/actuator.go

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,9 @@ func (actuator securityGroupActuator) ListOSResourcesForAdoption(ctx context.Con
8888
func (actuator securityGroupActuator) ListOSResourcesForImport(ctx context.Context, obj orcObjectPT, filter filterT) (iter.Seq2[*osResourceT, error], progress.ReconcileStatus) {
8989
var reconcileStatus progress.ReconcileStatus
9090

91-
project, rs := dependency.FetchDependency(
91+
project, rs := dependency.FetchDependency[*orcv1alpha1.Project](
9292
ctx, actuator.k8sClient, obj.Namespace, filter.ProjectRef, "Project",
93-
func(dep *orcv1alpha1.Project) bool {
94-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
95-
},
93+
orcv1alpha1.IsAvailable,
9694
)
9795
reconcileStatus = reconcileStatus.WithReconcileStatus(rs)
9896

@@ -123,9 +121,7 @@ func (actuator securityGroupActuator) CreateResource(ctx context.Context, obj *o
123121
var projectID string
124122
if resource.ProjectRef != nil {
125123
project, reconcileStatus := projectDependency.GetDependency(
126-
ctx, actuator.k8sClient, obj, func(dep *orcv1alpha1.Project) bool {
127-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
128-
},
124+
ctx, actuator.k8sClient, obj, orcv1alpha1.IsAvailable,
129125
)
130126
if needsReschedule, _ := reconcileStatus.NeedsReschedule(); needsReschedule {
131127
return nil, reconcileStatus
@@ -280,9 +276,7 @@ func (actuator securityGroupActuator) updateRules(ctx context.Context, orcObject
280276
var projectID string
281277
if resource.ProjectRef != nil {
282278
project, reconcileStatus := projectDependency.GetDependency(
283-
ctx, actuator.k8sClient, orcObject, func(dep *orcv1alpha1.Project) bool {
284-
return orcv1alpha1.IsAvailable(dep) && dep.Status.ID != nil
285-
},
279+
ctx, actuator.k8sClient, orcObject, orcv1alpha1.IsAvailable,
286280
)
287281
if needsReschedule, _ := reconcileStatus.NeedsReschedule(); needsReschedule {
288282
return reconcileStatus

0 commit comments

Comments
 (0)