@@ -36,6 +36,8 @@ type Client interface {
3636
3737 CreateOrUpdateAsync (ctx context.Context , spec azure.ResourceSpecGetter , resumeToken string , parameters interface {}) (result interface {}, poller * runtime.Poller [armcompute.VirtualMachineScaleSetsClientCreateOrUpdateResponse ], err error )
3838 DeleteAsync (ctx context.Context , spec azure.ResourceSpecGetter , resumeToken string ) (poller * runtime.Poller [armcompute.VirtualMachineScaleSetsClientDeleteResponse ], err error )
39+
40+ BeginUpdateInstances (ctx context.Context , spec azure.ResourceSpecGetter , vmInstanceIDs armcompute.VirtualMachineScaleSetVMInstanceRequiredIDs , resumeToken string ) (* runtime.Poller [armcompute.VirtualMachineScaleSetsClientUpdateInstancesResponse ], error )
3941}
4042
4143// AzureClient contains the Azure go-sdk Client.
@@ -206,3 +208,34 @@ func (ac *AzureClient) DeleteAsync(ctx context.Context, spec azure.ResourceSpecG
206208 // if the operation completed, return a nil poller.
207209 return nil , err
208210}
211+
212+ // BeginUpdateInstances - Upgrades one or more virtual machines to the latest SKU set in the VM scale set model.
213+ // If the operation fails it returns an *azcore.ResponseError type.
214+ //
215+ // Parameters
216+ // - spec - The ResourceSpecGetter containing used for name and resource group of the virtual machine scale set.
217+ // - vmInstanceIDs - A list of virtual machine instance IDs from the VM scale set.
218+ func (ac * AzureClient ) BeginUpdateInstances (ctx context.Context , spec azure.ResourceSpecGetter , vmInstanceIDs armcompute.VirtualMachineScaleSetVMInstanceRequiredIDs , resumeToken string ) (poller * runtime.Poller [armcompute.VirtualMachineScaleSetsClientUpdateInstancesResponse ], err error ) {
219+ ctx , _ , done := tele .StartSpanWithLogger (ctx , "scalesets.AzureClient.BeginUpdateInstances" )
220+ defer done ()
221+
222+ opts := & armcompute.VirtualMachineScaleSetsClientBeginUpdateInstancesOptions {ResumeToken : resumeToken }
223+ poller , err = ac .scalesets .BeginUpdateInstances (ctx , spec .ResourceGroupName (), spec .ResourceName (), vmInstanceIDs , opts )
224+ if err != nil {
225+ return nil , err
226+ }
227+
228+ ctx , cancel := context .WithTimeout (ctx , ac .apiCallTimeout )
229+ defer cancel ()
230+
231+ pollOpts := & runtime.PollUntilDoneOptions {Frequency : async .DefaultPollerFrequency }
232+ _ , err = poller .PollUntilDone (ctx , pollOpts )
233+ if err != nil {
234+ // if an error occurs, return the Poller.
235+ // this means the long-running operation didn't finish in the specified timeout.
236+ return poller , err
237+ }
238+
239+ // if the operation completed, return a nil poller.
240+ return nil , err
241+ }
0 commit comments