1package msi
2
3// Copyright (c) Microsoft and contributors.  All rights reserved.
4//
5// Licensed under the Apache License, Version 2.0 (the "License");
6// you may not use this file except in compliance with the License.
7// You may obtain a copy of the License at
8// http://www.apache.org/licenses/LICENSE-2.0
9//
10// Unless required by applicable law or agreed to in writing, software
11// distributed under the License is distributed on an "AS IS" BASIS,
12// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13//
14// See the License for the specific language governing permissions and
15// limitations under the License.
16//
17// Code generated by Microsoft (R) AutoRest Code Generator.
18// Changes may cause incorrect behavior and will be lost if the code is regenerated.
19
20import (
21	"context"
22	"encoding/json"
23	"github.com/Azure/go-autorest/autorest"
24	"github.com/Azure/go-autorest/autorest/to"
25	"github.com/Azure/go-autorest/tracing"
26	"github.com/satori/go.uuid"
27	"net/http"
28)
29
30// The package's fully qualified name.
31const fqdn = "github.com/Azure/azure-sdk-for-go/services/msi/mgmt/2018-11-30/msi"
32
33// UserAssignedIdentities enumerates the values for user assigned identities.
34type UserAssignedIdentities string
35
36const (
37	// MicrosoftManagedIdentityuserAssignedIdentities ...
38	MicrosoftManagedIdentityuserAssignedIdentities UserAssignedIdentities = "Microsoft.ManagedIdentity/userAssignedIdentities"
39)
40
41// PossibleUserAssignedIdentitiesValues returns an array of possible values for the UserAssignedIdentities const type.
42func PossibleUserAssignedIdentitiesValues() []UserAssignedIdentities {
43	return []UserAssignedIdentities{MicrosoftManagedIdentityuserAssignedIdentities}
44}
45
46// CloudError an error response from the ManagedServiceIdentity service.
47type CloudError struct {
48	// Error - A list of additional details about the error.
49	Error *CloudErrorBody `json:"error,omitempty"`
50}
51
52// CloudErrorBody an error response from the ManagedServiceIdentity service.
53type CloudErrorBody struct {
54	// Code - An identifier for the error.
55	Code *string `json:"code,omitempty"`
56	// Message - A message describing the error, intended to be suitable for display in a user interface.
57	Message *string `json:"message,omitempty"`
58	// Target - The target of the particular error. For example, the name of the property in error.
59	Target *string `json:"target,omitempty"`
60	// Details - A list of additional details about the error.
61	Details *[]CloudErrorBody `json:"details,omitempty"`
62}
63
64// Identity describes an identity resource.
65type Identity struct {
66	autorest.Response `json:"-"`
67	// ID - READ-ONLY; The id of the created identity.
68	ID *string `json:"id,omitempty"`
69	// Name - READ-ONLY; The name of the created identity.
70	Name *string `json:"name,omitempty"`
71	// Location - The Azure region where the identity lives.
72	Location *string `json:"location,omitempty"`
73	// Tags - Resource tags
74	Tags map[string]*string `json:"tags"`
75	// IdentityProperties - The properties associated with the identity.
76	*IdentityProperties `json:"properties,omitempty"`
77	// Type - READ-ONLY; The type of resource i.e. Microsoft.ManagedIdentity/userAssignedIdentities. Possible values include: 'MicrosoftManagedIdentityuserAssignedIdentities'
78	Type UserAssignedIdentities `json:"type,omitempty"`
79}
80
81// MarshalJSON is the custom marshaler for Identity.
82func (i Identity) MarshalJSON() ([]byte, error) {
83	objectMap := make(map[string]interface{})
84	if i.Location != nil {
85		objectMap["location"] = i.Location
86	}
87	if i.Tags != nil {
88		objectMap["tags"] = i.Tags
89	}
90	if i.IdentityProperties != nil {
91		objectMap["properties"] = i.IdentityProperties
92	}
93	return json.Marshal(objectMap)
94}
95
96// UnmarshalJSON is the custom unmarshaler for Identity struct.
97func (i *Identity) UnmarshalJSON(body []byte) error {
98	var m map[string]*json.RawMessage
99	err := json.Unmarshal(body, &m)
100	if err != nil {
101		return err
102	}
103	for k, v := range m {
104		switch k {
105		case "id":
106			if v != nil {
107				var ID string
108				err = json.Unmarshal(*v, &ID)
109				if err != nil {
110					return err
111				}
112				i.ID = &ID
113			}
114		case "name":
115			if v != nil {
116				var name string
117				err = json.Unmarshal(*v, &name)
118				if err != nil {
119					return err
120				}
121				i.Name = &name
122			}
123		case "location":
124			if v != nil {
125				var location string
126				err = json.Unmarshal(*v, &location)
127				if err != nil {
128					return err
129				}
130				i.Location = &location
131			}
132		case "tags":
133			if v != nil {
134				var tags map[string]*string
135				err = json.Unmarshal(*v, &tags)
136				if err != nil {
137					return err
138				}
139				i.Tags = tags
140			}
141		case "properties":
142			if v != nil {
143				var identityProperties IdentityProperties
144				err = json.Unmarshal(*v, &identityProperties)
145				if err != nil {
146					return err
147				}
148				i.IdentityProperties = &identityProperties
149			}
150		case "type":
151			if v != nil {
152				var typeVar UserAssignedIdentities
153				err = json.Unmarshal(*v, &typeVar)
154				if err != nil {
155					return err
156				}
157				i.Type = typeVar
158			}
159		}
160	}
161
162	return nil
163}
164
165// IdentityProperties the properties associated with the identity.
166type IdentityProperties struct {
167	// TenantID - READ-ONLY; The id of the tenant which the identity belongs to.
168	TenantID *uuid.UUID `json:"tenantId,omitempty"`
169	// PrincipalID - READ-ONLY; The id of the service principal object associated with the created identity.
170	PrincipalID *uuid.UUID `json:"principalId,omitempty"`
171	// ClientID - READ-ONLY; The id of the app associated with the identity. This is a random generated UUID by MSI.
172	ClientID *uuid.UUID `json:"clientId,omitempty"`
173	// ClientSecretURL - READ-ONLY;  The ManagedServiceIdentity DataPlane URL that can be queried to obtain the identity credentials. If identity is user assigned, then the clientSecretUrl will not be present in the response, otherwise it will be present.
174	ClientSecretURL *string `json:"clientSecretUrl,omitempty"`
175}
176
177// Operation operation supported by the Microsoft.ManagedIdentity REST API.
178type Operation struct {
179	// Name - The name of the REST Operation. This is of the format {provider}/{resource}/{operation}.
180	Name *string `json:"name,omitempty"`
181	// Display - The object that describes the operation.
182	Display *OperationDisplay `json:"display,omitempty"`
183}
184
185// OperationDisplay the object that describes the operation.
186type OperationDisplay struct {
187	// Provider - Friendly name of the resource provider.
188	Provider *string `json:"provider,omitempty"`
189	// Operation - The type of operation. For example: read, write, delete.
190	Operation *string `json:"operation,omitempty"`
191	// Resource - The resource type on which the operation is performed.
192	Resource *string `json:"resource,omitempty"`
193	// Description - A description of the operation.
194	Description *string `json:"description,omitempty"`
195}
196
197// OperationListResult a list of operations supported by Microsoft.ManagedIdentity Resource Provider.
198type OperationListResult struct {
199	autorest.Response `json:"-"`
200	// Value - A list of operations supported by Microsoft.ManagedIdentity Resource Provider.
201	Value *[]Operation `json:"value,omitempty"`
202	// NextLink - The url to get the next page of results, if any.
203	NextLink *string `json:"nextLink,omitempty"`
204}
205
206// OperationListResultIterator provides access to a complete listing of Operation values.
207type OperationListResultIterator struct {
208	i    int
209	page OperationListResultPage
210}
211
212// NextWithContext advances to the next value.  If there was an error making
213// the request the iterator does not advance and the error is returned.
214func (iter *OperationListResultIterator) NextWithContext(ctx context.Context) (err error) {
215	if tracing.IsEnabled() {
216		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultIterator.NextWithContext")
217		defer func() {
218			sc := -1
219			if iter.Response().Response.Response != nil {
220				sc = iter.Response().Response.Response.StatusCode
221			}
222			tracing.EndSpan(ctx, sc, err)
223		}()
224	}
225	iter.i++
226	if iter.i < len(iter.page.Values()) {
227		return nil
228	}
229	err = iter.page.NextWithContext(ctx)
230	if err != nil {
231		iter.i--
232		return err
233	}
234	iter.i = 0
235	return nil
236}
237
238// Next advances to the next value.  If there was an error making
239// the request the iterator does not advance and the error is returned.
240// Deprecated: Use NextWithContext() instead.
241func (iter *OperationListResultIterator) Next() error {
242	return iter.NextWithContext(context.Background())
243}
244
245// NotDone returns true if the enumeration should be started or is not yet complete.
246func (iter OperationListResultIterator) NotDone() bool {
247	return iter.page.NotDone() && iter.i < len(iter.page.Values())
248}
249
250// Response returns the raw server response from the last page request.
251func (iter OperationListResultIterator) Response() OperationListResult {
252	return iter.page.Response()
253}
254
255// Value returns the current value or a zero-initialized value if the
256// iterator has advanced beyond the end of the collection.
257func (iter OperationListResultIterator) Value() Operation {
258	if !iter.page.NotDone() {
259		return Operation{}
260	}
261	return iter.page.Values()[iter.i]
262}
263
264// Creates a new instance of the OperationListResultIterator type.
265func NewOperationListResultIterator(page OperationListResultPage) OperationListResultIterator {
266	return OperationListResultIterator{page: page}
267}
268
269// IsEmpty returns true if the ListResult contains no values.
270func (olr OperationListResult) IsEmpty() bool {
271	return olr.Value == nil || len(*olr.Value) == 0
272}
273
274// operationListResultPreparer prepares a request to retrieve the next set of results.
275// It returns nil if no more results exist.
276func (olr OperationListResult) operationListResultPreparer(ctx context.Context) (*http.Request, error) {
277	if olr.NextLink == nil || len(to.String(olr.NextLink)) < 1 {
278		return nil, nil
279	}
280	return autorest.Prepare((&http.Request{}).WithContext(ctx),
281		autorest.AsJSON(),
282		autorest.AsGet(),
283		autorest.WithBaseURL(to.String(olr.NextLink)))
284}
285
286// OperationListResultPage contains a page of Operation values.
287type OperationListResultPage struct {
288	fn  func(context.Context, OperationListResult) (OperationListResult, error)
289	olr OperationListResult
290}
291
292// NextWithContext advances to the next page of values.  If there was an error making
293// the request the page does not advance and the error is returned.
294func (page *OperationListResultPage) NextWithContext(ctx context.Context) (err error) {
295	if tracing.IsEnabled() {
296		ctx = tracing.StartSpan(ctx, fqdn+"/OperationListResultPage.NextWithContext")
297		defer func() {
298			sc := -1
299			if page.Response().Response.Response != nil {
300				sc = page.Response().Response.Response.StatusCode
301			}
302			tracing.EndSpan(ctx, sc, err)
303		}()
304	}
305	next, err := page.fn(ctx, page.olr)
306	if err != nil {
307		return err
308	}
309	page.olr = next
310	return nil
311}
312
313// Next advances to the next page of values.  If there was an error making
314// the request the page does not advance and the error is returned.
315// Deprecated: Use NextWithContext() instead.
316func (page *OperationListResultPage) Next() error {
317	return page.NextWithContext(context.Background())
318}
319
320// NotDone returns true if the page enumeration should be started or is not yet complete.
321func (page OperationListResultPage) NotDone() bool {
322	return !page.olr.IsEmpty()
323}
324
325// Response returns the raw server response from the last page request.
326func (page OperationListResultPage) Response() OperationListResult {
327	return page.olr
328}
329
330// Values returns the slice of values for the current page or nil if there are no values.
331func (page OperationListResultPage) Values() []Operation {
332	if page.olr.IsEmpty() {
333		return nil
334	}
335	return *page.olr.Value
336}
337
338// Creates a new instance of the OperationListResultPage type.
339func NewOperationListResultPage(getNextPage func(context.Context, OperationListResult) (OperationListResult, error)) OperationListResultPage {
340	return OperationListResultPage{fn: getNextPage}
341}
342
343// UserAssignedIdentitiesListResult values returned by the List operation.
344type UserAssignedIdentitiesListResult struct {
345	autorest.Response `json:"-"`
346	// Value - The collection of userAssignedIdentities returned by the listing operation.
347	Value *[]Identity `json:"value,omitempty"`
348	// NextLink - The url to get the next page of results, if any.
349	NextLink *string `json:"nextLink,omitempty"`
350}
351
352// UserAssignedIdentitiesListResultIterator provides access to a complete listing of Identity values.
353type UserAssignedIdentitiesListResultIterator struct {
354	i    int
355	page UserAssignedIdentitiesListResultPage
356}
357
358// NextWithContext advances to the next value.  If there was an error making
359// the request the iterator does not advance and the error is returned.
360func (iter *UserAssignedIdentitiesListResultIterator) NextWithContext(ctx context.Context) (err error) {
361	if tracing.IsEnabled() {
362		ctx = tracing.StartSpan(ctx, fqdn+"/UserAssignedIdentitiesListResultIterator.NextWithContext")
363		defer func() {
364			sc := -1
365			if iter.Response().Response.Response != nil {
366				sc = iter.Response().Response.Response.StatusCode
367			}
368			tracing.EndSpan(ctx, sc, err)
369		}()
370	}
371	iter.i++
372	if iter.i < len(iter.page.Values()) {
373		return nil
374	}
375	err = iter.page.NextWithContext(ctx)
376	if err != nil {
377		iter.i--
378		return err
379	}
380	iter.i = 0
381	return nil
382}
383
384// Next advances to the next value.  If there was an error making
385// the request the iterator does not advance and the error is returned.
386// Deprecated: Use NextWithContext() instead.
387func (iter *UserAssignedIdentitiesListResultIterator) Next() error {
388	return iter.NextWithContext(context.Background())
389}
390
391// NotDone returns true if the enumeration should be started or is not yet complete.
392func (iter UserAssignedIdentitiesListResultIterator) NotDone() bool {
393	return iter.page.NotDone() && iter.i < len(iter.page.Values())
394}
395
396// Response returns the raw server response from the last page request.
397func (iter UserAssignedIdentitiesListResultIterator) Response() UserAssignedIdentitiesListResult {
398	return iter.page.Response()
399}
400
401// Value returns the current value or a zero-initialized value if the
402// iterator has advanced beyond the end of the collection.
403func (iter UserAssignedIdentitiesListResultIterator) Value() Identity {
404	if !iter.page.NotDone() {
405		return Identity{}
406	}
407	return iter.page.Values()[iter.i]
408}
409
410// Creates a new instance of the UserAssignedIdentitiesListResultIterator type.
411func NewUserAssignedIdentitiesListResultIterator(page UserAssignedIdentitiesListResultPage) UserAssignedIdentitiesListResultIterator {
412	return UserAssignedIdentitiesListResultIterator{page: page}
413}
414
415// IsEmpty returns true if the ListResult contains no values.
416func (uailr UserAssignedIdentitiesListResult) IsEmpty() bool {
417	return uailr.Value == nil || len(*uailr.Value) == 0
418}
419
420// userAssignedIdentitiesListResultPreparer prepares a request to retrieve the next set of results.
421// It returns nil if no more results exist.
422func (uailr UserAssignedIdentitiesListResult) userAssignedIdentitiesListResultPreparer(ctx context.Context) (*http.Request, error) {
423	if uailr.NextLink == nil || len(to.String(uailr.NextLink)) < 1 {
424		return nil, nil
425	}
426	return autorest.Prepare((&http.Request{}).WithContext(ctx),
427		autorest.AsJSON(),
428		autorest.AsGet(),
429		autorest.WithBaseURL(to.String(uailr.NextLink)))
430}
431
432// UserAssignedIdentitiesListResultPage contains a page of Identity values.
433type UserAssignedIdentitiesListResultPage struct {
434	fn    func(context.Context, UserAssignedIdentitiesListResult) (UserAssignedIdentitiesListResult, error)
435	uailr UserAssignedIdentitiesListResult
436}
437
438// NextWithContext advances to the next page of values.  If there was an error making
439// the request the page does not advance and the error is returned.
440func (page *UserAssignedIdentitiesListResultPage) NextWithContext(ctx context.Context) (err error) {
441	if tracing.IsEnabled() {
442		ctx = tracing.StartSpan(ctx, fqdn+"/UserAssignedIdentitiesListResultPage.NextWithContext")
443		defer func() {
444			sc := -1
445			if page.Response().Response.Response != nil {
446				sc = page.Response().Response.Response.StatusCode
447			}
448			tracing.EndSpan(ctx, sc, err)
449		}()
450	}
451	next, err := page.fn(ctx, page.uailr)
452	if err != nil {
453		return err
454	}
455	page.uailr = next
456	return nil
457}
458
459// Next advances to the next page of values.  If there was an error making
460// the request the page does not advance and the error is returned.
461// Deprecated: Use NextWithContext() instead.
462func (page *UserAssignedIdentitiesListResultPage) Next() error {
463	return page.NextWithContext(context.Background())
464}
465
466// NotDone returns true if the page enumeration should be started or is not yet complete.
467func (page UserAssignedIdentitiesListResultPage) NotDone() bool {
468	return !page.uailr.IsEmpty()
469}
470
471// Response returns the raw server response from the last page request.
472func (page UserAssignedIdentitiesListResultPage) Response() UserAssignedIdentitiesListResult {
473	return page.uailr
474}
475
476// Values returns the slice of values for the current page or nil if there are no values.
477func (page UserAssignedIdentitiesListResultPage) Values() []Identity {
478	if page.uailr.IsEmpty() {
479		return nil
480	}
481	return *page.uailr.Value
482}
483
484// Creates a new instance of the UserAssignedIdentitiesListResultPage type.
485func NewUserAssignedIdentitiesListResultPage(getNextPage func(context.Context, UserAssignedIdentitiesListResult) (UserAssignedIdentitiesListResult, error)) UserAssignedIdentitiesListResultPage {
486	return UserAssignedIdentitiesListResultPage{fn: getNextPage}
487}
488