Skip to content

Commit 2ea50c2

Browse files
author
Matthew Barnes
committed
frontend: Remove ClusterState check in CreateOrUpdateNodePool
This will be done by checking cluster's provisioning state instead of the ClusterState returned by Cluster Service. The check removal led to other simplifications in the logic, so there's some refactoring here too.
1 parent f126ad7 commit 2ea50c2

File tree

1 file changed

+26
-46
lines changed

1 file changed

+26
-46
lines changed

frontend/pkg/frontend/node_pool.go

Lines changed: 26 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
4242
return
4343
}
4444

45-
nodePoolResourceID, err := ResourceIDFromContext(ctx)
45+
resourceID, err := ResourceIDFromContext(ctx)
4646
if err != nil {
4747
f.logger.Error(err.Error())
4848
arm.WriteInternalServerError(writer)
@@ -58,41 +58,14 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
5858

5959
f.logger.Info(fmt.Sprintf("%s: CreateNodePool", versionedInterface))
6060

61-
clusterResourceID := nodePoolResourceID.GetParent()
62-
if clusterResourceID == nil {
63-
f.logger.Error(fmt.Sprintf("failed to obtain Azure parent resourceID for node pool %s", nodePoolResourceID))
64-
arm.WriteInternalServerError(writer)
65-
return
66-
}
67-
68-
clusterDoc, err := f.dbClient.GetResourceDoc(ctx, clusterResourceID)
69-
if err != nil {
70-
f.logger.Error(err.Error())
71-
arm.WriteInternalServerError(writer)
72-
return
73-
}
74-
75-
csCluster, err := f.clusterServiceClient.GetCSCluster(ctx, clusterDoc.InternalID)
76-
if err != nil {
77-
f.logger.Error(fmt.Sprintf("failed to fetch CS cluster for %s: %v", clusterResourceID, err))
78-
arm.WriteInternalServerError(writer)
79-
return
80-
}
81-
82-
if csCluster.State() == cmv1.ClusterStateUninstalling {
83-
f.logger.Error(fmt.Sprintf("failed to create node pool for cluster %s as it is in %v state", clusterResourceID, cmv1.ClusterStateUninstalling))
84-
arm.WriteInternalServerError(writer)
85-
return
86-
}
87-
88-
nodePoolDoc, err := f.dbClient.GetResourceDoc(ctx, nodePoolResourceID)
61+
doc, err := f.dbClient.GetResourceDoc(ctx, resourceID)
8962
if err != nil && !errors.Is(err, database.ErrNotFound) {
9063
f.logger.Error(err.Error())
9164
arm.WriteInternalServerError(writer)
9265
return
9366
}
9467

95-
var updating = (nodePoolDoc != nil)
68+
var updating = (doc != nil)
9669
var operationRequest database.OperationRequest
9770

9871
var versionedCurrentNodePool api.VersionedHCPOpenShiftClusterNodePool
@@ -106,14 +79,14 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
10679
// No special treatment here for "not found" errors. A "not found"
10780
// error indicates the database has gotten out of sync and so it's
10881
// appropriate to fail.
109-
csNodePool, err := f.clusterServiceClient.GetCSNodePool(ctx, nodePoolDoc.InternalID)
82+
csNodePool, err := f.clusterServiceClient.GetCSNodePool(ctx, doc.InternalID)
11083
if err != nil {
111-
f.logger.Error(fmt.Sprintf("failed to fetch CS node pool for %s: %v", nodePoolResourceID, err))
84+
f.logger.Error(fmt.Sprintf("failed to fetch CS node pool for %s: %v", resourceID, err))
11285
arm.WriteInternalServerError(writer)
11386
return
11487
}
11588

116-
hcpNodePool := ConvertCStoNodePool(nodePoolResourceID, csNodePool)
89+
hcpNodePool := ConvertCStoNodePool(resourceID, csNodePool)
11790

11891
// Do not set the TrackedResource.Tags field here. We need
11992
// the Tags map to remain nil so we can see if the request
@@ -143,11 +116,11 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
143116
case http.MethodPatch:
144117
// PATCH requests never create a new resource.
145118
f.logger.Error("Resource not found")
146-
arm.WriteResourceNotFoundError(writer, nodePoolResourceID)
119+
arm.WriteResourceNotFoundError(writer, resourceID)
147120
return
148121
}
149122

150-
nodePoolDoc = database.NewResourceDocument(nodePoolResourceID)
123+
doc = database.NewResourceDocument(resourceID)
151124
}
152125

153126
body, err := BodyFromContext(ctx)
@@ -181,31 +154,38 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
181154
}
182155

183156
if updating {
184-
f.logger.Info(fmt.Sprintf("updating resource %s", nodePoolResourceID))
185-
csNodePool, err = f.clusterServiceClient.UpdateCSNodePool(ctx, nodePoolDoc.InternalID, csNodePool)
157+
f.logger.Info(fmt.Sprintf("updating resource %s", resourceID))
158+
csNodePool, err = f.clusterServiceClient.UpdateCSNodePool(ctx, doc.InternalID, csNodePool)
186159
if err != nil {
187160
f.logger.Error(err.Error())
188161
arm.WriteInternalServerError(writer)
189162
return
190163
}
191164
} else {
192-
f.logger.Info(fmt.Sprintf("creating resource %s", nodePoolResourceID))
165+
f.logger.Info(fmt.Sprintf("creating resource %s", resourceID))
166+
clusterDoc, err := f.dbClient.GetResourceDoc(ctx, resourceID.GetParent())
167+
if err != nil {
168+
f.logger.Error(err.Error())
169+
arm.WriteInternalServerError(writer)
170+
return
171+
}
172+
193173
csNodePool, err = f.clusterServiceClient.PostCSNodePool(ctx, clusterDoc.InternalID, csNodePool)
194174
if err != nil {
195175
f.logger.Error(err.Error())
196176
arm.WriteInternalServerError(writer)
197177
return
198178
}
199179

200-
nodePoolDoc.InternalID, err = ocm.NewInternalID(csNodePool.HREF())
180+
doc.InternalID, err = ocm.NewInternalID(csNodePool.HREF())
201181
if err != nil {
202182
f.logger.Error(err.Error())
203183
arm.WriteInternalServerError(writer)
204184
return
205185
}
206186
}
207187

208-
operationDoc, err := f.StartOperation(writer, request, nodePoolDoc, operationRequest)
188+
operationDoc, err := f.StartOperation(writer, request, doc, operationRequest)
209189
if err != nil {
210190
f.logger.Error(fmt.Sprintf("failed to write operation document: %v", err))
211191
arm.WriteInternalServerError(writer)
@@ -236,27 +216,27 @@ func (f *Frontend) CreateOrUpdateNodePool(writer http.ResponseWriter, request *h
236216
}
237217

238218
if !updating {
239-
updateResourceMetadata(nodePoolDoc)
240-
err = f.dbClient.CreateResourceDoc(ctx, nodePoolDoc)
219+
updateResourceMetadata(doc)
220+
err = f.dbClient.CreateResourceDoc(ctx, doc)
241221
if err != nil {
242222
f.logger.Error(err.Error())
243223
arm.WriteInternalServerError(writer)
244224
return
245225
}
246-
f.logger.Info(fmt.Sprintf("document created for %s", nodePoolResourceID))
226+
f.logger.Info(fmt.Sprintf("document created for %s", resourceID))
247227
} else {
248-
updated, err := f.dbClient.UpdateResourceDoc(ctx, nodePoolResourceID, updateResourceMetadata)
228+
updated, err := f.dbClient.UpdateResourceDoc(ctx, resourceID, updateResourceMetadata)
249229
if err != nil {
250230
f.logger.Error(err.Error())
251231
arm.WriteInternalServerError(writer)
252232
return
253233
}
254234
if updated {
255-
f.logger.Info(fmt.Sprintf("document updated for %s", nodePoolResourceID))
235+
f.logger.Info(fmt.Sprintf("document updated for %s", resourceID))
256236
}
257237
}
258238

259-
responseBody, err := marshalCSNodePool(csNodePool, nodePoolDoc, versionedInterface)
239+
responseBody, err := marshalCSNodePool(csNodePool, doc, versionedInterface)
260240
if err != nil {
261241
f.logger.Error(err.Error())
262242
arm.WriteInternalServerError(writer)

0 commit comments

Comments
 (0)