Skip to content

Commit dc72b3c

Browse files
committed
refactor(scope): GetIdentityRefFromObjects
factorize identityRef lookup from multiple object to implement logic of identityRef's inheritage in one place (scope factory)
1 parent 4bdd8e8 commit dc72b3c

File tree

4 files changed

+23
-19
lines changed

4 files changed

+23
-19
lines changed

controllers/openstackmachine_controller.go

+5-10
Original file line numberDiff line numberDiff line change
@@ -391,9 +391,9 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
391391
Address: instanceStatus.Name(),
392392
})
393393
openStackMachine.Status.Addresses = addresses
394-
if openStackMachine.Spec.IdentityRef == nil {
395-
openStackMachine.Spec.IdentityRef = &openStackCluster.Spec.IdentityRef
396-
}
394+
395+
_, identityRef := r.ScopeFactory.GetIdentityRefFromObjects(openStackMachine, openStackCluster)
396+
openStackMachine.Spec.IdentityRef = identityRef
397397

398398
result := r.reconcileMachineState(scope, openStackMachine, machine, machineServer)
399399
if result != nil {
@@ -576,13 +576,8 @@ func (r *OpenStackMachineReconciler) getOrCreateMachineServer(ctx context.Contex
576576
}
577577
if apierrors.IsNotFound(err) {
578578
// Use credentials from the machine object by default, falling back to cluster credentials.
579-
identityRef := func() infrav1.OpenStackIdentityReference {
580-
if openStackMachine.Spec.IdentityRef != nil {
581-
return *openStackMachine.Spec.IdentityRef
582-
}
583-
return openStackCluster.Spec.IdentityRef
584-
}()
585-
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
579+
_, identityRef := r.ScopeFactory.GetIdentityRefFromObjects(openStackMachine, openStackCluster)
580+
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, *identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
586581
machineServer = &infrav1alpha1.OpenStackServer{
587582
ObjectMeta: metav1.ObjectMeta{
588583
Labels: map[string]string{

pkg/scope/mock.go

+1
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import (
3333
// MockScopeFactory implements both the ScopeFactory and ClientScope interfaces. It can be used in place of the default ProviderScopeFactory
3434
// when we want to use mocked service clients which do not attempt to connect to a running OpenStack cloud.
3535
type MockScopeFactory struct {
36+
*defaultScopeFactory
3637
ComputeClient *mock.MockComputeClient
3738
NetworkClient *mock.MockNetworkClient
3839
VolumeClient *mock.MockVolumeClient

pkg/scope/provider.go

+2-9
Original file line numberDiff line numberDiff line change
@@ -48,19 +48,12 @@ const (
4848
)
4949

5050
type providerScopeFactory struct {
51+
*defaultScopeFactory
5152
clientCache *cache.LRUExpireCache
5253
}
5354

5455
func (f *providerScopeFactory) NewClientScopeFromObject(ctx context.Context, ctrlClient client.Client, defaultCACert []byte, logger logr.Logger, objects ...infrav1.IdentityRefProvider) (Scope, error) {
55-
var namespace *string
56-
var identityRef *infrav1.OpenStackIdentityReference
57-
58-
for _, o := range objects {
59-
namespace, identityRef = o.GetIdentityRef()
60-
if namespace != nil || identityRef != nil {
61-
break
62-
}
63-
}
56+
namespace, identityRef := f.GetIdentityRefFromObjects(objects...)
6457

6558
if namespace == nil || identityRef == nil {
6659
return nil, fmt.Errorf("unable to get identityRef from provided objects")

pkg/scope/scope.go

+15
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,21 @@ func NewFactory(maxCacheSize int) Factory {
4343
type Factory interface {
4444
// NewClientScopeFromObject creates a new scope from the first object which returns an OpenStackIdentityRef
4545
NewClientScopeFromObject(ctx context.Context, ctrlClient client.Client, defaultCACert []byte, logger logr.Logger, objects ...infrav1.IdentityRefProvider) (Scope, error)
46+
GetIdentityRefFromObjects(objects ...infrav1.IdentityRefProvider) (*string, *infrav1.OpenStackIdentityReference)
47+
}
48+
49+
type defaultScopeFactory struct{}
50+
51+
func (f *defaultScopeFactory) GetIdentityRefFromObjects(objects ...infrav1.IdentityRefProvider) (*string, *infrav1.OpenStackIdentityReference) {
52+
var namespace *string
53+
var identityRef *infrav1.OpenStackIdentityReference
54+
for _, o := range objects {
55+
namespace, identityRef = o.GetIdentityRef()
56+
if identityRef != nil {
57+
break
58+
}
59+
}
60+
return namespace, identityRef
4661
}
4762

4863
// Scope contains arguments common to most operations.

0 commit comments

Comments
 (0)