33 * SPDX-License-Identifier: Apache-2.0
44 */
55
6- import { CloudControl } from 'aws-sdk'
76import * as CloudControlV3 from '@aws-sdk/client-cloudcontrol'
87import globals from '../extensionGlobals'
98import { localize } from '../utilities/vsCodeUtils'
@@ -22,36 +21,36 @@ export class CloudControlClient extends ClientWrapper<CloudControlV3.CloudContro
2221 request
2322 )
2423
25- await this . pollForCompletionV3 ( createResponse . ProgressEvent ! )
24+ await this . pollForCompletion ( createResponse . ProgressEvent ! )
2625 return createResponse
2726 }
2827
29- public async deleteResource ( request : CloudControl . DeleteResourceInput ) : Promise < void > {
30- const client = await this . createSdkClient ( )
31-
32- const deleteResponse = await client . deleteResource ( request ) . promise ( )
28+ public async deleteResource ( request : CloudControlV3 . DeleteResourceInput ) : Promise < void > {
29+ const deleteResponse : CloudControlV3 . DeleteResourceOutput = await this . makeRequest (
30+ CloudControlV3 . DeleteResourceCommand ,
31+ request
32+ )
3333
34- await this . pollForCompletion ( client , deleteResponse . ProgressEvent ! )
34+ await this . pollForCompletion ( deleteResponse . ProgressEvent ! )
3535 }
3636
37- public async listResources ( request : CloudControl . ListResourcesInput ) : Promise < CloudControl . ListResourcesOutput > {
38- const client = await this . createSdkClient ( )
39-
40- return await client . listResources ( request ) . promise ( )
37+ public async listResources (
38+ request : CloudControlV3 . ListResourcesInput
39+ ) : Promise < CloudControlV3 . ListResourcesOutput > {
40+ return await this . makeRequest ( CloudControlV3 . ListResourcesCommand , request )
4141 }
4242
43- public async getResource ( request : CloudControl . GetResourceInput ) : Promise < CloudControl . GetResourceOutput > {
44- const client = await this . createSdkClient ( )
45-
46- return await client . getResource ( request ) . promise ( )
43+ public async getResource ( request : CloudControlV3 . GetResourceInput ) : Promise < CloudControlV3 . GetResourceOutput > {
44+ return await this . makeRequest ( CloudControlV3 . GetResourceCommand , request )
4745 }
4846
49- public async updateResource ( request : CloudControl . UpdateResourceInput ) : Promise < void > {
50- const client = await this . createSdkClient ( )
51-
52- const updateResponse = await client . updateResource ( request ) . promise ( )
47+ public async updateResource ( request : CloudControlV3 . UpdateResourceInput ) : Promise < void > {
48+ const updateResponse : CloudControlV3 . UpdateResourceOutput = await this . makeRequest (
49+ CloudControlV3 . UpdateResourceCommand ,
50+ request
51+ )
5352
54- await this . pollForCompletion ( client , updateResponse . ProgressEvent ! )
53+ await this . pollForCompletion ( updateResponse . ProgressEvent ! )
5554 }
5655
5756 private async getResourceRequestStatus (
@@ -60,7 +59,7 @@ export class CloudControlClient extends ClientWrapper<CloudControlV3.CloudContro
6059 return await this . makeRequest ( CloudControlV3 . GetResourceRequestStatusCommand , request )
6160 }
6261
63- private async pollForCompletionV3 (
62+ private async pollForCompletion (
6463 progressEvent : CloudControlV3 . ProgressEvent ,
6564 baseDelay : number = 500 ,
6665 maxRetries : number = 10
@@ -118,70 +117,4 @@ export class CloudControlClient extends ClientWrapper<CloudControlV3.CloudContro
118117 )
119118 )
120119 }
121-
122- private async pollForCompletion (
123- client : CloudControl ,
124- progressEvent : CloudControl . ProgressEvent ,
125- baseDelay : number = 500 ,
126- maxRetries : number = 10
127- ) : Promise < void > {
128- for ( let i = 0 ; i < maxRetries ; i ++ ) {
129- const operationStatus = progressEvent . OperationStatus
130-
131- switch ( operationStatus ) {
132- case 'SUCCESS' :
133- return
134- case 'FAILED' :
135- throw new Error (
136- localize (
137- 'AWS.message.error.cloudControl.pollResourceStatus.failed' ,
138- 'Resource operation failed: {0} ({1})' ,
139- progressEvent . StatusMessage ,
140- progressEvent . ErrorCode
141- )
142- )
143- case 'CANCEL_COMPLETE' :
144- throw new Error (
145- localize (
146- 'AWS.message.error.cloudControl.pollResourceStatus.cancelled' ,
147- 'Resource operation cancelled: {0}' ,
148- progressEvent . StatusMessage
149- )
150- )
151- case 'IN_PROGRESS' :
152- case 'CANCEL_IN_PROGRESS' :
153- case 'PENDING' :
154- break
155- default :
156- throw new Error (
157- localize (
158- 'AWS.message.error.cloudControl.pollResourceStatus.invalidOperationStatus' ,
159- 'Invalid resource operation status: {0}' ,
160- operationStatus
161- )
162- )
163- }
164-
165- if ( i + 1 < maxRetries ) {
166- await new Promise < void > ( ( resolve ) => globals . clock . setTimeout ( resolve , baseDelay * 2 ** i ) )
167- const resourceRequestStatus = await client
168- . getResourceRequestStatus ( {
169- RequestToken : progressEvent . RequestToken ! ,
170- } )
171- . promise ( )
172- progressEvent = resourceRequestStatus . ProgressEvent !
173- }
174- }
175- throw new Error (
176- localize (
177- 'AWS.message.error.cloudControl.pollResourceStatus.timeout' ,
178- 'Failed to get terminal resource operation status for {0} before timeout. Please try again later' ,
179- progressEvent . Identifier
180- )
181- )
182- }
183-
184- private async createSdkClient ( ) : Promise < CloudControl > {
185- return await globals . sdkClientBuilder . createAwsService ( CloudControl , undefined , this . regionCode )
186- }
187120}
0 commit comments