@@ -48,15 +48,11 @@ type (
4848)
4949
5050type routerActuator struct {
51- osClient osclients.NetworkClient
52- }
53-
54- type routerCreateActuator struct {
55- routerActuator
51+ osClient osclients.NetworkClient
5652 k8sClient client.Client
5753}
5854
59- var _ createResourceActuator = routerCreateActuator {}
55+ var _ createResourceActuator = routerActuator {}
6056var _ deleteResourceActuator = routerActuator {}
6157
6258func (routerActuator ) GetResourceID (osResource * osResourceT ) string {
@@ -72,15 +68,37 @@ func (actuator routerActuator) GetOSResourceByID(ctx context.Context, id string)
7268}
7369
7470func (actuator routerActuator ) ListOSResourcesForAdoption (ctx context.Context , obj * orcv1alpha1.Router ) (routerIterator , bool ) {
75- if obj .Spec .Resource == nil {
71+ resource := obj .Spec .Resource
72+ if resource == nil {
7673 return nil , false
7774 }
7875
79- listOpts := routers.ListOpts {Name : getResourceName (obj )}
76+ // Resolve the project ID from ProjectRef if set. Without the project
77+ // ID, adoption with admin-scoped credentials could match a router
78+ // in the wrong project.
79+ var projectID string
80+ if resource .ProjectRef != nil {
81+ project , rs := dependency .FetchDependency (
82+ ctx , actuator .k8sClient , obj .Namespace , resource .ProjectRef , "Project" ,
83+ func (dep * orcv1alpha1.Project ) bool {
84+ return orcv1alpha1 .IsAvailable (dep ) && dep .Status .ID != nil
85+ },
86+ )
87+ if needsReschedule , _ := rs .NeedsReschedule (); needsReschedule {
88+ return nil , false
89+ }
90+ projectID = ptr .Deref (project .Status .ID , "" )
91+ }
92+
93+ listOpts := routers.ListOpts {
94+ Name : getResourceName (obj ),
95+ ProjectID : projectID ,
96+ Distributed : resource .Distributed ,
97+ }
8098 return actuator .osClient .ListRouter (ctx , listOpts ), true
8199}
82100
83- func (actuator routerCreateActuator ) ListOSResourcesForImport (ctx context.Context , obj orcObjectPT , filter filterT ) (iter.Seq2 [* osResourceT , error ], progress.ReconcileStatus ) {
101+ func (actuator routerActuator ) ListOSResourcesForImport (ctx context.Context , obj orcObjectPT , filter filterT ) (iter.Seq2 [* osResourceT , error ], progress.ReconcileStatus ) {
84102 var reconcileStatus progress.ReconcileStatus
85103
86104 project , rs := dependency .FetchDependency (
@@ -108,7 +126,7 @@ func (actuator routerCreateActuator) ListOSResourcesForImport(ctx context.Contex
108126 return actuator .osClient .ListRouter (ctx , listOpts ), nil
109127}
110128
111- func (actuator routerCreateActuator ) CreateResource (ctx context.Context , obj * orcv1alpha1.Router ) (* osResourceT , progress.ReconcileStatus ) {
129+ func (actuator routerActuator ) CreateResource (ctx context.Context , obj * orcv1alpha1.Router ) (* osResourceT , progress.ReconcileStatus ) {
112130 resource := obj .Spec .Resource
113131 if resource == nil {
114132 // Should have been caught by API validation
@@ -274,7 +292,7 @@ func (routerHelperFactory) NewAPIObjectAdapter(obj orcObjectPT) adapterI {
274292}
275293
276294func (routerHelperFactory ) NewCreateActuator (ctx context.Context , orcObject orcObjectPT , controller interfaces.ResourceController ) (createResourceActuator , progress.ReconcileStatus ) {
277- return newCreateActuator (ctx , orcObject , controller )
295+ return newActuator (ctx , orcObject , controller )
278296}
279297
280298func (routerHelperFactory ) NewDeleteActuator (ctx context.Context , orcObject orcObjectPT , controller interfaces.ResourceController ) (deleteResourceActuator , progress.ReconcileStatus ) {
@@ -300,18 +318,7 @@ func newActuator(ctx context.Context, orcObject *orcv1alpha1.Router, controller
300318 }
301319
302320 return routerActuator {
303- osClient : osClient ,
304- }, nil
305- }
306-
307- func newCreateActuator (ctx context.Context , orcObject * orcv1alpha1.Router , controller interfaces.ResourceController ) (routerCreateActuator , progress.ReconcileStatus ) {
308- routerActuator , reconcileStatus := newActuator (ctx , orcObject , controller )
309- if needsReschedule , _ := reconcileStatus .NeedsReschedule (); needsReschedule {
310- return routerCreateActuator {}, reconcileStatus
311- }
312-
313- return routerCreateActuator {
314- routerActuator : routerActuator ,
315- k8sClient : controller .GetK8sClient (),
321+ osClient : osClient ,
322+ k8sClient : controller .GetK8sClient (),
316323 }, nil
317324}
0 commit comments