Skip to content

Commit e09be56

Browse files
authored
Add cross controller referenced resources to scheme (#302)
Description of changes: * Add cross controller referenced resources to scheme * Tested locally with successful reconciliation of referencing Subnet resource from ec2-controller inside VPCLink resource of apigatewayv2-controller By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.
1 parent 06d1e50 commit e09be56

File tree

2 files changed

+30
-1
lines changed

2 files changed

+30
-1
lines changed

pkg/generate/ack/controller.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,12 +241,22 @@ func Controller(
241241

242242
// Next add the template for the main.go file
243243
snakeCasedCRDNames := make([]string, 0)
244+
// using Map to implement the Set
245+
referencedServiceNamesMap := make(map[string]struct{})
244246
for _, crd := range crds {
245247
snakeCasedCRDNames = append(snakeCasedCRDNames, crd.Names.Snake)
248+
for _, serviceName := range crd.ReferencedServiceNames() {
249+
referencedServiceNamesMap[serviceName] = struct{}{}
250+
}
251+
}
252+
referencedServiceNames := make([]string, 0)
253+
for serviceName := range referencedServiceNamesMap {
254+
referencedServiceNames = append(referencedServiceNames, serviceName)
246255
}
247256
cmdVars := &templateCmdVars{
248257
metaVars,
249258
snakeCasedCRDNames,
259+
referencedServiceNames,
250260
}
251261
if err = ts.Add("cmd/controller/main.go", "cmd/controller/main.go.tpl", cmdVars); err != nil {
252262
return nil, err
@@ -267,6 +277,10 @@ func Controller(
267277
type templateCmdVars struct {
268278
templateset.MetaVars
269279
SnakeCasedCRDNames []string
280+
// ReferencedServiceNames contains the service name for ACK controllers whose
281+
// resources are referenced inside the CRDs.
282+
// Service name is go package name of AWS service in aws-sdk-go.
283+
ReferencedServiceNames []string
270284
}
271285

272286
// templateConfigVars contains template variables for the templates that require

templates/cmd/controller/main.go.tpl

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,18 @@ import (
1919
ackv1alpha1 "github.com/aws-controllers-k8s/runtime/apis/core/v1alpha1"
2020
svcresource "github.com/aws-controllers-k8s/{{ .ServicePackageName }}-controller/pkg/resource"
2121
svctypes "github.com/aws-controllers-k8s/{{ .ServicePackageName }}-controller/apis/{{ .APIVersion }}"
22+
{{- /* Import the go types from service controllers whose resources are referenced in this service controller.
23+
If these referenced types are not added to scheme, this service controller will not be able to read
24+
resources across service controller. */ -}}
25+
{{- $servicePackageName := .ServicePackageName }}
26+
{{- $apiVersion := .APIVersion }}
27+
{{- range $referencedServiceName := .ReferencedServiceNames }}
28+
{{- if not (eq $referencedServiceName $servicePackageName) }}
29+
{{ $referencedServiceName }}apitypes "github.com/aws-controllers-k8s/{{ $referencedServiceName }}-controller/apis/{{ $apiVersion }}"
30+
{{- end }}
31+
{{- end }}
2232
{{/* TODO(a-hilaly): import apis/* packages to register webhooks */}}
23-
{{ $serviceAlias := .ServicePackageName }} {{range $crdName := .SnakeCasedCRDNames }}_ "github.com/aws-controllers-k8s/{{ $serviceAlias }}-controller/pkg/resource/{{ $crdName }}"
33+
{{range $crdName := .SnakeCasedCRDNames }}_ "github.com/aws-controllers-k8s/{{ $servicePackageName }}-controller/pkg/resource/{{ $crdName }}"
2434
{{end}}
2535
)
2636

@@ -37,6 +47,11 @@ func init() {
3747
{{/* TODO(a-hilaly): register all the apis/* schemes */}}
3848
_ = svctypes.AddToScheme(scheme)
3949
_ = ackv1alpha1.AddToScheme(scheme)
50+
{{- range $referencedServiceName := .ReferencedServiceNames }}
51+
{{- if not (eq $referencedServiceName $servicePackageName) }}
52+
_ = {{ $referencedServiceName }}apitypes.AddToScheme(scheme)
53+
{{- end }}
54+
{{- end }}
4055
}
4156

4257
func main() {

0 commit comments

Comments
 (0)