1package dataprotection
2
3// Copyright (c) Microsoft Corporation. All rights reserved.
4// Licensed under the MIT License. See License.txt in the project root for license information.
5//
6// Code generated by Microsoft (R) AutoRest Code Generator.
7// Changes may cause incorrect behavior and will be lost if the code is regenerated.
8
9import (
10	"context"
11	"github.com/Azure/go-autorest/autorest"
12	"github.com/Azure/go-autorest/autorest/azure"
13	"github.com/Azure/go-autorest/autorest/validation"
14	"github.com/Azure/go-autorest/tracing"
15	"net/http"
16)
17
18// BackupInstancesClient is the open API 2.0 Specs for Azure Data Protection service
19type BackupInstancesClient struct {
20	BaseClient
21}
22
23// NewBackupInstancesClient creates an instance of the BackupInstancesClient client.
24func NewBackupInstancesClient(subscriptionID string) BackupInstancesClient {
25	return NewBackupInstancesClientWithBaseURI(DefaultBaseURI, subscriptionID)
26}
27
28// NewBackupInstancesClientWithBaseURI creates an instance of the BackupInstancesClient client using a custom endpoint.
29// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack).
30func NewBackupInstancesClientWithBaseURI(baseURI string, subscriptionID string) BackupInstancesClient {
31	return BackupInstancesClient{NewWithBaseURI(baseURI, subscriptionID)}
32}
33
34// AdhocBackup trigger adhoc backup
35// Parameters:
36// vaultName - the name of the backup vault.
37// resourceGroupName - the name of the resource group where the backup vault is present.
38// backupInstanceName - the name of the backup instance
39// parameters - request body for operation
40func (client BackupInstancesClient) AdhocBackup(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters TriggerBackupRequest) (result BackupInstancesAdhocBackupFuture, err error) {
41	if tracing.IsEnabled() {
42		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.AdhocBackup")
43		defer func() {
44			sc := -1
45			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
46				sc = result.FutureAPI.Response().StatusCode
47			}
48			tracing.EndSpan(ctx, sc, err)
49		}()
50	}
51	if err := validation.Validate([]validation.Validation{
52		{TargetValue: parameters,
53			Constraints: []validation.Constraint{{Target: "parameters.BackupRuleOptions", Name: validation.Null, Rule: true,
54				Chain: []validation.Constraint{{Target: "parameters.BackupRuleOptions.RuleName", Name: validation.Null, Rule: true, Chain: nil},
55					{Target: "parameters.BackupRuleOptions.TriggerOption", Name: validation.Null, Rule: true, Chain: nil},
56				}}}}}); err != nil {
57		return result, validation.NewError("dataprotection.BackupInstancesClient", "AdhocBackup", err.Error())
58	}
59
60	req, err := client.AdhocBackupPreparer(ctx, vaultName, resourceGroupName, backupInstanceName, parameters)
61	if err != nil {
62		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "AdhocBackup", nil, "Failure preparing request")
63		return
64	}
65
66	result, err = client.AdhocBackupSender(req)
67	if err != nil {
68		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "AdhocBackup", nil, "Failure sending request")
69		return
70	}
71
72	return
73}
74
75// AdhocBackupPreparer prepares the AdhocBackup request.
76func (client BackupInstancesClient) AdhocBackupPreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters TriggerBackupRequest) (*http.Request, error) {
77	pathParameters := map[string]interface{}{
78		"backupInstanceName": autorest.Encode("path", backupInstanceName),
79		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
80		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
81		"vaultName":          autorest.Encode("path", vaultName),
82	}
83
84	const APIVersion = "2021-01-01"
85	queryParameters := map[string]interface{}{
86		"api-version": APIVersion,
87	}
88
89	preparer := autorest.CreatePreparer(
90		autorest.AsContentType("application/json; charset=utf-8"),
91		autorest.AsPost(),
92		autorest.WithBaseURL(client.BaseURI),
93		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/backup", pathParameters),
94		autorest.WithJSON(parameters),
95		autorest.WithQueryParameters(queryParameters))
96	return preparer.Prepare((&http.Request{}).WithContext(ctx))
97}
98
99// AdhocBackupSender sends the AdhocBackup request. The method will close the
100// http.Response Body if it receives an error.
101func (client BackupInstancesClient) AdhocBackupSender(req *http.Request) (future BackupInstancesAdhocBackupFuture, err error) {
102	var resp *http.Response
103	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
104	if err != nil {
105		return
106	}
107	var azf azure.Future
108	azf, err = azure.NewFutureFromResponse(resp)
109	future.FutureAPI = &azf
110	future.Result = future.result
111	return
112}
113
114// AdhocBackupResponder handles the response to the AdhocBackup request. The method always
115// closes the http.Response Body.
116func (client BackupInstancesClient) AdhocBackupResponder(resp *http.Response) (result OperationJobExtendedInfo, err error) {
117	err = autorest.Respond(
118		resp,
119		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
120		autorest.ByUnmarshallingJSON(&result),
121		autorest.ByClosing())
122	result.Response = autorest.Response{Response: resp}
123	return
124}
125
126// CreateOrUpdate create or update a backup instance in a backup vault
127// Parameters:
128// vaultName - the name of the backup vault.
129// resourceGroupName - the name of the resource group where the backup vault is present.
130// backupInstanceName - the name of the backup instance
131// parameters - request body for operation
132func (client BackupInstancesClient) CreateOrUpdate(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters BackupInstanceResource) (result BackupInstancesCreateOrUpdateFuture, err error) {
133	if tracing.IsEnabled() {
134		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.CreateOrUpdate")
135		defer func() {
136			sc := -1
137			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
138				sc = result.FutureAPI.Response().StatusCode
139			}
140			tracing.EndSpan(ctx, sc, err)
141		}()
142	}
143	if err := validation.Validate([]validation.Validation{
144		{TargetValue: parameters,
145			Constraints: []validation.Constraint{{Target: "parameters.Properties", Name: validation.Null, Rule: false,
146				Chain: []validation.Constraint{{Target: "parameters.Properties.DataSourceInfo", Name: validation.Null, Rule: true,
147					Chain: []validation.Constraint{{Target: "parameters.Properties.DataSourceInfo.ResourceID", Name: validation.Null, Rule: true, Chain: nil}}},
148					{Target: "parameters.Properties.DataSourceSetInfo", Name: validation.Null, Rule: false,
149						Chain: []validation.Constraint{{Target: "parameters.Properties.DataSourceSetInfo.ResourceID", Name: validation.Null, Rule: true, Chain: nil}}},
150					{Target: "parameters.Properties.PolicyInfo", Name: validation.Null, Rule: true,
151						Chain: []validation.Constraint{{Target: "parameters.Properties.PolicyInfo.PolicyID", Name: validation.Null, Rule: true, Chain: nil}}},
152					{Target: "parameters.Properties.ProtectionStatus", Name: validation.Null, Rule: false,
153						Chain: []validation.Constraint{{Target: "parameters.Properties.ProtectionStatus.ErrorDetails", Name: validation.Null, Rule: false,
154							Chain: []validation.Constraint{{Target: "parameters.Properties.ProtectionStatus.ErrorDetails.InnerError", Name: validation.Null, Rule: false,
155								Chain: []validation.Constraint{{Target: "parameters.Properties.ProtectionStatus.ErrorDetails.InnerError.EmbeddedInnerError", Name: validation.Null, Rule: false, Chain: nil}}},
156							}},
157						}},
158					{Target: "parameters.Properties.ProtectionErrorDetails", Name: validation.Null, Rule: false,
159						Chain: []validation.Constraint{{Target: "parameters.Properties.ProtectionErrorDetails.InnerError", Name: validation.Null, Rule: false,
160							Chain: []validation.Constraint{{Target: "parameters.Properties.ProtectionErrorDetails.InnerError.EmbeddedInnerError", Name: validation.Null, Rule: false, Chain: nil}}},
161						}},
162					{Target: "parameters.Properties.ObjectType", Name: validation.Null, Rule: true, Chain: nil},
163				}}}}}); err != nil {
164		return result, validation.NewError("dataprotection.BackupInstancesClient", "CreateOrUpdate", err.Error())
165	}
166
167	req, err := client.CreateOrUpdatePreparer(ctx, vaultName, resourceGroupName, backupInstanceName, parameters)
168	if err != nil {
169		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "CreateOrUpdate", nil, "Failure preparing request")
170		return
171	}
172
173	result, err = client.CreateOrUpdateSender(req)
174	if err != nil {
175		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "CreateOrUpdate", nil, "Failure sending request")
176		return
177	}
178
179	return
180}
181
182// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
183func (client BackupInstancesClient) CreateOrUpdatePreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters BackupInstanceResource) (*http.Request, error) {
184	pathParameters := map[string]interface{}{
185		"backupInstanceName": autorest.Encode("path", backupInstanceName),
186		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
187		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
188		"vaultName":          autorest.Encode("path", vaultName),
189	}
190
191	const APIVersion = "2021-01-01"
192	queryParameters := map[string]interface{}{
193		"api-version": APIVersion,
194	}
195
196	preparer := autorest.CreatePreparer(
197		autorest.AsContentType("application/json; charset=utf-8"),
198		autorest.AsPut(),
199		autorest.WithBaseURL(client.BaseURI),
200		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}", pathParameters),
201		autorest.WithJSON(parameters),
202		autorest.WithQueryParameters(queryParameters))
203	return preparer.Prepare((&http.Request{}).WithContext(ctx))
204}
205
206// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
207// http.Response Body if it receives an error.
208func (client BackupInstancesClient) CreateOrUpdateSender(req *http.Request) (future BackupInstancesCreateOrUpdateFuture, err error) {
209	var resp *http.Response
210	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
211	if err != nil {
212		return
213	}
214	var azf azure.Future
215	azf, err = azure.NewFutureFromResponse(resp)
216	future.FutureAPI = &azf
217	future.Result = future.result
218	return
219}
220
221// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
222// closes the http.Response Body.
223func (client BackupInstancesClient) CreateOrUpdateResponder(resp *http.Response) (result BackupInstanceResource, err error) {
224	err = autorest.Respond(
225		resp,
226		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
227		autorest.ByUnmarshallingJSON(&result),
228		autorest.ByClosing())
229	result.Response = autorest.Response{Response: resp}
230	return
231}
232
233// Delete delete a backup instance in a backup vault
234// Parameters:
235// vaultName - the name of the backup vault.
236// resourceGroupName - the name of the resource group where the backup vault is present.
237// backupInstanceName - the name of the backup instance
238func (client BackupInstancesClient) Delete(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string) (result BackupInstancesDeleteFuture, err error) {
239	if tracing.IsEnabled() {
240		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.Delete")
241		defer func() {
242			sc := -1
243			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
244				sc = result.FutureAPI.Response().StatusCode
245			}
246			tracing.EndSpan(ctx, sc, err)
247		}()
248	}
249	req, err := client.DeletePreparer(ctx, vaultName, resourceGroupName, backupInstanceName)
250	if err != nil {
251		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "Delete", nil, "Failure preparing request")
252		return
253	}
254
255	result, err = client.DeleteSender(req)
256	if err != nil {
257		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "Delete", nil, "Failure sending request")
258		return
259	}
260
261	return
262}
263
264// DeletePreparer prepares the Delete request.
265func (client BackupInstancesClient) DeletePreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string) (*http.Request, error) {
266	pathParameters := map[string]interface{}{
267		"backupInstanceName": autorest.Encode("path", backupInstanceName),
268		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
269		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
270		"vaultName":          autorest.Encode("path", vaultName),
271	}
272
273	const APIVersion = "2021-01-01"
274	queryParameters := map[string]interface{}{
275		"api-version": APIVersion,
276	}
277
278	preparer := autorest.CreatePreparer(
279		autorest.AsDelete(),
280		autorest.WithBaseURL(client.BaseURI),
281		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}", pathParameters),
282		autorest.WithQueryParameters(queryParameters))
283	return preparer.Prepare((&http.Request{}).WithContext(ctx))
284}
285
286// DeleteSender sends the Delete request. The method will close the
287// http.Response Body if it receives an error.
288func (client BackupInstancesClient) DeleteSender(req *http.Request) (future BackupInstancesDeleteFuture, err error) {
289	var resp *http.Response
290	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
291	if err != nil {
292		return
293	}
294	var azf azure.Future
295	azf, err = azure.NewFutureFromResponse(resp)
296	future.FutureAPI = &azf
297	future.Result = future.result
298	return
299}
300
301// DeleteResponder handles the response to the Delete request. The method always
302// closes the http.Response Body.
303func (client BackupInstancesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
304	err = autorest.Respond(
305		resp,
306		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
307		autorest.ByClosing())
308	result.Response = resp
309	return
310}
311
312// Get gets a backup instance with name in a backup vault
313// Parameters:
314// vaultName - the name of the backup vault.
315// resourceGroupName - the name of the resource group where the backup vault is present.
316// backupInstanceName - the name of the backup instance
317func (client BackupInstancesClient) Get(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string) (result BackupInstanceResource, err error) {
318	if tracing.IsEnabled() {
319		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.Get")
320		defer func() {
321			sc := -1
322			if result.Response.Response != nil {
323				sc = result.Response.Response.StatusCode
324			}
325			tracing.EndSpan(ctx, sc, err)
326		}()
327	}
328	req, err := client.GetPreparer(ctx, vaultName, resourceGroupName, backupInstanceName)
329	if err != nil {
330		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "Get", nil, "Failure preparing request")
331		return
332	}
333
334	resp, err := client.GetSender(req)
335	if err != nil {
336		result.Response = autorest.Response{Response: resp}
337		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "Get", resp, "Failure sending request")
338		return
339	}
340
341	result, err = client.GetResponder(resp)
342	if err != nil {
343		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "Get", resp, "Failure responding to request")
344		return
345	}
346
347	return
348}
349
350// GetPreparer prepares the Get request.
351func (client BackupInstancesClient) GetPreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string) (*http.Request, error) {
352	pathParameters := map[string]interface{}{
353		"backupInstanceName": autorest.Encode("path", backupInstanceName),
354		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
355		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
356		"vaultName":          autorest.Encode("path", vaultName),
357	}
358
359	const APIVersion = "2021-01-01"
360	queryParameters := map[string]interface{}{
361		"api-version": APIVersion,
362	}
363
364	preparer := autorest.CreatePreparer(
365		autorest.AsGet(),
366		autorest.WithBaseURL(client.BaseURI),
367		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}", pathParameters),
368		autorest.WithQueryParameters(queryParameters))
369	return preparer.Prepare((&http.Request{}).WithContext(ctx))
370}
371
372// GetSender sends the Get request. The method will close the
373// http.Response Body if it receives an error.
374func (client BackupInstancesClient) GetSender(req *http.Request) (*http.Response, error) {
375	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
376}
377
378// GetResponder handles the response to the Get request. The method always
379// closes the http.Response Body.
380func (client BackupInstancesClient) GetResponder(resp *http.Response) (result BackupInstanceResource, err error) {
381	err = autorest.Respond(
382		resp,
383		azure.WithErrorUnlessStatusCode(http.StatusOK),
384		autorest.ByUnmarshallingJSON(&result),
385		autorest.ByClosing())
386	result.Response = autorest.Response{Response: resp}
387	return
388}
389
390// List gets a backup instances belonging to a backup vault
391// Parameters:
392// vaultName - the name of the backup vault.
393// resourceGroupName - the name of the resource group where the backup vault is present.
394func (client BackupInstancesClient) List(ctx context.Context, vaultName string, resourceGroupName string) (result BackupInstanceResourceListPage, err error) {
395	if tracing.IsEnabled() {
396		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.List")
397		defer func() {
398			sc := -1
399			if result.birl.Response.Response != nil {
400				sc = result.birl.Response.Response.StatusCode
401			}
402			tracing.EndSpan(ctx, sc, err)
403		}()
404	}
405	result.fn = client.listNextResults
406	req, err := client.ListPreparer(ctx, vaultName, resourceGroupName)
407	if err != nil {
408		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "List", nil, "Failure preparing request")
409		return
410	}
411
412	resp, err := client.ListSender(req)
413	if err != nil {
414		result.birl.Response = autorest.Response{Response: resp}
415		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "List", resp, "Failure sending request")
416		return
417	}
418
419	result.birl, err = client.ListResponder(resp)
420	if err != nil {
421		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "List", resp, "Failure responding to request")
422		return
423	}
424	if result.birl.hasNextLink() && result.birl.IsEmpty() {
425		err = result.NextWithContext(ctx)
426		return
427	}
428
429	return
430}
431
432// ListPreparer prepares the List request.
433func (client BackupInstancesClient) ListPreparer(ctx context.Context, vaultName string, resourceGroupName string) (*http.Request, error) {
434	pathParameters := map[string]interface{}{
435		"resourceGroupName": autorest.Encode("path", resourceGroupName),
436		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
437		"vaultName":         autorest.Encode("path", vaultName),
438	}
439
440	const APIVersion = "2021-01-01"
441	queryParameters := map[string]interface{}{
442		"api-version": APIVersion,
443	}
444
445	preparer := autorest.CreatePreparer(
446		autorest.AsGet(),
447		autorest.WithBaseURL(client.BaseURI),
448		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances", pathParameters),
449		autorest.WithQueryParameters(queryParameters))
450	return preparer.Prepare((&http.Request{}).WithContext(ctx))
451}
452
453// ListSender sends the List request. The method will close the
454// http.Response Body if it receives an error.
455func (client BackupInstancesClient) ListSender(req *http.Request) (*http.Response, error) {
456	return client.Send(req, azure.DoRetryWithRegistration(client.Client))
457}
458
459// ListResponder handles the response to the List request. The method always
460// closes the http.Response Body.
461func (client BackupInstancesClient) ListResponder(resp *http.Response) (result BackupInstanceResourceList, err error) {
462	err = autorest.Respond(
463		resp,
464		azure.WithErrorUnlessStatusCode(http.StatusOK),
465		autorest.ByUnmarshallingJSON(&result),
466		autorest.ByClosing())
467	result.Response = autorest.Response{Response: resp}
468	return
469}
470
471// listNextResults retrieves the next set of results, if any.
472func (client BackupInstancesClient) listNextResults(ctx context.Context, lastResults BackupInstanceResourceList) (result BackupInstanceResourceList, err error) {
473	req, err := lastResults.backupInstanceResourceListPreparer(ctx)
474	if err != nil {
475		return result, autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "listNextResults", nil, "Failure preparing next results request")
476	}
477	if req == nil {
478		return
479	}
480	resp, err := client.ListSender(req)
481	if err != nil {
482		result.Response = autorest.Response{Response: resp}
483		return result, autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "listNextResults", resp, "Failure sending next results request")
484	}
485	result, err = client.ListResponder(resp)
486	if err != nil {
487		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "listNextResults", resp, "Failure responding to next results request")
488	}
489	return
490}
491
492// ListComplete enumerates all values, automatically crossing page boundaries as required.
493func (client BackupInstancesClient) ListComplete(ctx context.Context, vaultName string, resourceGroupName string) (result BackupInstanceResourceListIterator, err error) {
494	if tracing.IsEnabled() {
495		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.List")
496		defer func() {
497			sc := -1
498			if result.Response().Response.Response != nil {
499				sc = result.page.Response().Response.Response.StatusCode
500			}
501			tracing.EndSpan(ctx, sc, err)
502		}()
503	}
504	result.page, err = client.List(ctx, vaultName, resourceGroupName)
505	return
506}
507
508// TriggerRehydrate rehydrate recovery point for restore for a BackupInstance
509// Parameters:
510// resourceGroupName - the name of the resource group where the backup vault is present.
511// vaultName - the name of the backup vault.
512// parameters - request body for operation
513func (client BackupInstancesClient) TriggerRehydrate(ctx context.Context, resourceGroupName string, vaultName string, parameters AzureBackupRehydrationRequest, backupInstanceName string) (result BackupInstancesTriggerRehydrateFuture, err error) {
514	if tracing.IsEnabled() {
515		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.TriggerRehydrate")
516		defer func() {
517			sc := -1
518			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
519				sc = result.FutureAPI.Response().StatusCode
520			}
521			tracing.EndSpan(ctx, sc, err)
522		}()
523	}
524	if err := validation.Validate([]validation.Validation{
525		{TargetValue: parameters,
526			Constraints: []validation.Constraint{{Target: "parameters.RecoveryPointID", Name: validation.Null, Rule: true, Chain: nil},
527				{Target: "parameters.RehydrationRetentionDuration", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
528		return result, validation.NewError("dataprotection.BackupInstancesClient", "TriggerRehydrate", err.Error())
529	}
530
531	req, err := client.TriggerRehydratePreparer(ctx, resourceGroupName, vaultName, parameters, backupInstanceName)
532	if err != nil {
533		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "TriggerRehydrate", nil, "Failure preparing request")
534		return
535	}
536
537	result, err = client.TriggerRehydrateSender(req)
538	if err != nil {
539		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "TriggerRehydrate", nil, "Failure sending request")
540		return
541	}
542
543	return
544}
545
546// TriggerRehydratePreparer prepares the TriggerRehydrate request.
547func (client BackupInstancesClient) TriggerRehydratePreparer(ctx context.Context, resourceGroupName string, vaultName string, parameters AzureBackupRehydrationRequest, backupInstanceName string) (*http.Request, error) {
548	pathParameters := map[string]interface{}{
549		"backupInstanceName": autorest.Encode("path", backupInstanceName),
550		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
551		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
552		"vaultName":          autorest.Encode("path", vaultName),
553	}
554
555	const APIVersion = "2021-01-01"
556	queryParameters := map[string]interface{}{
557		"api-version": APIVersion,
558	}
559
560	preparer := autorest.CreatePreparer(
561		autorest.AsContentType("application/json; charset=utf-8"),
562		autorest.AsPost(),
563		autorest.WithBaseURL(client.BaseURI),
564		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/rehydrate", pathParameters),
565		autorest.WithJSON(parameters),
566		autorest.WithQueryParameters(queryParameters))
567	return preparer.Prepare((&http.Request{}).WithContext(ctx))
568}
569
570// TriggerRehydrateSender sends the TriggerRehydrate request. The method will close the
571// http.Response Body if it receives an error.
572func (client BackupInstancesClient) TriggerRehydrateSender(req *http.Request) (future BackupInstancesTriggerRehydrateFuture, err error) {
573	var resp *http.Response
574	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
575	if err != nil {
576		return
577	}
578	var azf azure.Future
579	azf, err = azure.NewFutureFromResponse(resp)
580	future.FutureAPI = &azf
581	future.Result = future.result
582	return
583}
584
585// TriggerRehydrateResponder handles the response to the TriggerRehydrate request. The method always
586// closes the http.Response Body.
587func (client BackupInstancesClient) TriggerRehydrateResponder(resp *http.Response) (result autorest.Response, err error) {
588	err = autorest.Respond(
589		resp,
590		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
591		autorest.ByClosing())
592	result.Response = resp
593	return
594}
595
596// TriggerRestore triggers restore for a BackupInstance
597// Parameters:
598// vaultName - the name of the backup vault.
599// resourceGroupName - the name of the resource group where the backup vault is present.
600// backupInstanceName - the name of the backup instance
601// parameters - request body for operation
602func (client BackupInstancesClient) TriggerRestore(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters BasicAzureBackupRestoreRequest) (result BackupInstancesTriggerRestoreFuture, err error) {
603	if tracing.IsEnabled() {
604		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.TriggerRestore")
605		defer func() {
606			sc := -1
607			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
608				sc = result.FutureAPI.Response().StatusCode
609			}
610			tracing.EndSpan(ctx, sc, err)
611		}()
612	}
613	req, err := client.TriggerRestorePreparer(ctx, vaultName, resourceGroupName, backupInstanceName, parameters)
614	if err != nil {
615		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "TriggerRestore", nil, "Failure preparing request")
616		return
617	}
618
619	result, err = client.TriggerRestoreSender(req)
620	if err != nil {
621		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "TriggerRestore", nil, "Failure sending request")
622		return
623	}
624
625	return
626}
627
628// TriggerRestorePreparer prepares the TriggerRestore request.
629func (client BackupInstancesClient) TriggerRestorePreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters BasicAzureBackupRestoreRequest) (*http.Request, error) {
630	pathParameters := map[string]interface{}{
631		"backupInstanceName": autorest.Encode("path", backupInstanceName),
632		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
633		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
634		"vaultName":          autorest.Encode("path", vaultName),
635	}
636
637	const APIVersion = "2021-01-01"
638	queryParameters := map[string]interface{}{
639		"api-version": APIVersion,
640	}
641
642	preparer := autorest.CreatePreparer(
643		autorest.AsContentType("application/json; charset=utf-8"),
644		autorest.AsPost(),
645		autorest.WithBaseURL(client.BaseURI),
646		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/restore", pathParameters),
647		autorest.WithJSON(parameters),
648		autorest.WithQueryParameters(queryParameters))
649	return preparer.Prepare((&http.Request{}).WithContext(ctx))
650}
651
652// TriggerRestoreSender sends the TriggerRestore request. The method will close the
653// http.Response Body if it receives an error.
654func (client BackupInstancesClient) TriggerRestoreSender(req *http.Request) (future BackupInstancesTriggerRestoreFuture, err error) {
655	var resp *http.Response
656	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
657	if err != nil {
658		return
659	}
660	var azf azure.Future
661	azf, err = azure.NewFutureFromResponse(resp)
662	future.FutureAPI = &azf
663	future.Result = future.result
664	return
665}
666
667// TriggerRestoreResponder handles the response to the TriggerRestore request. The method always
668// closes the http.Response Body.
669func (client BackupInstancesClient) TriggerRestoreResponder(resp *http.Response) (result OperationJobExtendedInfo, err error) {
670	err = autorest.Respond(
671		resp,
672		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
673		autorest.ByUnmarshallingJSON(&result),
674		autorest.ByClosing())
675	result.Response = autorest.Response{Response: resp}
676	return
677}
678
679// ValidateForBackup validate whether adhoc backup will be successful or not
680// Parameters:
681// vaultName - the name of the backup vault.
682// resourceGroupName - the name of the resource group where the backup vault is present.
683// parameters - request body for operation
684func (client BackupInstancesClient) ValidateForBackup(ctx context.Context, vaultName string, resourceGroupName string, parameters ValidateForBackupRequest) (result BackupInstancesValidateForBackupFuture, err error) {
685	if tracing.IsEnabled() {
686		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.ValidateForBackup")
687		defer func() {
688			sc := -1
689			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
690				sc = result.FutureAPI.Response().StatusCode
691			}
692			tracing.EndSpan(ctx, sc, err)
693		}()
694	}
695	if err := validation.Validate([]validation.Validation{
696		{TargetValue: parameters,
697			Constraints: []validation.Constraint{{Target: "parameters.BackupInstance", Name: validation.Null, Rule: true,
698				Chain: []validation.Constraint{{Target: "parameters.BackupInstance.DataSourceInfo", Name: validation.Null, Rule: true,
699					Chain: []validation.Constraint{{Target: "parameters.BackupInstance.DataSourceInfo.ResourceID", Name: validation.Null, Rule: true, Chain: nil}}},
700					{Target: "parameters.BackupInstance.DataSourceSetInfo", Name: validation.Null, Rule: false,
701						Chain: []validation.Constraint{{Target: "parameters.BackupInstance.DataSourceSetInfo.ResourceID", Name: validation.Null, Rule: true, Chain: nil}}},
702					{Target: "parameters.BackupInstance.PolicyInfo", Name: validation.Null, Rule: true,
703						Chain: []validation.Constraint{{Target: "parameters.BackupInstance.PolicyInfo.PolicyID", Name: validation.Null, Rule: true, Chain: nil}}},
704					{Target: "parameters.BackupInstance.ProtectionStatus", Name: validation.Null, Rule: false,
705						Chain: []validation.Constraint{{Target: "parameters.BackupInstance.ProtectionStatus.ErrorDetails", Name: validation.Null, Rule: false,
706							Chain: []validation.Constraint{{Target: "parameters.BackupInstance.ProtectionStatus.ErrorDetails.InnerError", Name: validation.Null, Rule: false,
707								Chain: []validation.Constraint{{Target: "parameters.BackupInstance.ProtectionStatus.ErrorDetails.InnerError.EmbeddedInnerError", Name: validation.Null, Rule: false, Chain: nil}}},
708							}},
709						}},
710					{Target: "parameters.BackupInstance.ProtectionErrorDetails", Name: validation.Null, Rule: false,
711						Chain: []validation.Constraint{{Target: "parameters.BackupInstance.ProtectionErrorDetails.InnerError", Name: validation.Null, Rule: false,
712							Chain: []validation.Constraint{{Target: "parameters.BackupInstance.ProtectionErrorDetails.InnerError.EmbeddedInnerError", Name: validation.Null, Rule: false, Chain: nil}}},
713						}},
714					{Target: "parameters.BackupInstance.ObjectType", Name: validation.Null, Rule: true, Chain: nil},
715				}}}}}); err != nil {
716		return result, validation.NewError("dataprotection.BackupInstancesClient", "ValidateForBackup", err.Error())
717	}
718
719	req, err := client.ValidateForBackupPreparer(ctx, vaultName, resourceGroupName, parameters)
720	if err != nil {
721		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "ValidateForBackup", nil, "Failure preparing request")
722		return
723	}
724
725	result, err = client.ValidateForBackupSender(req)
726	if err != nil {
727		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "ValidateForBackup", nil, "Failure sending request")
728		return
729	}
730
731	return
732}
733
734// ValidateForBackupPreparer prepares the ValidateForBackup request.
735func (client BackupInstancesClient) ValidateForBackupPreparer(ctx context.Context, vaultName string, resourceGroupName string, parameters ValidateForBackupRequest) (*http.Request, error) {
736	pathParameters := map[string]interface{}{
737		"resourceGroupName": autorest.Encode("path", resourceGroupName),
738		"subscriptionId":    autorest.Encode("path", client.SubscriptionID),
739		"vaultName":         autorest.Encode("path", vaultName),
740	}
741
742	const APIVersion = "2021-01-01"
743	queryParameters := map[string]interface{}{
744		"api-version": APIVersion,
745	}
746
747	preparer := autorest.CreatePreparer(
748		autorest.AsContentType("application/json; charset=utf-8"),
749		autorest.AsPost(),
750		autorest.WithBaseURL(client.BaseURI),
751		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/validateForBackup", pathParameters),
752		autorest.WithJSON(parameters),
753		autorest.WithQueryParameters(queryParameters))
754	return preparer.Prepare((&http.Request{}).WithContext(ctx))
755}
756
757// ValidateForBackupSender sends the ValidateForBackup request. The method will close the
758// http.Response Body if it receives an error.
759func (client BackupInstancesClient) ValidateForBackupSender(req *http.Request) (future BackupInstancesValidateForBackupFuture, err error) {
760	var resp *http.Response
761	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
762	if err != nil {
763		return
764	}
765	var azf azure.Future
766	azf, err = azure.NewFutureFromResponse(resp)
767	future.FutureAPI = &azf
768	future.Result = future.result
769	return
770}
771
772// ValidateForBackupResponder handles the response to the ValidateForBackup request. The method always
773// closes the http.Response Body.
774func (client BackupInstancesClient) ValidateForBackupResponder(resp *http.Response) (result OperationJobExtendedInfo, err error) {
775	err = autorest.Respond(
776		resp,
777		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
778		autorest.ByUnmarshallingJSON(&result),
779		autorest.ByClosing())
780	result.Response = autorest.Response{Response: resp}
781	return
782}
783
784// ValidateRestore validates if Restore can be triggered for a DataSource
785// Parameters:
786// vaultName - the name of the backup vault.
787// resourceGroupName - the name of the resource group where the backup vault is present.
788// backupInstanceName - the name of the backup instance
789// parameters - request body for operation
790func (client BackupInstancesClient) ValidateRestore(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters ValidateRestoreRequestObject) (result BackupInstancesValidateRestoreFuture, err error) {
791	if tracing.IsEnabled() {
792		ctx = tracing.StartSpan(ctx, fqdn+"/BackupInstancesClient.ValidateRestore")
793		defer func() {
794			sc := -1
795			if result.FutureAPI != nil && result.FutureAPI.Response() != nil {
796				sc = result.FutureAPI.Response().StatusCode
797			}
798			tracing.EndSpan(ctx, sc, err)
799		}()
800	}
801	req, err := client.ValidateRestorePreparer(ctx, vaultName, resourceGroupName, backupInstanceName, parameters)
802	if err != nil {
803		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "ValidateRestore", nil, "Failure preparing request")
804		return
805	}
806
807	result, err = client.ValidateRestoreSender(req)
808	if err != nil {
809		err = autorest.NewErrorWithError(err, "dataprotection.BackupInstancesClient", "ValidateRestore", nil, "Failure sending request")
810		return
811	}
812
813	return
814}
815
816// ValidateRestorePreparer prepares the ValidateRestore request.
817func (client BackupInstancesClient) ValidateRestorePreparer(ctx context.Context, vaultName string, resourceGroupName string, backupInstanceName string, parameters ValidateRestoreRequestObject) (*http.Request, error) {
818	pathParameters := map[string]interface{}{
819		"backupInstanceName": autorest.Encode("path", backupInstanceName),
820		"resourceGroupName":  autorest.Encode("path", resourceGroupName),
821		"subscriptionId":     autorest.Encode("path", client.SubscriptionID),
822		"vaultName":          autorest.Encode("path", vaultName),
823	}
824
825	const APIVersion = "2021-01-01"
826	queryParameters := map[string]interface{}{
827		"api-version": APIVersion,
828	}
829
830	preparer := autorest.CreatePreparer(
831		autorest.AsContentType("application/json; charset=utf-8"),
832		autorest.AsPost(),
833		autorest.WithBaseURL(client.BaseURI),
834		autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DataProtection/backupVaults/{vaultName}/backupInstances/{backupInstanceName}/validateRestore", pathParameters),
835		autorest.WithJSON(parameters),
836		autorest.WithQueryParameters(queryParameters))
837	return preparer.Prepare((&http.Request{}).WithContext(ctx))
838}
839
840// ValidateRestoreSender sends the ValidateRestore request. The method will close the
841// http.Response Body if it receives an error.
842func (client BackupInstancesClient) ValidateRestoreSender(req *http.Request) (future BackupInstancesValidateRestoreFuture, err error) {
843	var resp *http.Response
844	resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client))
845	if err != nil {
846		return
847	}
848	var azf azure.Future
849	azf, err = azure.NewFutureFromResponse(resp)
850	future.FutureAPI = &azf
851	future.Result = future.result
852	return
853}
854
855// ValidateRestoreResponder handles the response to the ValidateRestore request. The method always
856// closes the http.Response Body.
857func (client BackupInstancesClient) ValidateRestoreResponder(resp *http.Response) (result OperationJobExtendedInfo, err error) {
858	err = autorest.Respond(
859		resp,
860		azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
861		autorest.ByUnmarshallingJSON(&result),
862		autorest.ByClosing())
863	result.Response = autorest.Response{Response: resp}
864	return
865}
866