1package virtualmachineimagebuilder
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	"encoding/json"
12	"github.com/Azure/go-autorest/autorest"
13	"github.com/Azure/go-autorest/autorest/azure"
14	"github.com/Azure/go-autorest/autorest/date"
15	"github.com/Azure/go-autorest/autorest/to"
16	"github.com/Azure/go-autorest/tracing"
17	"net/http"
18)
19
20// The package's fully qualified name.
21const fqdn = "github.com/Azure/azure-sdk-for-go/services/preview/virtualmachineimagebuilder/mgmt/2019-05-01-preview/virtualmachineimagebuilder"
22
23// APIError api error.
24type APIError struct {
25	// Details - The Api error details
26	Details *[]APIErrorBase `json:"details,omitempty"`
27	// InnerError - The Api inner error
28	InnerError *InnerError `json:"innerError,omitempty"`
29	// Code - The error code.
30	Code *string `json:"code,omitempty"`
31	// Target - The target of the particular error.
32	Target *string `json:"target,omitempty"`
33	// Message - The error message.
34	Message *string `json:"message,omitempty"`
35}
36
37// APIErrorBase api error base.
38type APIErrorBase struct {
39	// Code - The error code.
40	Code *string `json:"code,omitempty"`
41	// Target - The target of the particular error.
42	Target *string `json:"target,omitempty"`
43	// Message - The error message.
44	Message *string `json:"message,omitempty"`
45}
46
47// ImageTemplate image template is an ARM resource managed by Microsoft.VirtualMachineImages provider
48type ImageTemplate struct {
49	autorest.Response `json:"-"`
50	// ImageTemplateProperties - The properties of the image template
51	*ImageTemplateProperties `json:"properties,omitempty"`
52	// Identity - The identity of the image template, if configured.
53	Identity *ImageTemplateIdentity `json:"identity,omitempty"`
54	// ID - READ-ONLY; Resource Id
55	ID *string `json:"id,omitempty"`
56	// Name - READ-ONLY; Resource name
57	Name *string `json:"name,omitempty"`
58	// Type - READ-ONLY; Resource type
59	Type *string `json:"type,omitempty"`
60	// Location - Resource location
61	Location *string `json:"location,omitempty"`
62	// Tags - Resource tags
63	Tags map[string]*string `json:"tags"`
64}
65
66// MarshalJSON is the custom marshaler for ImageTemplate.
67func (it ImageTemplate) MarshalJSON() ([]byte, error) {
68	objectMap := make(map[string]interface{})
69	if it.ImageTemplateProperties != nil {
70		objectMap["properties"] = it.ImageTemplateProperties
71	}
72	if it.Identity != nil {
73		objectMap["identity"] = it.Identity
74	}
75	if it.Location != nil {
76		objectMap["location"] = it.Location
77	}
78	if it.Tags != nil {
79		objectMap["tags"] = it.Tags
80	}
81	return json.Marshal(objectMap)
82}
83
84// UnmarshalJSON is the custom unmarshaler for ImageTemplate struct.
85func (it *ImageTemplate) UnmarshalJSON(body []byte) error {
86	var m map[string]*json.RawMessage
87	err := json.Unmarshal(body, &m)
88	if err != nil {
89		return err
90	}
91	for k, v := range m {
92		switch k {
93		case "properties":
94			if v != nil {
95				var imageTemplateProperties ImageTemplateProperties
96				err = json.Unmarshal(*v, &imageTemplateProperties)
97				if err != nil {
98					return err
99				}
100				it.ImageTemplateProperties = &imageTemplateProperties
101			}
102		case "identity":
103			if v != nil {
104				var identity ImageTemplateIdentity
105				err = json.Unmarshal(*v, &identity)
106				if err != nil {
107					return err
108				}
109				it.Identity = &identity
110			}
111		case "id":
112			if v != nil {
113				var ID string
114				err = json.Unmarshal(*v, &ID)
115				if err != nil {
116					return err
117				}
118				it.ID = &ID
119			}
120		case "name":
121			if v != nil {
122				var name string
123				err = json.Unmarshal(*v, &name)
124				if err != nil {
125					return err
126				}
127				it.Name = &name
128			}
129		case "type":
130			if v != nil {
131				var typeVar string
132				err = json.Unmarshal(*v, &typeVar)
133				if err != nil {
134					return err
135				}
136				it.Type = &typeVar
137			}
138		case "location":
139			if v != nil {
140				var location string
141				err = json.Unmarshal(*v, &location)
142				if err != nil {
143					return err
144				}
145				it.Location = &location
146			}
147		case "tags":
148			if v != nil {
149				var tags map[string]*string
150				err = json.Unmarshal(*v, &tags)
151				if err != nil {
152					return err
153				}
154				it.Tags = tags
155			}
156		}
157	}
158
159	return nil
160}
161
162// BasicImageTemplateCustomizer describes a unit of image customization
163type BasicImageTemplateCustomizer interface {
164	AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool)
165	AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool)
166	AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool)
167	AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool)
168	AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool)
169}
170
171// ImageTemplateCustomizer describes a unit of image customization
172type ImageTemplateCustomizer struct {
173	// Name - Friendly Name to provide context on what this customization step does
174	Name *string `json:"name,omitempty"`
175	// Type - Possible values include: 'TypeImageTemplateCustomizer', 'TypeShell', 'TypeWindowsRestart', 'TypePowerShell', 'TypeFile'
176	Type TypeBasicImageTemplateCustomizer `json:"type,omitempty"`
177}
178
179func unmarshalBasicImageTemplateCustomizer(body []byte) (BasicImageTemplateCustomizer, error) {
180	var m map[string]interface{}
181	err := json.Unmarshal(body, &m)
182	if err != nil {
183		return nil, err
184	}
185
186	switch m["type"] {
187	case string(TypeShell):
188		var itsc ImageTemplateShellCustomizer
189		err := json.Unmarshal(body, &itsc)
190		return itsc, err
191	case string(TypeWindowsRestart):
192		var itrc ImageTemplateRestartCustomizer
193		err := json.Unmarshal(body, &itrc)
194		return itrc, err
195	case string(TypePowerShell):
196		var itpsc ImageTemplatePowerShellCustomizer
197		err := json.Unmarshal(body, &itpsc)
198		return itpsc, err
199	case string(TypeFile):
200		var itfc ImageTemplateFileCustomizer
201		err := json.Unmarshal(body, &itfc)
202		return itfc, err
203	default:
204		var itc ImageTemplateCustomizer
205		err := json.Unmarshal(body, &itc)
206		return itc, err
207	}
208}
209func unmarshalBasicImageTemplateCustomizerArray(body []byte) ([]BasicImageTemplateCustomizer, error) {
210	var rawMessages []*json.RawMessage
211	err := json.Unmarshal(body, &rawMessages)
212	if err != nil {
213		return nil, err
214	}
215
216	itcArray := make([]BasicImageTemplateCustomizer, len(rawMessages))
217
218	for index, rawMessage := range rawMessages {
219		itc, err := unmarshalBasicImageTemplateCustomizer(*rawMessage)
220		if err != nil {
221			return nil, err
222		}
223		itcArray[index] = itc
224	}
225	return itcArray, nil
226}
227
228// MarshalJSON is the custom marshaler for ImageTemplateCustomizer.
229func (itc ImageTemplateCustomizer) MarshalJSON() ([]byte, error) {
230	itc.Type = TypeImageTemplateCustomizer
231	objectMap := make(map[string]interface{})
232	if itc.Name != nil {
233		objectMap["name"] = itc.Name
234	}
235	if itc.Type != "" {
236		objectMap["type"] = itc.Type
237	}
238	return json.Marshal(objectMap)
239}
240
241// AsImageTemplateShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
242func (itc ImageTemplateCustomizer) AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool) {
243	return nil, false
244}
245
246// AsImageTemplateRestartCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
247func (itc ImageTemplateCustomizer) AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool) {
248	return nil, false
249}
250
251// AsImageTemplatePowerShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
252func (itc ImageTemplateCustomizer) AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool) {
253	return nil, false
254}
255
256// AsImageTemplateFileCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
257func (itc ImageTemplateCustomizer) AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool) {
258	return nil, false
259}
260
261// AsImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
262func (itc ImageTemplateCustomizer) AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool) {
263	return &itc, true
264}
265
266// AsBasicImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateCustomizer.
267func (itc ImageTemplateCustomizer) AsBasicImageTemplateCustomizer() (BasicImageTemplateCustomizer, bool) {
268	return &itc, true
269}
270
271// BasicImageTemplateDistributor generic distribution object
272type BasicImageTemplateDistributor interface {
273	AsImageTemplateManagedImageDistributor() (*ImageTemplateManagedImageDistributor, bool)
274	AsImageTemplateSharedImageDistributor() (*ImageTemplateSharedImageDistributor, bool)
275	AsImageTemplateVhdDistributor() (*ImageTemplateVhdDistributor, bool)
276	AsImageTemplateDistributor() (*ImageTemplateDistributor, bool)
277}
278
279// ImageTemplateDistributor generic distribution object
280type ImageTemplateDistributor struct {
281	// RunOutputName - The name to be used for the associated RunOutput.
282	RunOutputName *string `json:"runOutputName,omitempty"`
283	// ArtifactTags - Tags that will be applied to the artifact once it has been created/updated by the distributor.
284	ArtifactTags map[string]*string `json:"artifactTags"`
285	// Type - Possible values include: 'TypeBasicImageTemplateDistributorTypeImageTemplateDistributor', 'TypeBasicImageTemplateDistributorTypeManagedImage', 'TypeBasicImageTemplateDistributorTypeSharedImage', 'TypeBasicImageTemplateDistributorTypeVHD'
286	Type TypeBasicImageTemplateDistributor `json:"type,omitempty"`
287}
288
289func unmarshalBasicImageTemplateDistributor(body []byte) (BasicImageTemplateDistributor, error) {
290	var m map[string]interface{}
291	err := json.Unmarshal(body, &m)
292	if err != nil {
293		return nil, err
294	}
295
296	switch m["type"] {
297	case string(TypeBasicImageTemplateDistributorTypeManagedImage):
298		var itmid ImageTemplateManagedImageDistributor
299		err := json.Unmarshal(body, &itmid)
300		return itmid, err
301	case string(TypeBasicImageTemplateDistributorTypeSharedImage):
302		var itsid ImageTemplateSharedImageDistributor
303		err := json.Unmarshal(body, &itsid)
304		return itsid, err
305	case string(TypeBasicImageTemplateDistributorTypeVHD):
306		var itvd ImageTemplateVhdDistributor
307		err := json.Unmarshal(body, &itvd)
308		return itvd, err
309	default:
310		var itd ImageTemplateDistributor
311		err := json.Unmarshal(body, &itd)
312		return itd, err
313	}
314}
315func unmarshalBasicImageTemplateDistributorArray(body []byte) ([]BasicImageTemplateDistributor, error) {
316	var rawMessages []*json.RawMessage
317	err := json.Unmarshal(body, &rawMessages)
318	if err != nil {
319		return nil, err
320	}
321
322	itdArray := make([]BasicImageTemplateDistributor, len(rawMessages))
323
324	for index, rawMessage := range rawMessages {
325		itd, err := unmarshalBasicImageTemplateDistributor(*rawMessage)
326		if err != nil {
327			return nil, err
328		}
329		itdArray[index] = itd
330	}
331	return itdArray, nil
332}
333
334// MarshalJSON is the custom marshaler for ImageTemplateDistributor.
335func (itd ImageTemplateDistributor) MarshalJSON() ([]byte, error) {
336	itd.Type = TypeBasicImageTemplateDistributorTypeImageTemplateDistributor
337	objectMap := make(map[string]interface{})
338	if itd.RunOutputName != nil {
339		objectMap["runOutputName"] = itd.RunOutputName
340	}
341	if itd.ArtifactTags != nil {
342		objectMap["artifactTags"] = itd.ArtifactTags
343	}
344	if itd.Type != "" {
345		objectMap["type"] = itd.Type
346	}
347	return json.Marshal(objectMap)
348}
349
350// AsImageTemplateManagedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateDistributor.
351func (itd ImageTemplateDistributor) AsImageTemplateManagedImageDistributor() (*ImageTemplateManagedImageDistributor, bool) {
352	return nil, false
353}
354
355// AsImageTemplateSharedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateDistributor.
356func (itd ImageTemplateDistributor) AsImageTemplateSharedImageDistributor() (*ImageTemplateSharedImageDistributor, bool) {
357	return nil, false
358}
359
360// AsImageTemplateVhdDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateDistributor.
361func (itd ImageTemplateDistributor) AsImageTemplateVhdDistributor() (*ImageTemplateVhdDistributor, bool) {
362	return nil, false
363}
364
365// AsImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateDistributor.
366func (itd ImageTemplateDistributor) AsImageTemplateDistributor() (*ImageTemplateDistributor, bool) {
367	return &itd, true
368}
369
370// AsBasicImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateDistributor.
371func (itd ImageTemplateDistributor) AsBasicImageTemplateDistributor() (BasicImageTemplateDistributor, bool) {
372	return &itd, true
373}
374
375// ImageTemplateFileCustomizer uploads files to VMs (Linux, Windows). Corresponds to Packer file
376// provisioner
377type ImageTemplateFileCustomizer struct {
378	// SourceURI - The URI of the file to be uploaded for customizing the VM. It can be a github link, SAS URI for Azure Storage, etc
379	SourceURI *string `json:"sourceUri,omitempty"`
380	// Sha256Checksum - SHA256 checksum of the file provided in the sourceUri field above
381	Sha256Checksum *string `json:"sha256Checksum,omitempty"`
382	// Destination - The absolute path to a file (with nested directory structures already created) where the file (from sourceUri) will be uploaded to in the VM
383	Destination *string `json:"destination,omitempty"`
384	// Name - Friendly Name to provide context on what this customization step does
385	Name *string `json:"name,omitempty"`
386	// Type - Possible values include: 'TypeImageTemplateCustomizer', 'TypeShell', 'TypeWindowsRestart', 'TypePowerShell', 'TypeFile'
387	Type TypeBasicImageTemplateCustomizer `json:"type,omitempty"`
388}
389
390// MarshalJSON is the custom marshaler for ImageTemplateFileCustomizer.
391func (itfc ImageTemplateFileCustomizer) MarshalJSON() ([]byte, error) {
392	itfc.Type = TypeFile
393	objectMap := make(map[string]interface{})
394	if itfc.SourceURI != nil {
395		objectMap["sourceUri"] = itfc.SourceURI
396	}
397	if itfc.Sha256Checksum != nil {
398		objectMap["sha256Checksum"] = itfc.Sha256Checksum
399	}
400	if itfc.Destination != nil {
401		objectMap["destination"] = itfc.Destination
402	}
403	if itfc.Name != nil {
404		objectMap["name"] = itfc.Name
405	}
406	if itfc.Type != "" {
407		objectMap["type"] = itfc.Type
408	}
409	return json.Marshal(objectMap)
410}
411
412// AsImageTemplateShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
413func (itfc ImageTemplateFileCustomizer) AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool) {
414	return nil, false
415}
416
417// AsImageTemplateRestartCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
418func (itfc ImageTemplateFileCustomizer) AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool) {
419	return nil, false
420}
421
422// AsImageTemplatePowerShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
423func (itfc ImageTemplateFileCustomizer) AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool) {
424	return nil, false
425}
426
427// AsImageTemplateFileCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
428func (itfc ImageTemplateFileCustomizer) AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool) {
429	return &itfc, true
430}
431
432// AsImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
433func (itfc ImageTemplateFileCustomizer) AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool) {
434	return nil, false
435}
436
437// AsBasicImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateFileCustomizer.
438func (itfc ImageTemplateFileCustomizer) AsBasicImageTemplateCustomizer() (BasicImageTemplateCustomizer, bool) {
439	return &itfc, true
440}
441
442// ImageTemplateIdentity identity for the image template.
443type ImageTemplateIdentity struct {
444	// Type - The type of identity used for the image template. The type 'None' will remove any identities from the image template. Possible values include: 'UserAssigned', 'None'
445	Type ResourceIdentityType `json:"type,omitempty"`
446	// UserAssignedIdentities - The list of user identities associated with the image template. The user identity dictionary key references will be ARM resource ids in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'.
447	UserAssignedIdentities map[string]*ImageTemplateIdentityUserAssignedIdentitiesValue `json:"userAssignedIdentities"`
448}
449
450// MarshalJSON is the custom marshaler for ImageTemplateIdentity.
451func (iti ImageTemplateIdentity) MarshalJSON() ([]byte, error) {
452	objectMap := make(map[string]interface{})
453	if iti.Type != "" {
454		objectMap["type"] = iti.Type
455	}
456	if iti.UserAssignedIdentities != nil {
457		objectMap["userAssignedIdentities"] = iti.UserAssignedIdentities
458	}
459	return json.Marshal(objectMap)
460}
461
462// ImageTemplateIdentityUserAssignedIdentitiesValue ...
463type ImageTemplateIdentityUserAssignedIdentitiesValue struct {
464	// PrincipalID - READ-ONLY; The principal id of user assigned identity.
465	PrincipalID *string `json:"principalId,omitempty"`
466	// ClientID - READ-ONLY; The client id of user assigned identity.
467	ClientID *string `json:"clientId,omitempty"`
468}
469
470// MarshalJSON is the custom marshaler for ImageTemplateIdentityUserAssignedIdentitiesValue.
471func (itiAiv ImageTemplateIdentityUserAssignedIdentitiesValue) MarshalJSON() ([]byte, error) {
472	objectMap := make(map[string]interface{})
473	return json.Marshal(objectMap)
474}
475
476// ImageTemplateIsoSource describes an image source that is an installation ISO. Currently only supports
477// Red Hat Enterprise Linux 7.2-7.5 ISO's.
478type ImageTemplateIsoSource struct {
479	// SourceURI - URI to get the ISO image. This URI has to be accessible to the resource provider at the time of the image template creation.
480	SourceURI *string `json:"sourceUri,omitempty"`
481	// Sha256Checksum - SHA256 Checksum of the ISO image.
482	Sha256Checksum *string `json:"sha256Checksum,omitempty"`
483	// Type - Possible values include: 'TypeImageTemplateSource', 'TypeISO', 'TypePlatformImage', 'TypeManagedImage', 'TypeSharedImageVersion'
484	Type Type `json:"type,omitempty"`
485}
486
487// MarshalJSON is the custom marshaler for ImageTemplateIsoSource.
488func (itis ImageTemplateIsoSource) MarshalJSON() ([]byte, error) {
489	itis.Type = TypeISO
490	objectMap := make(map[string]interface{})
491	if itis.SourceURI != nil {
492		objectMap["sourceUri"] = itis.SourceURI
493	}
494	if itis.Sha256Checksum != nil {
495		objectMap["sha256Checksum"] = itis.Sha256Checksum
496	}
497	if itis.Type != "" {
498		objectMap["type"] = itis.Type
499	}
500	return json.Marshal(objectMap)
501}
502
503// AsImageTemplateIsoSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
504func (itis ImageTemplateIsoSource) AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool) {
505	return &itis, true
506}
507
508// AsImageTemplatePlatformImageSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
509func (itis ImageTemplateIsoSource) AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool) {
510	return nil, false
511}
512
513// AsImageTemplateManagedImageSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
514func (itis ImageTemplateIsoSource) AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool) {
515	return nil, false
516}
517
518// AsImageTemplateSharedImageVersionSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
519func (itis ImageTemplateIsoSource) AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool) {
520	return nil, false
521}
522
523// AsImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
524func (itis ImageTemplateIsoSource) AsImageTemplateSource() (*ImageTemplateSource, bool) {
525	return nil, false
526}
527
528// AsBasicImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateIsoSource.
529func (itis ImageTemplateIsoSource) AsBasicImageTemplateSource() (BasicImageTemplateSource, bool) {
530	return &itis, true
531}
532
533// ImageTemplateLastRunStatus describes the latest status of running an image template
534type ImageTemplateLastRunStatus struct {
535	// StartTime - Start time of the last run (UTC)
536	StartTime *date.Time `json:"startTime,omitempty"`
537	// EndTime - End time of the last run (UTC)
538	EndTime *date.Time `json:"endTime,omitempty"`
539	// RunState - State of the last run. Possible values include: 'RunStateRunning', 'RunStateSucceeded', 'RunStatePartiallySucceeded', 'RunStateFailed'
540	RunState RunState `json:"runState,omitempty"`
541	// RunSubState - Sub-state of the last run. Possible values include: 'Queued', 'Building', 'Customizing', 'Distributing'
542	RunSubState RunSubState `json:"runSubState,omitempty"`
543	// Message - Verbose information about the last run state
544	Message *string `json:"message,omitempty"`
545}
546
547// ImageTemplateListResult the result of List image templates operation
548type ImageTemplateListResult struct {
549	autorest.Response `json:"-"`
550	// Value - An array of image templates
551	Value *[]ImageTemplate `json:"value,omitempty"`
552	// NextLink - The continuation token.
553	NextLink *string `json:"nextLink,omitempty"`
554}
555
556// ImageTemplateListResultIterator provides access to a complete listing of ImageTemplate values.
557type ImageTemplateListResultIterator struct {
558	i    int
559	page ImageTemplateListResultPage
560}
561
562// NextWithContext advances to the next value.  If there was an error making
563// the request the iterator does not advance and the error is returned.
564func (iter *ImageTemplateListResultIterator) NextWithContext(ctx context.Context) (err error) {
565	if tracing.IsEnabled() {
566		ctx = tracing.StartSpan(ctx, fqdn+"/ImageTemplateListResultIterator.NextWithContext")
567		defer func() {
568			sc := -1
569			if iter.Response().Response.Response != nil {
570				sc = iter.Response().Response.Response.StatusCode
571			}
572			tracing.EndSpan(ctx, sc, err)
573		}()
574	}
575	iter.i++
576	if iter.i < len(iter.page.Values()) {
577		return nil
578	}
579	err = iter.page.NextWithContext(ctx)
580	if err != nil {
581		iter.i--
582		return err
583	}
584	iter.i = 0
585	return nil
586}
587
588// Next advances to the next value.  If there was an error making
589// the request the iterator does not advance and the error is returned.
590// Deprecated: Use NextWithContext() instead.
591func (iter *ImageTemplateListResultIterator) Next() error {
592	return iter.NextWithContext(context.Background())
593}
594
595// NotDone returns true if the enumeration should be started or is not yet complete.
596func (iter ImageTemplateListResultIterator) NotDone() bool {
597	return iter.page.NotDone() && iter.i < len(iter.page.Values())
598}
599
600// Response returns the raw server response from the last page request.
601func (iter ImageTemplateListResultIterator) Response() ImageTemplateListResult {
602	return iter.page.Response()
603}
604
605// Value returns the current value or a zero-initialized value if the
606// iterator has advanced beyond the end of the collection.
607func (iter ImageTemplateListResultIterator) Value() ImageTemplate {
608	if !iter.page.NotDone() {
609		return ImageTemplate{}
610	}
611	return iter.page.Values()[iter.i]
612}
613
614// Creates a new instance of the ImageTemplateListResultIterator type.
615func NewImageTemplateListResultIterator(page ImageTemplateListResultPage) ImageTemplateListResultIterator {
616	return ImageTemplateListResultIterator{page: page}
617}
618
619// IsEmpty returns true if the ListResult contains no values.
620func (itlr ImageTemplateListResult) IsEmpty() bool {
621	return itlr.Value == nil || len(*itlr.Value) == 0
622}
623
624// hasNextLink returns true if the NextLink is not empty.
625func (itlr ImageTemplateListResult) hasNextLink() bool {
626	return itlr.NextLink != nil && len(*itlr.NextLink) != 0
627}
628
629// imageTemplateListResultPreparer prepares a request to retrieve the next set of results.
630// It returns nil if no more results exist.
631func (itlr ImageTemplateListResult) imageTemplateListResultPreparer(ctx context.Context) (*http.Request, error) {
632	if !itlr.hasNextLink() {
633		return nil, nil
634	}
635	return autorest.Prepare((&http.Request{}).WithContext(ctx),
636		autorest.AsJSON(),
637		autorest.AsGet(),
638		autorest.WithBaseURL(to.String(itlr.NextLink)))
639}
640
641// ImageTemplateListResultPage contains a page of ImageTemplate values.
642type ImageTemplateListResultPage struct {
643	fn   func(context.Context, ImageTemplateListResult) (ImageTemplateListResult, error)
644	itlr ImageTemplateListResult
645}
646
647// NextWithContext advances to the next page of values.  If there was an error making
648// the request the page does not advance and the error is returned.
649func (page *ImageTemplateListResultPage) NextWithContext(ctx context.Context) (err error) {
650	if tracing.IsEnabled() {
651		ctx = tracing.StartSpan(ctx, fqdn+"/ImageTemplateListResultPage.NextWithContext")
652		defer func() {
653			sc := -1
654			if page.Response().Response.Response != nil {
655				sc = page.Response().Response.Response.StatusCode
656			}
657			tracing.EndSpan(ctx, sc, err)
658		}()
659	}
660	for {
661		next, err := page.fn(ctx, page.itlr)
662		if err != nil {
663			return err
664		}
665		page.itlr = next
666		if !next.hasNextLink() || !next.IsEmpty() {
667			break
668		}
669	}
670	return nil
671}
672
673// Next advances to the next page of values.  If there was an error making
674// the request the page does not advance and the error is returned.
675// Deprecated: Use NextWithContext() instead.
676func (page *ImageTemplateListResultPage) Next() error {
677	return page.NextWithContext(context.Background())
678}
679
680// NotDone returns true if the page enumeration should be started or is not yet complete.
681func (page ImageTemplateListResultPage) NotDone() bool {
682	return !page.itlr.IsEmpty()
683}
684
685// Response returns the raw server response from the last page request.
686func (page ImageTemplateListResultPage) Response() ImageTemplateListResult {
687	return page.itlr
688}
689
690// Values returns the slice of values for the current page or nil if there are no values.
691func (page ImageTemplateListResultPage) Values() []ImageTemplate {
692	if page.itlr.IsEmpty() {
693		return nil
694	}
695	return *page.itlr.Value
696}
697
698// Creates a new instance of the ImageTemplateListResultPage type.
699func NewImageTemplateListResultPage(cur ImageTemplateListResult, getNextPage func(context.Context, ImageTemplateListResult) (ImageTemplateListResult, error)) ImageTemplateListResultPage {
700	return ImageTemplateListResultPage{
701		fn:   getNextPage,
702		itlr: cur,
703	}
704}
705
706// ImageTemplateManagedImageDistributor distribute as a Managed Disk Image.
707type ImageTemplateManagedImageDistributor struct {
708	// ImageID - Resource Id of the Managed Disk Image
709	ImageID *string `json:"imageId,omitempty"`
710	// Location - Azure location for the image, should match if image already exists
711	Location *string `json:"location,omitempty"`
712	// RunOutputName - The name to be used for the associated RunOutput.
713	RunOutputName *string `json:"runOutputName,omitempty"`
714	// ArtifactTags - Tags that will be applied to the artifact once it has been created/updated by the distributor.
715	ArtifactTags map[string]*string `json:"artifactTags"`
716	// Type - Possible values include: 'TypeBasicImageTemplateDistributorTypeImageTemplateDistributor', 'TypeBasicImageTemplateDistributorTypeManagedImage', 'TypeBasicImageTemplateDistributorTypeSharedImage', 'TypeBasicImageTemplateDistributorTypeVHD'
717	Type TypeBasicImageTemplateDistributor `json:"type,omitempty"`
718}
719
720// MarshalJSON is the custom marshaler for ImageTemplateManagedImageDistributor.
721func (itmid ImageTemplateManagedImageDistributor) MarshalJSON() ([]byte, error) {
722	itmid.Type = TypeBasicImageTemplateDistributorTypeManagedImage
723	objectMap := make(map[string]interface{})
724	if itmid.ImageID != nil {
725		objectMap["imageId"] = itmid.ImageID
726	}
727	if itmid.Location != nil {
728		objectMap["location"] = itmid.Location
729	}
730	if itmid.RunOutputName != nil {
731		objectMap["runOutputName"] = itmid.RunOutputName
732	}
733	if itmid.ArtifactTags != nil {
734		objectMap["artifactTags"] = itmid.ArtifactTags
735	}
736	if itmid.Type != "" {
737		objectMap["type"] = itmid.Type
738	}
739	return json.Marshal(objectMap)
740}
741
742// AsImageTemplateManagedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateManagedImageDistributor.
743func (itmid ImageTemplateManagedImageDistributor) AsImageTemplateManagedImageDistributor() (*ImageTemplateManagedImageDistributor, bool) {
744	return &itmid, true
745}
746
747// AsImageTemplateSharedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateManagedImageDistributor.
748func (itmid ImageTemplateManagedImageDistributor) AsImageTemplateSharedImageDistributor() (*ImageTemplateSharedImageDistributor, bool) {
749	return nil, false
750}
751
752// AsImageTemplateVhdDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateManagedImageDistributor.
753func (itmid ImageTemplateManagedImageDistributor) AsImageTemplateVhdDistributor() (*ImageTemplateVhdDistributor, bool) {
754	return nil, false
755}
756
757// AsImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateManagedImageDistributor.
758func (itmid ImageTemplateManagedImageDistributor) AsImageTemplateDistributor() (*ImageTemplateDistributor, bool) {
759	return nil, false
760}
761
762// AsBasicImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateManagedImageDistributor.
763func (itmid ImageTemplateManagedImageDistributor) AsBasicImageTemplateDistributor() (BasicImageTemplateDistributor, bool) {
764	return &itmid, true
765}
766
767// ImageTemplateManagedImageSource describes an image source that is a managed image in customer
768// subscription.
769type ImageTemplateManagedImageSource struct {
770	// ImageID - ARM resource id of the managed image in customer subscription
771	ImageID *string `json:"imageId,omitempty"`
772	// Type - Possible values include: 'TypeImageTemplateSource', 'TypeISO', 'TypePlatformImage', 'TypeManagedImage', 'TypeSharedImageVersion'
773	Type Type `json:"type,omitempty"`
774}
775
776// MarshalJSON is the custom marshaler for ImageTemplateManagedImageSource.
777func (itmis ImageTemplateManagedImageSource) MarshalJSON() ([]byte, error) {
778	itmis.Type = TypeManagedImage
779	objectMap := make(map[string]interface{})
780	if itmis.ImageID != nil {
781		objectMap["imageId"] = itmis.ImageID
782	}
783	if itmis.Type != "" {
784		objectMap["type"] = itmis.Type
785	}
786	return json.Marshal(objectMap)
787}
788
789// AsImageTemplateIsoSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
790func (itmis ImageTemplateManagedImageSource) AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool) {
791	return nil, false
792}
793
794// AsImageTemplatePlatformImageSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
795func (itmis ImageTemplateManagedImageSource) AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool) {
796	return nil, false
797}
798
799// AsImageTemplateManagedImageSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
800func (itmis ImageTemplateManagedImageSource) AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool) {
801	return &itmis, true
802}
803
804// AsImageTemplateSharedImageVersionSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
805func (itmis ImageTemplateManagedImageSource) AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool) {
806	return nil, false
807}
808
809// AsImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
810func (itmis ImageTemplateManagedImageSource) AsImageTemplateSource() (*ImageTemplateSource, bool) {
811	return nil, false
812}
813
814// AsBasicImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateManagedImageSource.
815func (itmis ImageTemplateManagedImageSource) AsBasicImageTemplateSource() (BasicImageTemplateSource, bool) {
816	return &itmis, true
817}
818
819// ImageTemplatePlatformImageSource describes an image source from [Azure Gallery
820// Images](https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages).
821type ImageTemplatePlatformImageSource struct {
822	// Publisher - Image Publisher in [Azure Gallery Images](https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages).
823	Publisher *string `json:"publisher,omitempty"`
824	// Offer - Image offer from the [Azure Gallery Images](https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages).
825	Offer *string `json:"offer,omitempty"`
826	// Sku - Image sku from the [Azure Gallery Images](https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages).
827	Sku *string `json:"sku,omitempty"`
828	// Version - Image version from the [Azure Gallery Images](https://docs.microsoft.com/en-us/rest/api/compute/virtualmachineimages).
829	Version *string `json:"version,omitempty"`
830	// Type - Possible values include: 'TypeImageTemplateSource', 'TypeISO', 'TypePlatformImage', 'TypeManagedImage', 'TypeSharedImageVersion'
831	Type Type `json:"type,omitempty"`
832}
833
834// MarshalJSON is the custom marshaler for ImageTemplatePlatformImageSource.
835func (itpis ImageTemplatePlatformImageSource) MarshalJSON() ([]byte, error) {
836	itpis.Type = TypePlatformImage
837	objectMap := make(map[string]interface{})
838	if itpis.Publisher != nil {
839		objectMap["publisher"] = itpis.Publisher
840	}
841	if itpis.Offer != nil {
842		objectMap["offer"] = itpis.Offer
843	}
844	if itpis.Sku != nil {
845		objectMap["sku"] = itpis.Sku
846	}
847	if itpis.Version != nil {
848		objectMap["version"] = itpis.Version
849	}
850	if itpis.Type != "" {
851		objectMap["type"] = itpis.Type
852	}
853	return json.Marshal(objectMap)
854}
855
856// AsImageTemplateIsoSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
857func (itpis ImageTemplatePlatformImageSource) AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool) {
858	return nil, false
859}
860
861// AsImageTemplatePlatformImageSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
862func (itpis ImageTemplatePlatformImageSource) AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool) {
863	return &itpis, true
864}
865
866// AsImageTemplateManagedImageSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
867func (itpis ImageTemplatePlatformImageSource) AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool) {
868	return nil, false
869}
870
871// AsImageTemplateSharedImageVersionSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
872func (itpis ImageTemplatePlatformImageSource) AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool) {
873	return nil, false
874}
875
876// AsImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
877func (itpis ImageTemplatePlatformImageSource) AsImageTemplateSource() (*ImageTemplateSource, bool) {
878	return nil, false
879}
880
881// AsBasicImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplatePlatformImageSource.
882func (itpis ImageTemplatePlatformImageSource) AsBasicImageTemplateSource() (BasicImageTemplateSource, bool) {
883	return &itpis, true
884}
885
886// ImageTemplatePowerShellCustomizer runs the specified PowerShell on the VM (Windows). Corresponds to
887// Packer powershell provisioner. Exactly one of 'scriptUri' or 'inline' can be specified.
888type ImageTemplatePowerShellCustomizer struct {
889	// ScriptURI - URI of the PowerShell script to be run for customizing. It can be a github link, SAS URI for Azure Storage, etc
890	ScriptURI *string `json:"scriptUri,omitempty"`
891	// Sha256Checksum - SHA256 checksum of the power shell script provided in the scriptUri field above
892	Sha256Checksum *string `json:"sha256Checksum,omitempty"`
893	// Inline - Array of PowerShell commands to execute
894	Inline *[]string `json:"inline,omitempty"`
895	// RunElevated - If specified, the PowerShell script will be run with elevated privileges
896	RunElevated *bool `json:"runElevated,omitempty"`
897	// ValidExitCodes - Valid exit codes for the PowerShell script. [Default: 0]
898	ValidExitCodes *[]int32 `json:"validExitCodes,omitempty"`
899	// Name - Friendly Name to provide context on what this customization step does
900	Name *string `json:"name,omitempty"`
901	// Type - Possible values include: 'TypeImageTemplateCustomizer', 'TypeShell', 'TypeWindowsRestart', 'TypePowerShell', 'TypeFile'
902	Type TypeBasicImageTemplateCustomizer `json:"type,omitempty"`
903}
904
905// MarshalJSON is the custom marshaler for ImageTemplatePowerShellCustomizer.
906func (itpsc ImageTemplatePowerShellCustomizer) MarshalJSON() ([]byte, error) {
907	itpsc.Type = TypePowerShell
908	objectMap := make(map[string]interface{})
909	if itpsc.ScriptURI != nil {
910		objectMap["scriptUri"] = itpsc.ScriptURI
911	}
912	if itpsc.Sha256Checksum != nil {
913		objectMap["sha256Checksum"] = itpsc.Sha256Checksum
914	}
915	if itpsc.Inline != nil {
916		objectMap["inline"] = itpsc.Inline
917	}
918	if itpsc.RunElevated != nil {
919		objectMap["runElevated"] = itpsc.RunElevated
920	}
921	if itpsc.ValidExitCodes != nil {
922		objectMap["validExitCodes"] = itpsc.ValidExitCodes
923	}
924	if itpsc.Name != nil {
925		objectMap["name"] = itpsc.Name
926	}
927	if itpsc.Type != "" {
928		objectMap["type"] = itpsc.Type
929	}
930	return json.Marshal(objectMap)
931}
932
933// AsImageTemplateShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
934func (itpsc ImageTemplatePowerShellCustomizer) AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool) {
935	return nil, false
936}
937
938// AsImageTemplateRestartCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
939func (itpsc ImageTemplatePowerShellCustomizer) AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool) {
940	return nil, false
941}
942
943// AsImageTemplatePowerShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
944func (itpsc ImageTemplatePowerShellCustomizer) AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool) {
945	return &itpsc, true
946}
947
948// AsImageTemplateFileCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
949func (itpsc ImageTemplatePowerShellCustomizer) AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool) {
950	return nil, false
951}
952
953// AsImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
954func (itpsc ImageTemplatePowerShellCustomizer) AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool) {
955	return nil, false
956}
957
958// AsBasicImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplatePowerShellCustomizer.
959func (itpsc ImageTemplatePowerShellCustomizer) AsBasicImageTemplateCustomizer() (BasicImageTemplateCustomizer, bool) {
960	return &itpsc, true
961}
962
963// ImageTemplateProperties describes the properties of an image template
964type ImageTemplateProperties struct {
965	// Source - Specifies the properties used to describe the source image.
966	Source BasicImageTemplateSource `json:"source,omitempty"`
967	// Customize - Specifies the properties used to describe the customization steps of the image, like Image source etc
968	Customize *[]BasicImageTemplateCustomizer `json:"customize,omitempty"`
969	// Distribute - The distribution targets where the image output needs to go to.
970	Distribute *[]BasicImageTemplateDistributor `json:"distribute,omitempty"`
971	// ProvisioningState - READ-ONLY; Provisioning state of the resource. Possible values include: 'Creating', 'Updating', 'Succeeded', 'Failed', 'Deleting'
972	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
973	// ProvisioningError - READ-ONLY; Provisioning error, if any
974	ProvisioningError *ProvisioningError `json:"provisioningError,omitempty"`
975	// LastRunStatus - READ-ONLY; State of 'run' that is currently executing or was last executed.
976	LastRunStatus *ImageTemplateLastRunStatus `json:"lastRunStatus,omitempty"`
977	// BuildTimeoutInMinutes - Maximum duration to wait while building the image template. Omit or specify 0 to use the default (4 hours).
978	BuildTimeoutInMinutes *int32 `json:"buildTimeoutInMinutes,omitempty"`
979	// VMProfile - Describes how virtual machine is set up to build images
980	VMProfile *ImageTemplateVMProfile `json:"vmProfile,omitempty"`
981}
982
983// MarshalJSON is the custom marshaler for ImageTemplateProperties.
984func (itp ImageTemplateProperties) MarshalJSON() ([]byte, error) {
985	objectMap := make(map[string]interface{})
986	objectMap["source"] = itp.Source
987	if itp.Customize != nil {
988		objectMap["customize"] = itp.Customize
989	}
990	if itp.Distribute != nil {
991		objectMap["distribute"] = itp.Distribute
992	}
993	if itp.BuildTimeoutInMinutes != nil {
994		objectMap["buildTimeoutInMinutes"] = itp.BuildTimeoutInMinutes
995	}
996	if itp.VMProfile != nil {
997		objectMap["vmProfile"] = itp.VMProfile
998	}
999	return json.Marshal(objectMap)
1000}
1001
1002// UnmarshalJSON is the custom unmarshaler for ImageTemplateProperties struct.
1003func (itp *ImageTemplateProperties) UnmarshalJSON(body []byte) error {
1004	var m map[string]*json.RawMessage
1005	err := json.Unmarshal(body, &m)
1006	if err != nil {
1007		return err
1008	}
1009	for k, v := range m {
1010		switch k {
1011		case "source":
1012			if v != nil {
1013				source, err := unmarshalBasicImageTemplateSource(*v)
1014				if err != nil {
1015					return err
1016				}
1017				itp.Source = source
1018			}
1019		case "customize":
1020			if v != nil {
1021				customize, err := unmarshalBasicImageTemplateCustomizerArray(*v)
1022				if err != nil {
1023					return err
1024				}
1025				itp.Customize = &customize
1026			}
1027		case "distribute":
1028			if v != nil {
1029				distribute, err := unmarshalBasicImageTemplateDistributorArray(*v)
1030				if err != nil {
1031					return err
1032				}
1033				itp.Distribute = &distribute
1034			}
1035		case "provisioningState":
1036			if v != nil {
1037				var provisioningState ProvisioningState
1038				err = json.Unmarshal(*v, &provisioningState)
1039				if err != nil {
1040					return err
1041				}
1042				itp.ProvisioningState = provisioningState
1043			}
1044		case "provisioningError":
1045			if v != nil {
1046				var provisioningError ProvisioningError
1047				err = json.Unmarshal(*v, &provisioningError)
1048				if err != nil {
1049					return err
1050				}
1051				itp.ProvisioningError = &provisioningError
1052			}
1053		case "lastRunStatus":
1054			if v != nil {
1055				var lastRunStatus ImageTemplateLastRunStatus
1056				err = json.Unmarshal(*v, &lastRunStatus)
1057				if err != nil {
1058					return err
1059				}
1060				itp.LastRunStatus = &lastRunStatus
1061			}
1062		case "buildTimeoutInMinutes":
1063			if v != nil {
1064				var buildTimeoutInMinutes int32
1065				err = json.Unmarshal(*v, &buildTimeoutInMinutes)
1066				if err != nil {
1067					return err
1068				}
1069				itp.BuildTimeoutInMinutes = &buildTimeoutInMinutes
1070			}
1071		case "vmProfile":
1072			if v != nil {
1073				var VMProfile ImageTemplateVMProfile
1074				err = json.Unmarshal(*v, &VMProfile)
1075				if err != nil {
1076					return err
1077				}
1078				itp.VMProfile = &VMProfile
1079			}
1080		}
1081	}
1082
1083	return nil
1084}
1085
1086// ImageTemplateRestartCustomizer reboots a VM and waits for it to come back online (Windows). Corresponds
1087// to Packer windows-restart provisioner
1088type ImageTemplateRestartCustomizer struct {
1089	// RestartCommand - Command to execute the restart [Default: 'shutdown /r /f /t 0 /c "packer restart"']
1090	RestartCommand *string `json:"restartCommand,omitempty"`
1091	// RestartCheckCommand - Command to check if restart succeeded [Default: '']
1092	RestartCheckCommand *string `json:"restartCheckCommand,omitempty"`
1093	// RestartTimeout - Restart timeout specified as a string of magnitude and unit, e.g. '5m' (5 minutes) or '2h' (2 hours) [Default: '5m']
1094	RestartTimeout *string `json:"restartTimeout,omitempty"`
1095	// Name - Friendly Name to provide context on what this customization step does
1096	Name *string `json:"name,omitempty"`
1097	// Type - Possible values include: 'TypeImageTemplateCustomizer', 'TypeShell', 'TypeWindowsRestart', 'TypePowerShell', 'TypeFile'
1098	Type TypeBasicImageTemplateCustomizer `json:"type,omitempty"`
1099}
1100
1101// MarshalJSON is the custom marshaler for ImageTemplateRestartCustomizer.
1102func (itrc ImageTemplateRestartCustomizer) MarshalJSON() ([]byte, error) {
1103	itrc.Type = TypeWindowsRestart
1104	objectMap := make(map[string]interface{})
1105	if itrc.RestartCommand != nil {
1106		objectMap["restartCommand"] = itrc.RestartCommand
1107	}
1108	if itrc.RestartCheckCommand != nil {
1109		objectMap["restartCheckCommand"] = itrc.RestartCheckCommand
1110	}
1111	if itrc.RestartTimeout != nil {
1112		objectMap["restartTimeout"] = itrc.RestartTimeout
1113	}
1114	if itrc.Name != nil {
1115		objectMap["name"] = itrc.Name
1116	}
1117	if itrc.Type != "" {
1118		objectMap["type"] = itrc.Type
1119	}
1120	return json.Marshal(objectMap)
1121}
1122
1123// AsImageTemplateShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1124func (itrc ImageTemplateRestartCustomizer) AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool) {
1125	return nil, false
1126}
1127
1128// AsImageTemplateRestartCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1129func (itrc ImageTemplateRestartCustomizer) AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool) {
1130	return &itrc, true
1131}
1132
1133// AsImageTemplatePowerShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1134func (itrc ImageTemplateRestartCustomizer) AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool) {
1135	return nil, false
1136}
1137
1138// AsImageTemplateFileCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1139func (itrc ImageTemplateRestartCustomizer) AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool) {
1140	return nil, false
1141}
1142
1143// AsImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1144func (itrc ImageTemplateRestartCustomizer) AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool) {
1145	return nil, false
1146}
1147
1148// AsBasicImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateRestartCustomizer.
1149func (itrc ImageTemplateRestartCustomizer) AsBasicImageTemplateCustomizer() (BasicImageTemplateCustomizer, bool) {
1150	return &itrc, true
1151}
1152
1153// ImageTemplateSharedImageDistributor distribute via Shared Image Gallery.
1154type ImageTemplateSharedImageDistributor struct {
1155	// GalleryImageID - Resource Id of the Shared Image Gallery image
1156	GalleryImageID *string `json:"galleryImageId,omitempty"`
1157	// ReplicationRegions - A list of regions that the image will be replicated to
1158	ReplicationRegions *[]string `json:"replicationRegions,omitempty"`
1159	// RunOutputName - The name to be used for the associated RunOutput.
1160	RunOutputName *string `json:"runOutputName,omitempty"`
1161	// ArtifactTags - Tags that will be applied to the artifact once it has been created/updated by the distributor.
1162	ArtifactTags map[string]*string `json:"artifactTags"`
1163	// Type - Possible values include: 'TypeBasicImageTemplateDistributorTypeImageTemplateDistributor', 'TypeBasicImageTemplateDistributorTypeManagedImage', 'TypeBasicImageTemplateDistributorTypeSharedImage', 'TypeBasicImageTemplateDistributorTypeVHD'
1164	Type TypeBasicImageTemplateDistributor `json:"type,omitempty"`
1165}
1166
1167// MarshalJSON is the custom marshaler for ImageTemplateSharedImageDistributor.
1168func (itsid ImageTemplateSharedImageDistributor) MarshalJSON() ([]byte, error) {
1169	itsid.Type = TypeBasicImageTemplateDistributorTypeSharedImage
1170	objectMap := make(map[string]interface{})
1171	if itsid.GalleryImageID != nil {
1172		objectMap["galleryImageId"] = itsid.GalleryImageID
1173	}
1174	if itsid.ReplicationRegions != nil {
1175		objectMap["replicationRegions"] = itsid.ReplicationRegions
1176	}
1177	if itsid.RunOutputName != nil {
1178		objectMap["runOutputName"] = itsid.RunOutputName
1179	}
1180	if itsid.ArtifactTags != nil {
1181		objectMap["artifactTags"] = itsid.ArtifactTags
1182	}
1183	if itsid.Type != "" {
1184		objectMap["type"] = itsid.Type
1185	}
1186	return json.Marshal(objectMap)
1187}
1188
1189// AsImageTemplateManagedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateSharedImageDistributor.
1190func (itsid ImageTemplateSharedImageDistributor) AsImageTemplateManagedImageDistributor() (*ImageTemplateManagedImageDistributor, bool) {
1191	return nil, false
1192}
1193
1194// AsImageTemplateSharedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateSharedImageDistributor.
1195func (itsid ImageTemplateSharedImageDistributor) AsImageTemplateSharedImageDistributor() (*ImageTemplateSharedImageDistributor, bool) {
1196	return &itsid, true
1197}
1198
1199// AsImageTemplateVhdDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateSharedImageDistributor.
1200func (itsid ImageTemplateSharedImageDistributor) AsImageTemplateVhdDistributor() (*ImageTemplateVhdDistributor, bool) {
1201	return nil, false
1202}
1203
1204// AsImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateSharedImageDistributor.
1205func (itsid ImageTemplateSharedImageDistributor) AsImageTemplateDistributor() (*ImageTemplateDistributor, bool) {
1206	return nil, false
1207}
1208
1209// AsBasicImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateSharedImageDistributor.
1210func (itsid ImageTemplateSharedImageDistributor) AsBasicImageTemplateDistributor() (BasicImageTemplateDistributor, bool) {
1211	return &itsid, true
1212}
1213
1214// ImageTemplateSharedImageVersionSource describes an image source that is an image version in a shared
1215// image gallery.
1216type ImageTemplateSharedImageVersionSource struct {
1217	// ImageVersionID - ARM resource id of the image version in the shared image gallery
1218	ImageVersionID *string `json:"imageVersionId,omitempty"`
1219	// Type - Possible values include: 'TypeImageTemplateSource', 'TypeISO', 'TypePlatformImage', 'TypeManagedImage', 'TypeSharedImageVersion'
1220	Type Type `json:"type,omitempty"`
1221}
1222
1223// MarshalJSON is the custom marshaler for ImageTemplateSharedImageVersionSource.
1224func (itsivs ImageTemplateSharedImageVersionSource) MarshalJSON() ([]byte, error) {
1225	itsivs.Type = TypeSharedImageVersion
1226	objectMap := make(map[string]interface{})
1227	if itsivs.ImageVersionID != nil {
1228		objectMap["imageVersionId"] = itsivs.ImageVersionID
1229	}
1230	if itsivs.Type != "" {
1231		objectMap["type"] = itsivs.Type
1232	}
1233	return json.Marshal(objectMap)
1234}
1235
1236// AsImageTemplateIsoSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1237func (itsivs ImageTemplateSharedImageVersionSource) AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool) {
1238	return nil, false
1239}
1240
1241// AsImageTemplatePlatformImageSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1242func (itsivs ImageTemplateSharedImageVersionSource) AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool) {
1243	return nil, false
1244}
1245
1246// AsImageTemplateManagedImageSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1247func (itsivs ImageTemplateSharedImageVersionSource) AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool) {
1248	return nil, false
1249}
1250
1251// AsImageTemplateSharedImageVersionSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1252func (itsivs ImageTemplateSharedImageVersionSource) AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool) {
1253	return &itsivs, true
1254}
1255
1256// AsImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1257func (itsivs ImageTemplateSharedImageVersionSource) AsImageTemplateSource() (*ImageTemplateSource, bool) {
1258	return nil, false
1259}
1260
1261// AsBasicImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateSharedImageVersionSource.
1262func (itsivs ImageTemplateSharedImageVersionSource) AsBasicImageTemplateSource() (BasicImageTemplateSource, bool) {
1263	return &itsivs, true
1264}
1265
1266// ImageTemplateShellCustomizer runs a shell script during the customization phase (Linux). Corresponds to
1267// Packer shell provisioner. Exactly one of 'scriptUri' or 'inline' can be specified.
1268type ImageTemplateShellCustomizer struct {
1269	// ScriptURI - URI of the shell script to be run for customizing. It can be a github link, SAS URI for Azure Storage, etc
1270	ScriptURI *string `json:"scriptUri,omitempty"`
1271	// Sha256Checksum - SHA256 checksum of the shell script provided in the scriptUri field
1272	Sha256Checksum *string `json:"sha256Checksum,omitempty"`
1273	// Inline - Array of shell commands to execute
1274	Inline *[]string `json:"inline,omitempty"`
1275	// Name - Friendly Name to provide context on what this customization step does
1276	Name *string `json:"name,omitempty"`
1277	// Type - Possible values include: 'TypeImageTemplateCustomizer', 'TypeShell', 'TypeWindowsRestart', 'TypePowerShell', 'TypeFile'
1278	Type TypeBasicImageTemplateCustomizer `json:"type,omitempty"`
1279}
1280
1281// MarshalJSON is the custom marshaler for ImageTemplateShellCustomizer.
1282func (itsc ImageTemplateShellCustomizer) MarshalJSON() ([]byte, error) {
1283	itsc.Type = TypeShell
1284	objectMap := make(map[string]interface{})
1285	if itsc.ScriptURI != nil {
1286		objectMap["scriptUri"] = itsc.ScriptURI
1287	}
1288	if itsc.Sha256Checksum != nil {
1289		objectMap["sha256Checksum"] = itsc.Sha256Checksum
1290	}
1291	if itsc.Inline != nil {
1292		objectMap["inline"] = itsc.Inline
1293	}
1294	if itsc.Name != nil {
1295		objectMap["name"] = itsc.Name
1296	}
1297	if itsc.Type != "" {
1298		objectMap["type"] = itsc.Type
1299	}
1300	return json.Marshal(objectMap)
1301}
1302
1303// AsImageTemplateShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1304func (itsc ImageTemplateShellCustomizer) AsImageTemplateShellCustomizer() (*ImageTemplateShellCustomizer, bool) {
1305	return &itsc, true
1306}
1307
1308// AsImageTemplateRestartCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1309func (itsc ImageTemplateShellCustomizer) AsImageTemplateRestartCustomizer() (*ImageTemplateRestartCustomizer, bool) {
1310	return nil, false
1311}
1312
1313// AsImageTemplatePowerShellCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1314func (itsc ImageTemplateShellCustomizer) AsImageTemplatePowerShellCustomizer() (*ImageTemplatePowerShellCustomizer, bool) {
1315	return nil, false
1316}
1317
1318// AsImageTemplateFileCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1319func (itsc ImageTemplateShellCustomizer) AsImageTemplateFileCustomizer() (*ImageTemplateFileCustomizer, bool) {
1320	return nil, false
1321}
1322
1323// AsImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1324func (itsc ImageTemplateShellCustomizer) AsImageTemplateCustomizer() (*ImageTemplateCustomizer, bool) {
1325	return nil, false
1326}
1327
1328// AsBasicImageTemplateCustomizer is the BasicImageTemplateCustomizer implementation for ImageTemplateShellCustomizer.
1329func (itsc ImageTemplateShellCustomizer) AsBasicImageTemplateCustomizer() (BasicImageTemplateCustomizer, bool) {
1330	return &itsc, true
1331}
1332
1333// BasicImageTemplateSource describes a virtual machine image source for building, customizing and distributing
1334type BasicImageTemplateSource interface {
1335	AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool)
1336	AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool)
1337	AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool)
1338	AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool)
1339	AsImageTemplateSource() (*ImageTemplateSource, bool)
1340}
1341
1342// ImageTemplateSource describes a virtual machine image source for building, customizing and distributing
1343type ImageTemplateSource struct {
1344	// Type - Possible values include: 'TypeImageTemplateSource', 'TypeISO', 'TypePlatformImage', 'TypeManagedImage', 'TypeSharedImageVersion'
1345	Type Type `json:"type,omitempty"`
1346}
1347
1348func unmarshalBasicImageTemplateSource(body []byte) (BasicImageTemplateSource, error) {
1349	var m map[string]interface{}
1350	err := json.Unmarshal(body, &m)
1351	if err != nil {
1352		return nil, err
1353	}
1354
1355	switch m["type"] {
1356	case string(TypeISO):
1357		var itis ImageTemplateIsoSource
1358		err := json.Unmarshal(body, &itis)
1359		return itis, err
1360	case string(TypePlatformImage):
1361		var itpis ImageTemplatePlatformImageSource
1362		err := json.Unmarshal(body, &itpis)
1363		return itpis, err
1364	case string(TypeManagedImage):
1365		var itmis ImageTemplateManagedImageSource
1366		err := json.Unmarshal(body, &itmis)
1367		return itmis, err
1368	case string(TypeSharedImageVersion):
1369		var itsivs ImageTemplateSharedImageVersionSource
1370		err := json.Unmarshal(body, &itsivs)
1371		return itsivs, err
1372	default:
1373		var its ImageTemplateSource
1374		err := json.Unmarshal(body, &its)
1375		return its, err
1376	}
1377}
1378func unmarshalBasicImageTemplateSourceArray(body []byte) ([]BasicImageTemplateSource, error) {
1379	var rawMessages []*json.RawMessage
1380	err := json.Unmarshal(body, &rawMessages)
1381	if err != nil {
1382		return nil, err
1383	}
1384
1385	itsArray := make([]BasicImageTemplateSource, len(rawMessages))
1386
1387	for index, rawMessage := range rawMessages {
1388		its, err := unmarshalBasicImageTemplateSource(*rawMessage)
1389		if err != nil {
1390			return nil, err
1391		}
1392		itsArray[index] = its
1393	}
1394	return itsArray, nil
1395}
1396
1397// MarshalJSON is the custom marshaler for ImageTemplateSource.
1398func (its ImageTemplateSource) MarshalJSON() ([]byte, error) {
1399	its.Type = TypeImageTemplateSource
1400	objectMap := make(map[string]interface{})
1401	if its.Type != "" {
1402		objectMap["type"] = its.Type
1403	}
1404	return json.Marshal(objectMap)
1405}
1406
1407// AsImageTemplateIsoSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1408func (its ImageTemplateSource) AsImageTemplateIsoSource() (*ImageTemplateIsoSource, bool) {
1409	return nil, false
1410}
1411
1412// AsImageTemplatePlatformImageSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1413func (its ImageTemplateSource) AsImageTemplatePlatformImageSource() (*ImageTemplatePlatformImageSource, bool) {
1414	return nil, false
1415}
1416
1417// AsImageTemplateManagedImageSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1418func (its ImageTemplateSource) AsImageTemplateManagedImageSource() (*ImageTemplateManagedImageSource, bool) {
1419	return nil, false
1420}
1421
1422// AsImageTemplateSharedImageVersionSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1423func (its ImageTemplateSource) AsImageTemplateSharedImageVersionSource() (*ImageTemplateSharedImageVersionSource, bool) {
1424	return nil, false
1425}
1426
1427// AsImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1428func (its ImageTemplateSource) AsImageTemplateSource() (*ImageTemplateSource, bool) {
1429	return &its, true
1430}
1431
1432// AsBasicImageTemplateSource is the BasicImageTemplateSource implementation for ImageTemplateSource.
1433func (its ImageTemplateSource) AsBasicImageTemplateSource() (BasicImageTemplateSource, bool) {
1434	return &its, true
1435}
1436
1437// ImageTemplateUpdateParameters parameters for updating an image template.
1438type ImageTemplateUpdateParameters struct {
1439	// Identity - The identity of the image template, if configured.
1440	Identity *ImageTemplateIdentity `json:"identity,omitempty"`
1441	// Tags - The user-specified tags associated with the image template.
1442	Tags map[string]*string `json:"tags"`
1443}
1444
1445// MarshalJSON is the custom marshaler for ImageTemplateUpdateParameters.
1446func (itup ImageTemplateUpdateParameters) MarshalJSON() ([]byte, error) {
1447	objectMap := make(map[string]interface{})
1448	if itup.Identity != nil {
1449		objectMap["identity"] = itup.Identity
1450	}
1451	if itup.Tags != nil {
1452		objectMap["tags"] = itup.Tags
1453	}
1454	return json.Marshal(objectMap)
1455}
1456
1457// ImageTemplateVhdDistributor distribute via VHD in a storage account.
1458type ImageTemplateVhdDistributor struct {
1459	// RunOutputName - The name to be used for the associated RunOutput.
1460	RunOutputName *string `json:"runOutputName,omitempty"`
1461	// ArtifactTags - Tags that will be applied to the artifact once it has been created/updated by the distributor.
1462	ArtifactTags map[string]*string `json:"artifactTags"`
1463	// Type - Possible values include: 'TypeBasicImageTemplateDistributorTypeImageTemplateDistributor', 'TypeBasicImageTemplateDistributorTypeManagedImage', 'TypeBasicImageTemplateDistributorTypeSharedImage', 'TypeBasicImageTemplateDistributorTypeVHD'
1464	Type TypeBasicImageTemplateDistributor `json:"type,omitempty"`
1465}
1466
1467// MarshalJSON is the custom marshaler for ImageTemplateVhdDistributor.
1468func (itvd ImageTemplateVhdDistributor) MarshalJSON() ([]byte, error) {
1469	itvd.Type = TypeBasicImageTemplateDistributorTypeVHD
1470	objectMap := make(map[string]interface{})
1471	if itvd.RunOutputName != nil {
1472		objectMap["runOutputName"] = itvd.RunOutputName
1473	}
1474	if itvd.ArtifactTags != nil {
1475		objectMap["artifactTags"] = itvd.ArtifactTags
1476	}
1477	if itvd.Type != "" {
1478		objectMap["type"] = itvd.Type
1479	}
1480	return json.Marshal(objectMap)
1481}
1482
1483// AsImageTemplateManagedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateVhdDistributor.
1484func (itvd ImageTemplateVhdDistributor) AsImageTemplateManagedImageDistributor() (*ImageTemplateManagedImageDistributor, bool) {
1485	return nil, false
1486}
1487
1488// AsImageTemplateSharedImageDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateVhdDistributor.
1489func (itvd ImageTemplateVhdDistributor) AsImageTemplateSharedImageDistributor() (*ImageTemplateSharedImageDistributor, bool) {
1490	return nil, false
1491}
1492
1493// AsImageTemplateVhdDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateVhdDistributor.
1494func (itvd ImageTemplateVhdDistributor) AsImageTemplateVhdDistributor() (*ImageTemplateVhdDistributor, bool) {
1495	return &itvd, true
1496}
1497
1498// AsImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateVhdDistributor.
1499func (itvd ImageTemplateVhdDistributor) AsImageTemplateDistributor() (*ImageTemplateDistributor, bool) {
1500	return nil, false
1501}
1502
1503// AsBasicImageTemplateDistributor is the BasicImageTemplateDistributor implementation for ImageTemplateVhdDistributor.
1504func (itvd ImageTemplateVhdDistributor) AsBasicImageTemplateDistributor() (BasicImageTemplateDistributor, bool) {
1505	return &itvd, true
1506}
1507
1508// ImageTemplateVMProfile describes the virtual machine used to build, customize and capture images
1509type ImageTemplateVMProfile struct {
1510	// VMSize - Size of the virtual machine used to build, customize and capture images. Omit or specify empty string to use the default (Standard_D1_v2).
1511	VMSize *string `json:"vmSize,omitempty"`
1512}
1513
1514// InnerError inner error details.
1515type InnerError struct {
1516	// ExceptionType - The exception type.
1517	ExceptionType *string `json:"exceptionType,omitempty"`
1518	// ErrorDetail - The internal error message or exception dump.
1519	ErrorDetail *string `json:"errorDetail,omitempty"`
1520}
1521
1522// Operation ...
1523type Operation struct {
1524	// Name - This is of the format {provider}/{resource}/{operation}
1525	Name       *string           `json:"name,omitempty"`
1526	Display    *OperationDisplay `json:"display,omitempty"`
1527	Origin     *string           `json:"origin,omitempty"`
1528	Properties interface{}       `json:"properties,omitempty"`
1529}
1530
1531// OperationDisplay ...
1532type OperationDisplay struct {
1533	Provider *string `json:"provider,omitempty"`
1534	// Operation - For example: read, write, delete, or listKeys/action
1535	Operation   *string `json:"operation,omitempty"`
1536	Resource    *string `json:"resource,omitempty"`
1537	Description *string `json:"description,omitempty"`
1538}
1539
1540// OperationListResult ...
1541type OperationListResult struct {
1542	autorest.Response `json:"-"`
1543	Value             *[]Operation `json:"value,omitempty"`
1544	NextLink          *string      `json:"nextLink,omitempty"`
1545}
1546
1547// OperationListResultIterator provides access to a complete listing of Operation values.
1548type OperationListResultIterator struct {
1549	i    int
1550	page OperationListResultPage
1551}
1552
1553// NextWithContext advances to the next value.  If there was an error making
1554// the request the iterator does not advance and the error is returned.
1555func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
1556	if tracing.IsEnabled() {
1557		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
1558		defer func() {
1559			sc := -1
1560			if iter.Response().Response.Response != nil {
1561				sc = iter.Response().Response.Response.StatusCode
1562			}
1563			tracing.EndSpan(ctx, sc, err)
1564		}()
1565	}
1566	iter.i++
1567	if iter.i < len(iter.page.Values()) {
1568		return nil
1569	}
1570	err = iter.page.NextWithContext(ctx)
1571	if err != nil {
1572		iter.i--
1573		return err
1574	}
1575	iter.i = 0
1576	return nil
1577}
1578
1579// Next advances to the next value.  If there was an error making
1580// the request the iterator does not advance and the error is returned.
1581// Deprecated: Use NextWithContext() instead.
1582func (iter *OperationListResultIterator) Next() error {
1583	return iter.NextWithContext(context.Background())
1584}
1585
1586// NotDone returns true if the enumeration should be started or is not yet complete.
1587func (iter OperationListResultIterator) NotDone() bool {
1588	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1589}
1590
1591// Response returns the raw server response from the last page request.
1592func (iter OperationListResultIterator) Response() OperationListResult {
1593	return iter.page.Response()
1594}
1595
1596// Value returns the current value or a zero-initialized value if the
1597// iterator has advanced beyond the end of the collection.
1598func (iter OperationListResultIterator) Value() Operation {
1599	if !iter.page.NotDone() {
1600		return Operation{}
1601	}
1602	return iter.page.Values()[iter.i]
1603}
1604
1605// Creates a new instance of the OperationListResultIterator type.
1606func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
1607	return OperationListResultIterator{page: page}
1608}
1609
1610// IsEmpty returns true if the ListResult contains no values.
1611func (olr OperationListResult) IsEmpty() bool {
1612	return olr.Value == nil || len(*olr.Value) == 0
1613}
1614
1615// hasNextLink returns true if the NextLink is not empty.
1616func (olr OperationListResult) hasNextLink() bool {
1617	return olr.NextLink != nil && len(*olr.NextLink) != 0
1618}
1619
1620// operationListResultPreparer prepares a request to retrieve the next set of results.
1621// It returns nil if no more results exist.
1622func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
1623	if !olr.hasNextLink() {
1624		return nil, nil
1625	}
1626	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1627		autorest.AsJSON(),
1628		autorest.AsGet(),
1629		autorest.WithBaseURL(to.String(olr.NextLink)))
1630}
1631
1632// OperationListResultPage contains a page of Operation values.
1633type OperationListResultPage struct {
1634	fn  func(context.Context, OperationListResult) (OperationListResult, error)
1635	olr OperationListResult
1636}
1637
1638// NextWithContext advances to the next page of values.  If there was an error making
1639// the request the page does not advance and the error is returned.
1640func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
1641	if tracing.IsEnabled() {
1642		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
1643		defer func() {
1644			sc := -1
1645			if page.Response().Response.Response != nil {
1646				sc = page.Response().Response.Response.StatusCode
1647			}
1648			tracing.EndSpan(ctx, sc, err)
1649		}()
1650	}
1651	for {
1652		next, err := page.fn(ctx, page.olr)
1653		if err != nil {
1654			return err
1655		}
1656		page.olr = next
1657		if !next.hasNextLink() || !next.IsEmpty() {
1658			break
1659		}
1660	}
1661	return nil
1662}
1663
1664// Next advances to the next page of values.  If there was an error making
1665// the request the page does not advance and the error is returned.
1666// Deprecated: Use NextWithContext() instead.
1667func (page *OperationListResultPage) Next() error {
1668	return page.NextWithContext(context.Background())
1669}
1670
1671// NotDone returns true if the page enumeration should be started or is not yet complete.
1672func (page OperationListResultPage) NotDone() bool {
1673	return !page.olr.IsEmpty()
1674}
1675
1676// Response returns the raw server response from the last page request.
1677func (page OperationListResultPage) Response() OperationListResult {
1678	return page.olr
1679}
1680
1681// Values returns the slice of values for the current page or nil if there are no values.
1682func (page OperationListResultPage) Values() []Operation {
1683	if page.olr.IsEmpty() {
1684		return nil
1685	}
1686	return *page.olr.Value
1687}
1688
1689// Creates a new instance of the OperationListResultPage type.
1690func NewOperationListResultPage(cur OperationListResult, getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
1691	return OperationListResultPage{
1692		fn:  getNextPage,
1693		olr: cur,
1694	}
1695}
1696
1697// ProvisioningError describes the error happened when create or update an image template
1698type ProvisioningError struct {
1699	// ProvisioningErrorCode - Error code of the provisioning failure. Possible values include: 'BadSourceType', 'BadPIRSource', 'BadISOSource', 'BadManagedImageSource', 'BadSharedImageVersionSource', 'BadCustomizerType', 'UnsupportedCustomizerType', 'NoCustomizerScript', 'BadDistributeType', 'BadSharedImageDistribute', 'ServerError', 'Other'
1700	ProvisioningErrorCode ProvisioningErrorCode `json:"provisioningErrorCode,omitempty"`
1701	// Message - Verbose error message about the provisioning failure
1702	Message *string `json:"message,omitempty"`
1703}
1704
1705// Resource the Resource model definition.
1706type Resource struct {
1707	// ID - READ-ONLY; Resource Id
1708	ID *string `json:"id,omitempty"`
1709	// Name - READ-ONLY; Resource name
1710	Name *string `json:"name,omitempty"`
1711	// Type - READ-ONLY; Resource type
1712	Type *string `json:"type,omitempty"`
1713	// Location - Resource location
1714	Location *string `json:"location,omitempty"`
1715	// Tags - Resource tags
1716	Tags map[string]*string `json:"tags"`
1717}
1718
1719// MarshalJSON is the custom marshaler for Resource.
1720func (r Resource) MarshalJSON() ([]byte, error) {
1721	objectMap := make(map[string]interface{})
1722	if r.Location != nil {
1723		objectMap["location"] = r.Location
1724	}
1725	if r.Tags != nil {
1726		objectMap["tags"] = r.Tags
1727	}
1728	return json.Marshal(objectMap)
1729}
1730
1731// RunOutput represents an output that was created by running an image template.
1732type RunOutput struct {
1733	autorest.Response `json:"-"`
1734	// RunOutputProperties - The properties of the run output
1735	*RunOutputProperties `json:"properties,omitempty"`
1736	// ID - READ-ONLY; Resource Id
1737	ID *string `json:"id,omitempty"`
1738	// Name - Resource name
1739	Name *string `json:"name,omitempty"`
1740	// Type - READ-ONLY; Resource type
1741	Type *string `json:"type,omitempty"`
1742}
1743
1744// MarshalJSON is the custom marshaler for RunOutput.
1745func (ro RunOutput) MarshalJSON() ([]byte, error) {
1746	objectMap := make(map[string]interface{})
1747	if ro.RunOutputProperties != nil {
1748		objectMap["properties"] = ro.RunOutputProperties
1749	}
1750	if ro.Name != nil {
1751		objectMap["name"] = ro.Name
1752	}
1753	return json.Marshal(objectMap)
1754}
1755
1756// UnmarshalJSON is the custom unmarshaler for RunOutput struct.
1757func (ro *RunOutput) UnmarshalJSON(body []byte) error {
1758	var m map[string]*json.RawMessage
1759	err := json.Unmarshal(body, &m)
1760	if err != nil {
1761		return err
1762	}
1763	for k, v := range m {
1764		switch k {
1765		case "properties":
1766			if v != nil {
1767				var runOutputProperties RunOutputProperties
1768				err = json.Unmarshal(*v, &runOutputProperties)
1769				if err != nil {
1770					return err
1771				}
1772				ro.RunOutputProperties = &runOutputProperties
1773			}
1774		case "id":
1775			if v != nil {
1776				var ID string
1777				err = json.Unmarshal(*v, &ID)
1778				if err != nil {
1779					return err
1780				}
1781				ro.ID = &ID
1782			}
1783		case "name":
1784			if v != nil {
1785				var name string
1786				err = json.Unmarshal(*v, &name)
1787				if err != nil {
1788					return err
1789				}
1790				ro.Name = &name
1791			}
1792		case "type":
1793			if v != nil {
1794				var typeVar string
1795				err = json.Unmarshal(*v, &typeVar)
1796				if err != nil {
1797					return err
1798				}
1799				ro.Type = &typeVar
1800			}
1801		}
1802	}
1803
1804	return nil
1805}
1806
1807// RunOutputCollection the result of List run outputs operation
1808type RunOutputCollection struct {
1809	autorest.Response `json:"-"`
1810	// Value - An array of run outputs
1811	Value *[]RunOutput `json:"value,omitempty"`
1812	// NextLink - The continuation token.
1813	NextLink *string `json:"nextLink,omitempty"`
1814}
1815
1816// RunOutputCollectionIterator provides access to a complete listing of RunOutput values.
1817type RunOutputCollectionIterator struct {
1818	i    int
1819	page RunOutputCollectionPage
1820}
1821
1822// NextWithContext advances to the next value.  If there was an error making
1823// the request the iterator does not advance and the error is returned.
1824func (iter *RunOutputCollectionIterator) NextWithContext(ctx context.Context) (err error) {
1825	if tracing.IsEnabled() {
1826		ctx = tracing.StartSpan(ctx, fqdn+"/RunOutputCollectionIterator.NextWithContext")
1827		defer func() {
1828			sc := -1
1829			if iter.Response().Response.Response != nil {
1830				sc = iter.Response().Response.Response.StatusCode
1831			}
1832			tracing.EndSpan(ctx, sc, err)
1833		}()
1834	}
1835	iter.i++
1836	if iter.i < len(iter.page.Values()) {
1837		return nil
1838	}
1839	err = iter.page.NextWithContext(ctx)
1840	if err != nil {
1841		iter.i--
1842		return err
1843	}
1844	iter.i = 0
1845	return nil
1846}
1847
1848// Next advances to the next value.  If there was an error making
1849// the request the iterator does not advance and the error is returned.
1850// Deprecated: Use NextWithContext() instead.
1851func (iter *RunOutputCollectionIterator) Next() error {
1852	return iter.NextWithContext(context.Background())
1853}
1854
1855// NotDone returns true if the enumeration should be started or is not yet complete.
1856func (iter RunOutputCollectionIterator) NotDone() bool {
1857	return iter.page.NotDone() && iter.i < len(iter.page.Values())
1858}
1859
1860// Response returns the raw server response from the last page request.
1861func (iter RunOutputCollectionIterator) Response() RunOutputCollection {
1862	return iter.page.Response()
1863}
1864
1865// Value returns the current value or a zero-initialized value if the
1866// iterator has advanced beyond the end of the collection.
1867func (iter RunOutputCollectionIterator) Value() RunOutput {
1868	if !iter.page.NotDone() {
1869		return RunOutput{}
1870	}
1871	return iter.page.Values()[iter.i]
1872}
1873
1874// Creates a new instance of the RunOutputCollectionIterator type.
1875func NewRunOutputCollectionIterator(page RunOutputCollectionPage) RunOutputCollectionIterator {
1876	return RunOutputCollectionIterator{page: page}
1877}
1878
1879// IsEmpty returns true if the ListResult contains no values.
1880func (roc RunOutputCollection) IsEmpty() bool {
1881	return roc.Value == nil || len(*roc.Value) == 0
1882}
1883
1884// hasNextLink returns true if the NextLink is not empty.
1885func (roc RunOutputCollection) hasNextLink() bool {
1886	return roc.NextLink != nil && len(*roc.NextLink) != 0
1887}
1888
1889// runOutputCollectionPreparer prepares a request to retrieve the next set of results.
1890// It returns nil if no more results exist.
1891func (roc RunOutputCollection) runOutputCollectionPreparer(ctx context.Context) (*http.Request, error) {
1892	if !roc.hasNextLink() {
1893		return nil, nil
1894	}
1895	return autorest.Prepare((&http.Request{}).WithContext(ctx),
1896		autorest.AsJSON(),
1897		autorest.AsGet(),
1898		autorest.WithBaseURL(to.String(roc.NextLink)))
1899}
1900
1901// RunOutputCollectionPage contains a page of RunOutput values.
1902type RunOutputCollectionPage struct {
1903	fn  func(context.Context, RunOutputCollection) (RunOutputCollection, error)
1904	roc RunOutputCollection
1905}
1906
1907// NextWithContext advances to the next page of values.  If there was an error making
1908// the request the page does not advance and the error is returned.
1909func (page *RunOutputCollectionPage) NextWithContext(ctx context.Context) (err error) {
1910	if tracing.IsEnabled() {
1911		ctx = tracing.StartSpan(ctx, fqdn+"/RunOutputCollectionPage.NextWithContext")
1912		defer func() {
1913			sc := -1
1914			if page.Response().Response.Response != nil {
1915				sc = page.Response().Response.Response.StatusCode
1916			}
1917			tracing.EndSpan(ctx, sc, err)
1918		}()
1919	}
1920	for {
1921		next, err := page.fn(ctx, page.roc)
1922		if err != nil {
1923			return err
1924		}
1925		page.roc = next
1926		if !next.hasNextLink() || !next.IsEmpty() {
1927			break
1928		}
1929	}
1930	return nil
1931}
1932
1933// Next advances to the next page of values.  If there was an error making
1934// the request the page does not advance and the error is returned.
1935// Deprecated: Use NextWithContext() instead.
1936func (page *RunOutputCollectionPage) Next() error {
1937	return page.NextWithContext(context.Background())
1938}
1939
1940// NotDone returns true if the page enumeration should be started or is not yet complete.
1941func (page RunOutputCollectionPage) NotDone() bool {
1942	return !page.roc.IsEmpty()
1943}
1944
1945// Response returns the raw server response from the last page request.
1946func (page RunOutputCollectionPage) Response() RunOutputCollection {
1947	return page.roc
1948}
1949
1950// Values returns the slice of values for the current page or nil if there are no values.
1951func (page RunOutputCollectionPage) Values() []RunOutput {
1952	if page.roc.IsEmpty() {
1953		return nil
1954	}
1955	return *page.roc.Value
1956}
1957
1958// Creates a new instance of the RunOutputCollectionPage type.
1959func NewRunOutputCollectionPage(cur RunOutputCollection, getNextPage func(context.Context, RunOutputCollection) (RunOutputCollection, error)) RunOutputCollectionPage {
1960	return RunOutputCollectionPage{
1961		fn:  getNextPage,
1962		roc: cur,
1963	}
1964}
1965
1966// RunOutputProperties describes the properties of a run output
1967type RunOutputProperties struct {
1968	// ArtifactID - The resource id of the artifact.
1969	ArtifactID *string `json:"artifactId,omitempty"`
1970	// ArtifactURI - The location URI of the artifact.
1971	ArtifactURI *string `json:"artifactUri,omitempty"`
1972	// ProvisioningState - READ-ONLY; Provisioning state of the resource. Possible values include: 'Creating', 'Updating', 'Succeeded', 'Failed', 'Deleting'
1973	ProvisioningState ProvisioningState `json:"provisioningState,omitempty"`
1974}
1975
1976// MarshalJSON is the custom marshaler for RunOutputProperties.
1977func (rop RunOutputProperties) MarshalJSON() ([]byte, error) {
1978	objectMap := make(map[string]interface{})
1979	if rop.ArtifactID != nil {
1980		objectMap["artifactId"] = rop.ArtifactID
1981	}
1982	if rop.ArtifactURI != nil {
1983		objectMap["artifactUri"] = rop.ArtifactURI
1984	}
1985	return json.Marshal(objectMap)
1986}
1987
1988// SubResource the Sub Resource model definition.
1989type SubResource struct {
1990	// ID - READ-ONLY; Resource Id
1991	ID *string `json:"id,omitempty"`
1992	// Name - Resource name
1993	Name *string `json:"name,omitempty"`
1994	// Type - READ-ONLY; Resource type
1995	Type *string `json:"type,omitempty"`
1996}
1997
1998// MarshalJSON is the custom marshaler for SubResource.
1999func (sr SubResource) MarshalJSON() ([]byte, error) {
2000	objectMap := make(map[string]interface{})
2001	if sr.Name != nil {
2002		objectMap["name"] = sr.Name
2003	}
2004	return json.Marshal(objectMap)
2005}
2006
2007// VirtualMachineImageTemplatesCreateOrUpdateFuture an abstraction for monitoring and retrieving the
2008// results of a long-running operation.
2009type VirtualMachineImageTemplatesCreateOrUpdateFuture struct {
2010	azure.FutureAPI
2011	// Result returns the result of the asynchronous operation.
2012	// If the operation has not completed it will return an error.
2013	Result func(VirtualMachineImageTemplatesClient) (ImageTemplate, error)
2014}
2015
2016// UnmarshalJSON is the custom unmarshaller for CreateFuture.
2017func (future *VirtualMachineImageTemplatesCreateOrUpdateFuture) UnmarshalJSON(body []byte) error {
2018	var azFuture azure.Future
2019	if err := json.Unmarshal(body, &azFuture); err != nil {
2020		return err
2021	}
2022	future.FutureAPI = &azFuture
2023	future.Result = future.result
2024	return nil
2025}
2026
2027// result is the default implementation for VirtualMachineImageTemplatesCreateOrUpdateFuture.Result.
2028func (future *VirtualMachineImageTemplatesCreateOrUpdateFuture) result(client VirtualMachineImageTemplatesClient) (it ImageTemplate, err error) {
2029	var done bool
2030	done, err = future.DoneWithContext(context.Background(), client)
2031	if err != nil {
2032		err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesCreateOrUpdateFuture", "Result", future.Response(), "Polling failure")
2033		return
2034	}
2035	if !done {
2036		it.Response.Response = future.Response()
2037		err = azure.NewAsyncOpIncompleteError("virtualmachineimagebuilder.VirtualMachineImageTemplatesCreateOrUpdateFuture")
2038		return
2039	}
2040	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
2041	if it.Response.Response, err = future.GetResult(sender); err == nil && it.Response.Response.StatusCode != http.StatusNoContent {
2042		it, err = client.CreateOrUpdateResponder(it.Response.Response)
2043		if err != nil {
2044			err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesCreateOrUpdateFuture", "Result", it.Response.Response, "Failure responding to request")
2045		}
2046	}
2047	return
2048}
2049
2050// VirtualMachineImageTemplatesDeleteFuture an abstraction for monitoring and retrieving the results of a
2051// long-running operation.
2052type VirtualMachineImageTemplatesDeleteFuture struct {
2053	azure.FutureAPI
2054	// Result returns the result of the asynchronous operation.
2055	// If the operation has not completed it will return an error.
2056	Result func(VirtualMachineImageTemplatesClient) (autorest.Response, error)
2057}
2058
2059// UnmarshalJSON is the custom unmarshaller for CreateFuture.
2060func (future *VirtualMachineImageTemplatesDeleteFuture) UnmarshalJSON(body []byte) error {
2061	var azFuture azure.Future
2062	if err := json.Unmarshal(body, &azFuture); err != nil {
2063		return err
2064	}
2065	future.FutureAPI = &azFuture
2066	future.Result = future.result
2067	return nil
2068}
2069
2070// result is the default implementation for VirtualMachineImageTemplatesDeleteFuture.Result.
2071func (future *VirtualMachineImageTemplatesDeleteFuture) result(client VirtualMachineImageTemplatesClient) (ar autorest.Response, err error) {
2072	var done bool
2073	done, err = future.DoneWithContext(context.Background(), client)
2074	if err != nil {
2075		err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesDeleteFuture", "Result", future.Response(), "Polling failure")
2076		return
2077	}
2078	if !done {
2079		ar.Response = future.Response()
2080		err = azure.NewAsyncOpIncompleteError("virtualmachineimagebuilder.VirtualMachineImageTemplatesDeleteFuture")
2081		return
2082	}
2083	ar.Response = future.Response()
2084	return
2085}
2086
2087// VirtualMachineImageTemplatesRunFuture an abstraction for monitoring and retrieving the results of a
2088// long-running operation.
2089type VirtualMachineImageTemplatesRunFuture struct {
2090	azure.FutureAPI
2091	// Result returns the result of the asynchronous operation.
2092	// If the operation has not completed it will return an error.
2093	Result func(VirtualMachineImageTemplatesClient) (autorest.Response, error)
2094}
2095
2096// UnmarshalJSON is the custom unmarshaller for CreateFuture.
2097func (future *VirtualMachineImageTemplatesRunFuture) UnmarshalJSON(body []byte) error {
2098	var azFuture azure.Future
2099	if err := json.Unmarshal(body, &azFuture); err != nil {
2100		return err
2101	}
2102	future.FutureAPI = &azFuture
2103	future.Result = future.result
2104	return nil
2105}
2106
2107// result is the default implementation for VirtualMachineImageTemplatesRunFuture.Result.
2108func (future *VirtualMachineImageTemplatesRunFuture) result(client VirtualMachineImageTemplatesClient) (ar autorest.Response, err error) {
2109	var done bool
2110	done, err = future.DoneWithContext(context.Background(), client)
2111	if err != nil {
2112		err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesRunFuture", "Result", future.Response(), "Polling failure")
2113		return
2114	}
2115	if !done {
2116		ar.Response = future.Response()
2117		err = azure.NewAsyncOpIncompleteError("virtualmachineimagebuilder.VirtualMachineImageTemplatesRunFuture")
2118		return
2119	}
2120	ar.Response = future.Response()
2121	return
2122}
2123
2124// VirtualMachineImageTemplatesUpdateFuture an abstraction for monitoring and retrieving the results of a
2125// long-running operation.
2126type VirtualMachineImageTemplatesUpdateFuture struct {
2127	azure.FutureAPI
2128	// Result returns the result of the asynchronous operation.
2129	// If the operation has not completed it will return an error.
2130	Result func(VirtualMachineImageTemplatesClient) (ImageTemplate, error)
2131}
2132
2133// UnmarshalJSON is the custom unmarshaller for CreateFuture.
2134func (future *VirtualMachineImageTemplatesUpdateFuture) UnmarshalJSON(body []byte) error {
2135	var azFuture azure.Future
2136	if err := json.Unmarshal(body, &azFuture); err != nil {
2137		return err
2138	}
2139	future.FutureAPI = &azFuture
2140	future.Result = future.result
2141	return nil
2142}
2143
2144// result is the default implementation for VirtualMachineImageTemplatesUpdateFuture.Result.
2145func (future *VirtualMachineImageTemplatesUpdateFuture) result(client VirtualMachineImageTemplatesClient) (it ImageTemplate, err error) {
2146	var done bool
2147	done, err = future.DoneWithContext(context.Background(), client)
2148	if err != nil {
2149		err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesUpdateFuture", "Result", future.Response(), "Polling failure")
2150		return
2151	}
2152	if !done {
2153		it.Response.Response = future.Response()
2154		err = azure.NewAsyncOpIncompleteError("virtualmachineimagebuilder.VirtualMachineImageTemplatesUpdateFuture")
2155		return
2156	}
2157	sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...))
2158	if it.Response.Response, err = future.GetResult(sender); err == nil && it.Response.Response.StatusCode != http.StatusNoContent {
2159		it, err = client.UpdateResponder(it.Response.Response)
2160		if err != nil {
2161			err = autorest.NewErrorWithError(err, "virtualmachineimagebuilder.VirtualMachineImageTemplatesUpdateFuture", "Result", it.Response.Response, "Failure responding to request")
2162		}
2163	}
2164	return
2165}
2166