Skip to content

Commit 94b3d74

Browse files
authored
Merge pull request #2710 from jackfrancis/async-createorupdate
refactor: rename CreateResource to CreateOrUpdateResource
2 parents 1d69efc + 84e9643 commit 94b3d74

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+203
-196
lines changed

.codespellignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,4 @@ witht
33
geting
44
ot
55
intepreted
6+
updat

azure/services/agentpools/agentpools.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ func (s *Service) Reconcile(ctx context.Context) error {
7474

7575
var resultingErr error
7676
if agentPoolSpec := s.scope.AgentPoolSpec(); agentPoolSpec != nil {
77-
result, err := s.CreateResource(ctx, agentPoolSpec, serviceName)
77+
result, err := s.CreateOrUpdateResource(ctx, agentPoolSpec, serviceName)
7878
if err != nil {
7979
resultingErr = err
8080
} else {

azure/services/agentpools/agentpools_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestReconcileAgentPools(t *testing.T) {
7070
expectedError: "",
7171
expect: func(s *mock_agentpools.MockAgentPoolScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
7272
s.AgentPoolSpec().Return(&fakeAgentPoolSpec)
73-
r.CreateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(fakeAgentPoolWithAutoscalingAndCount(true, 1), nil)
73+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(fakeAgentPoolWithAutoscalingAndCount(true, 1), nil)
7474
s.SetCAPIMachinePoolAnnotation(azure.ReplicasManagedByAutoscalerAnnotation, "true")
7575
s.SetCAPIMachinePoolReplicas(fakeAgentPoolWithAutoscalingAndCount(true, 1).Count)
7676
s.UpdatePutStatus(infrav1.AgentPoolsReadyCondition, serviceName, nil)
@@ -81,7 +81,7 @@ func TestReconcileAgentPools(t *testing.T) {
8181
expectedError: "",
8282
expect: func(s *mock_agentpools.MockAgentPoolScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
8383
s.AgentPoolSpec().Return(&fakeAgentPoolSpec)
84-
r.CreateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(fakeAgentPoolWithAutoscalingAndCount(false, 1), nil)
84+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(fakeAgentPoolWithAutoscalingAndCount(false, 1), nil)
8585
s.RemoveCAPIMachinePoolAnnotation(azure.ReplicasManagedByAutoscalerAnnotation)
8686

8787
s.UpdatePutStatus(infrav1.AgentPoolsReadyCondition, serviceName, nil)
@@ -99,7 +99,7 @@ func TestReconcileAgentPools(t *testing.T) {
9999
expectedError: internalError.Error(),
100100
expect: func(s *mock_agentpools.MockAgentPoolScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
101101
s.AgentPoolSpec().Return(&fakeAgentPoolSpec)
102-
r.CreateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(nil, internalError)
102+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeAgentPoolSpec, serviceName).Return(nil, internalError)
103103
s.UpdatePutStatus(infrav1.AgentPoolsReadyCondition, serviceName, internalError)
104104
},
105105
},

azure/services/async/async.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package async
1818

1919
import (
2020
"context"
21+
"fmt"
2122
"net/http"
2223
"strconv"
2324
"time"
@@ -96,9 +97,9 @@ func processOngoingOperation(ctx context.Context, scope FutureScope, client Futu
9697
return client.Result(ctx, sdkFuture, future.Type)
9798
}
9899

99-
// CreateResource implements the logic for creating a resource Asynchronously.
100-
func (s *Service) CreateResource(ctx context.Context, spec azure.ResourceSpecGetter, serviceName string) (result interface{}, err error) {
101-
ctx, log, done := tele.StartSpanWithLogger(ctx, "async.Service.CreateResource")
100+
// CreateOrUpdateResource implements the logic for creating a new, or updating an existing, resource Asynchronously.
101+
func (s *Service) CreateOrUpdateResource(ctx context.Context, spec azure.ResourceSpecGetter, serviceName string) (result interface{}, err error) {
102+
ctx, log, done := tele.StartSpanWithLogger(ctx, "async.Service.CreateOrUpdateResource")
102103
defer done()
103104

104105
resourceName := spec.ResourceName()
@@ -132,20 +133,25 @@ func (s *Service) CreateResource(ctx context.Context, spec azure.ResourceSpecGet
132133
}
133134

134135
// Create or update the resource with the desired parameters.
135-
log.V(2).Info("creating resource", "service", serviceName, "resource", resourceName, "resourceGroup", rgName)
136+
logMessageVerbPrefix := "creat"
137+
if existingResource != nil {
138+
logMessageVerbPrefix = "updat"
139+
}
140+
log.V(2).Info(fmt.Sprintf("%sing resource", logMessageVerbPrefix), "service", serviceName, "resource", resourceName, "resourceGroup", rgName)
136141
result, sdkFuture, err := s.Creator.CreateOrUpdateAsync(ctx, spec, parameters)
142+
errWrapped := errors.Wrapf(err, fmt.Sprintf("failed to %se resource %s/%s (service: %s)", logMessageVerbPrefix, rgName, resourceName, serviceName))
137143
if sdkFuture != nil {
138144
future, err := converters.SDKToFuture(sdkFuture, infrav1.PutFuture, serviceName, resourceName, rgName)
139145
if err != nil {
140-
return nil, errors.Wrapf(err, "failed to create resource %s/%s (service: %s)", rgName, resourceName, serviceName)
146+
return nil, errWrapped
141147
}
142148
s.Scope.SetLongRunningOperationState(future)
143149
return nil, azure.WithTransientError(azure.NewOperationNotDoneError(future), getRequeueAfterFromFuture(sdkFuture))
144150
} else if err != nil {
145-
return nil, errors.Wrapf(err, "failed to create resource %s/%s (service: %s)", rgName, resourceName, serviceName)
151+
return nil, errWrapped
146152
}
147153

148-
log.V(2).Info("successfully created resource", "service", serviceName, "resource", resourceName, "resourceGroup", rgName)
154+
log.V(2).Info(fmt.Sprintf("successfully %sed resource", logMessageVerbPrefix), "service", serviceName, "resource", resourceName, "resourceGroup", rgName)
149155
return result, nil
150156
}
151157

azure/services/async/async_test.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -205,8 +205,8 @@ func TestProcessOngoingOperation(t *testing.T) {
205205
}
206206
}
207207

208-
// TestCreateResource tests the CreateResource function.
209-
func TestCreateResource(t *testing.T) {
208+
// TestCreateOrUpdateResource tests the CreateOrUpdateResource function.
209+
func TestCreateOrUpdateResource(t *testing.T) {
210210
testcases := []struct {
211211
name string
212212
serviceName string
@@ -291,7 +291,7 @@ func TestCreateResource(t *testing.T) {
291291
},
292292
{
293293
name: "error occurs while running async create",
294-
expectedError: "failed to create resource test-group/test-resource (service: test-service)",
294+
expectedError: "failed to update resource test-group/test-resource (service: test-service)",
295295
serviceName: "test-service",
296296
expect: func(s *mock_async.MockFutureScopeMockRecorder, c *mock_async.MockCreatorMockRecorder, r *mock_azure.MockResourceSpecGetterMockRecorder) {
297297
r.ResourceName().Return("test-resource")
@@ -333,7 +333,7 @@ func TestCreateResource(t *testing.T) {
333333
tc.expect(scopeMock.EXPECT(), creatorMock.EXPECT(), specMock.EXPECT())
334334

335335
s := New(scopeMock, creatorMock, nil)
336-
result, err := s.CreateResource(context.TODO(), specMock, tc.serviceName)
336+
result, err := s.CreateOrUpdateResource(context.TODO(), specMock, tc.serviceName)
337337
if tc.expectedError != "" {
338338
g.Expect(err).To(HaveOccurred())
339339
g.Expect(err.Error()).To(ContainSubstring(tc.expectedError))

azure/services/async/interfaces.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,6 @@ type Deleter interface {
5656

5757
// Reconciler is a generic interface used to perform asynchronous reconciliation of Azure resources.
5858
type Reconciler interface {
59-
CreateResource(ctx context.Context, spec azure.ResourceSpecGetter, serviceName string) (result interface{}, err error)
59+
CreateOrUpdateResource(ctx context.Context, spec azure.ResourceSpecGetter, serviceName string) (result interface{}, err error)
6060
DeleteResource(ctx context.Context, spec azure.ResourceSpecGetter, serviceName string) (err error)
6161
}

azure/services/async/mock_async/async_mock.go

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

azure/services/availabilitysets/availabilitysets.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ func (s *Service) Name() string {
6262
return serviceName
6363
}
6464

65-
// Reconcile creates or updates availability sets.
65+
// Reconcile idempotently creates or updates an availability set.
6666
func (s *Service) Reconcile(ctx context.Context) error {
6767
ctx, log, done := tele.StartSpanWithLogger(ctx, "availabilitysets.Service.Reconcile")
6868
defer done()
@@ -72,7 +72,7 @@ func (s *Service) Reconcile(ctx context.Context) error {
7272

7373
var err error
7474
if setSpec := s.Scope.AvailabilitySetSpec(); setSpec != nil {
75-
_, err = s.CreateResource(ctx, setSpec, serviceName)
75+
_, err = s.CreateOrUpdateResource(ctx, setSpec, serviceName)
7676
} else {
7777
log.V(2).Info("skip creation when no availability set spec is found")
7878
return nil

azure/services/availabilitysets/availabilitysets_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func TestReconcileAvailabilitySets(t *testing.T) {
8484
expectedError: "",
8585
expect: func(s *mock_availabilitysets.MockAvailabilitySetScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
8686
s.AvailabilitySetSpec().Return(&fakeSetSpec)
87-
r.CreateResource(gomockinternal.AContext(), &fakeSetSpec, serviceName).Return(nil, nil)
87+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeSetSpec, serviceName).Return(nil, nil)
8888
s.UpdatePutStatus(infrav1.AvailabilitySetReadyCondition, serviceName, nil)
8989
},
9090
},
@@ -100,7 +100,7 @@ func TestReconcileAvailabilitySets(t *testing.T) {
100100
expectedError: "some error with parameters",
101101
expect: func(s *mock_availabilitysets.MockAvailabilitySetScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
102102
s.AvailabilitySetSpec().Return(&fakeSetSpecMissing)
103-
r.CreateResource(gomockinternal.AContext(), &fakeSetSpecMissing, serviceName).Return(nil, parameterError)
103+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeSetSpecMissing, serviceName).Return(nil, parameterError)
104104
s.UpdatePutStatus(infrav1.AvailabilitySetReadyCondition, serviceName, parameterError)
105105
},
106106
},
@@ -109,7 +109,7 @@ func TestReconcileAvailabilitySets(t *testing.T) {
109109
expectedError: "#: Internal Server Error: StatusCode=500",
110110
expect: func(s *mock_availabilitysets.MockAvailabilitySetScopeMockRecorder, r *mock_async.MockReconcilerMockRecorder) {
111111
s.AvailabilitySetSpec().Return(&fakeSetSpec)
112-
r.CreateResource(gomockinternal.AContext(), &fakeSetSpec, serviceName).Return(nil, internalError)
112+
r.CreateOrUpdateResource(gomockinternal.AContext(), &fakeSetSpec, serviceName).Return(nil, internalError)
113113
s.UpdatePutStatus(infrav1.AvailabilitySetReadyCondition, serviceName, internalError)
114114
},
115115
},

azure/services/bastionhosts/bastionhosts.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ func (s *Service) Name() string {
5555
return serviceName
5656
}
5757

58-
// Reconcile gets/creates/updates a bastion host.
58+
// Reconcile idempotently creates or updates a bastion host.
5959
func (s *Service) Reconcile(ctx context.Context) error {
6060
ctx, _, done := tele.StartSpanWithLogger(ctx, "bastionhosts.Service.Reconcile")
6161
defer done()
@@ -65,7 +65,7 @@ func (s *Service) Reconcile(ctx context.Context) error {
6565

6666
var resultingErr error
6767
if bastionSpec := s.Scope.AzureBastionSpec(); bastionSpec != nil {
68-
_, resultingErr = s.CreateResource(ctx, bastionSpec, serviceName)
68+
_, resultingErr = s.CreateOrUpdateResource(ctx, bastionSpec, serviceName)
6969
} else {
7070
return nil
7171
}

0 commit comments

Comments
 (0)