Skip to content

Commit aa9c179

Browse files
committed
refactor(scope): GetIdentityRefFromObjects
factorize identityRef lookup from multiple object to implement logic of identityRef's inheritage in one place (scope factory) Signed-off-by: MatthieuFin <[email protected]>
1 parent a466583 commit aa9c179

File tree

5 files changed

+30
-20
lines changed

5 files changed

+30
-20
lines changed

controllers/openstackmachine_controller.go

+11-10
Original file line numberDiff line numberDiff line change
@@ -392,9 +392,12 @@ func (r *OpenStackMachineReconciler) reconcileNormal(ctx context.Context, scope
392392
Address: instanceStatus.Name(),
393393
})
394394
openStackMachine.Status.Addresses = addresses
395-
if openStackMachine.Spec.IdentityRef == nil {
396-
openStackMachine.Spec.IdentityRef = &openStackCluster.Spec.IdentityRef
397-
}
395+
396+
_, identityRef := r.ScopeFactory.GetIdentityRefFromObjects(openStackMachine, openStackCluster)
397+
openStackMachine.Spec.IdentityRef = identityRef
398+
399+
_, identityRef := r.ScopeFactory.GetIdentityRefFromObjects(openStackMachine, openStackCluster)
400+
openStackMachine.Spec.IdentityRef = identityRef
398401

399402
result := r.reconcileMachineState(scope, openStackMachine, machine, machineServer)
400403
if result != nil {
@@ -580,13 +583,11 @@ func (r *OpenStackMachineReconciler) getOrCreateMachineServer(ctx context.Contex
580583
}
581584
if apierrors.IsNotFound(err) {
582585
// Use credentials from the machine object by default, falling back to cluster credentials.
583-
identityRef := func() infrav1.OpenStackIdentityReference {
584-
if openStackMachine.Spec.IdentityRef != nil {
585-
return *openStackMachine.Spec.IdentityRef
586-
}
587-
return openStackCluster.Spec.IdentityRef
588-
}()
589-
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
586+
_, identityRef := r.ScopeFactory.GetIdentityRefFromObjects(openStackMachine, openStackCluster)
587+
if identityRef == nil {
588+
return nil, fmt.Errorf("unable to get identityRef from provided objects")
589+
}
590+
machineServerSpec := openStackMachineSpecToOpenStackServerSpec(&openStackMachine.Spec, *identityRef, compute.InstanceTags(&openStackMachine.Spec, openStackCluster), failureDomain, userDataRef, getManagedSecurityGroup(openStackCluster, machine), openStackCluster.Status.Network.ID)
590591
machineServer = &infrav1alpha1.OpenStackServer{
591592
ObjectMeta: metav1.ObjectMeta{
592593
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.

test/e2e/shared/common.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -198,7 +198,7 @@ func (o OpenStackLogCollector) CollectMachineLog(ctx context.Context, management
198198
if m.Spec.ProviderID == nil {
199199
return fmt.Errorf("unable to get logs for machine since it has no provider ID")
200200
}
201-
providerID := getIDFromProviderID(*m.Spec.ProviderID)
201+
providerID := GetIDFromProviderID(*m.Spec.ProviderID)
202202

203203
consolLog, err := GetOpenStackServerConsoleLog(o.E2EContext, providerID)
204204
if err != nil {

0 commit comments

Comments
 (0)