1package dtl 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 "github.com/Azure/go-autorest/autorest" 23 "github.com/Azure/go-autorest/autorest/azure" 24 "github.com/Azure/go-autorest/tracing" 25 "net/http" 26) 27 28// UsersClient is the the DevTest Labs Client. 29type UsersClient struct { 30 BaseClient 31} 32 33// NewUsersClient creates an instance of the UsersClient client. 34func NewUsersClient(subscriptionID string) UsersClient { 35 return NewUsersClientWithBaseURI(DefaultBaseURI, subscriptionID) 36} 37 38// NewUsersClientWithBaseURI creates an instance of the UsersClient client using a custom endpoint. Use this when 39// interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). 40func NewUsersClientWithBaseURI(baseURI string, subscriptionID string) UsersClient { 41 return UsersClient{NewWithBaseURI(baseURI, subscriptionID)} 42} 43 44// CreateOrUpdate create or replace an existing user profile. This operation can take a while to complete. 45// Parameters: 46// resourceGroupName - the name of the resource group. 47// labName - the name of the lab. 48// name - the name of the user profile. 49// userParameter - profile of a lab user. 50func (client UsersClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, labName string, name string, userParameter User) (result UsersCreateOrUpdateFuture, err error) { 51 if tracing.IsEnabled() { 52 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.CreateOrUpdate") 53 defer func() { 54 sc := -1 55 if result.Response() != nil { 56 sc = result.Response().StatusCode 57 } 58 tracing.EndSpan(ctx, sc, err) 59 }() 60 } 61 req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, labName, name, userParameter) 62 if err != nil { 63 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "CreateOrUpdate", nil, "Failure preparing request") 64 return 65 } 66 67 result, err = client.CreateOrUpdateSender(req) 68 if err != nil { 69 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "CreateOrUpdate", nil, "Failure sending request") 70 return 71 } 72 73 return 74} 75 76// CreateOrUpdatePreparer prepares the CreateOrUpdate request. 77func (client UsersClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, labName string, name string, userParameter User) (*http.Request, error) { 78 pathParameters := map[string]interface{}{ 79 "labName": autorest.Encode("path", labName), 80 "name": autorest.Encode("path", name), 81 "resourceGroupName": autorest.Encode("path", resourceGroupName), 82 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 83 } 84 85 const APIVersion = "2018-09-15" 86 queryParameters := map[string]interface{}{ 87 "api-version": APIVersion, 88 } 89 90 preparer := autorest.CreatePreparer( 91 autorest.AsContentType("application/json; charset=utf-8"), 92 autorest.AsPut(), 93 autorest.WithBaseURL(client.BaseURI), 94 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/users/{name}", pathParameters), 95 autorest.WithJSON(userParameter), 96 autorest.WithQueryParameters(queryParameters)) 97 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 98} 99 100// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the 101// http.Response Body if it receives an error. 102func (client UsersClient) CreateOrUpdateSender(req *http.Request) (future UsersCreateOrUpdateFuture, err error) { 103 var resp *http.Response 104 resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) 105 if err != nil { 106 return 107 } 108 var azf azure.Future 109 azf, err = azure.NewFutureFromResponse(resp) 110 future.FutureAPI = &azf 111 future.Result = func(client UsersClient) (u User, err error) { 112 var done bool 113 done, err = future.DoneWithContext(context.Background(), client) 114 if err != nil { 115 err = autorest.NewErrorWithError(err, "dtl.UsersCreateOrUpdateFuture", "Result", future.Response(), "Polling failure") 116 return 117 } 118 if !done { 119 err = azure.NewAsyncOpIncompleteError("dtl.UsersCreateOrUpdateFuture") 120 return 121 } 122 sender := autorest.DecorateSender(client, autorest.DoRetryForStatusCodes(client.RetryAttempts, client.RetryDuration, autorest.StatusCodesForRetry...)) 123 if u.Response.Response, err = future.GetResult(sender); err == nil && u.Response.Response.StatusCode != http.StatusNoContent { 124 u, err = client.CreateOrUpdateResponder(u.Response.Response) 125 if err != nil { 126 err = autorest.NewErrorWithError(err, "dtl.UsersCreateOrUpdateFuture", "Result", u.Response.Response, "Failure responding to request") 127 } 128 } 129 return 130 } 131 return 132} 133 134// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always 135// closes the http.Response Body. 136func (client UsersClient) CreateOrUpdateResponder(resp *http.Response) (result User, err error) { 137 err = autorest.Respond( 138 resp, 139 azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), 140 autorest.ByUnmarshallingJSON(&result), 141 autorest.ByClosing()) 142 result.Response = autorest.Response{Response: resp} 143 return 144} 145 146// Delete delete user profile. This operation can take a while to complete. 147// Parameters: 148// resourceGroupName - the name of the resource group. 149// labName - the name of the lab. 150// name - the name of the user profile. 151func (client UsersClient) Delete(ctx context.Context, resourceGroupName string, labName string, name string) (result UsersDeleteFuture, err error) { 152 if tracing.IsEnabled() { 153 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.Delete") 154 defer func() { 155 sc := -1 156 if result.Response() != nil { 157 sc = result.Response().StatusCode 158 } 159 tracing.EndSpan(ctx, sc, err) 160 }() 161 } 162 req, err := client.DeletePreparer(ctx, resourceGroupName, labName, name) 163 if err != nil { 164 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Delete", nil, "Failure preparing request") 165 return 166 } 167 168 result, err = client.DeleteSender(req) 169 if err != nil { 170 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Delete", nil, "Failure sending request") 171 return 172 } 173 174 return 175} 176 177// DeletePreparer prepares the Delete request. 178func (client UsersClient) DeletePreparer(ctx context.Context, resourceGroupName string, labName string, name string) (*http.Request, error) { 179 pathParameters := map[string]interface{}{ 180 "labName": autorest.Encode("path", labName), 181 "name": autorest.Encode("path", name), 182 "resourceGroupName": autorest.Encode("path", resourceGroupName), 183 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 184 } 185 186 const APIVersion = "2018-09-15" 187 queryParameters := map[string]interface{}{ 188 "api-version": APIVersion, 189 } 190 191 preparer := autorest.CreatePreparer( 192 autorest.AsDelete(), 193 autorest.WithBaseURL(client.BaseURI), 194 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/users/{name}", pathParameters), 195 autorest.WithQueryParameters(queryParameters)) 196 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 197} 198 199// DeleteSender sends the Delete request. The method will close the 200// http.Response Body if it receives an error. 201func (client UsersClient) DeleteSender(req *http.Request) (future UsersDeleteFuture, err error) { 202 var resp *http.Response 203 resp, err = client.Send(req, azure.DoRetryWithRegistration(client.Client)) 204 if err != nil { 205 return 206 } 207 var azf azure.Future 208 azf, err = azure.NewFutureFromResponse(resp) 209 future.FutureAPI = &azf 210 future.Result = func(client UsersClient) (ar autorest.Response, err error) { 211 var done bool 212 done, err = future.DoneWithContext(context.Background(), client) 213 if err != nil { 214 err = autorest.NewErrorWithError(err, "dtl.UsersDeleteFuture", "Result", future.Response(), "Polling failure") 215 return 216 } 217 if !done { 218 err = azure.NewAsyncOpIncompleteError("dtl.UsersDeleteFuture") 219 return 220 } 221 ar.Response = future.Response() 222 return 223 } 224 return 225} 226 227// DeleteResponder handles the response to the Delete request. The method always 228// closes the http.Response Body. 229func (client UsersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) { 230 err = autorest.Respond( 231 resp, 232 azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent), 233 autorest.ByClosing()) 234 result.Response = resp 235 return 236} 237 238// Get get user profile. 239// Parameters: 240// resourceGroupName - the name of the resource group. 241// labName - the name of the lab. 242// name - the name of the user profile. 243// expand - specify the $expand query. Example: 'properties($select=identity)' 244func (client UsersClient) Get(ctx context.Context, resourceGroupName string, labName string, name string, expand string) (result User, err error) { 245 if tracing.IsEnabled() { 246 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.Get") 247 defer func() { 248 sc := -1 249 if result.Response.Response != nil { 250 sc = result.Response.Response.StatusCode 251 } 252 tracing.EndSpan(ctx, sc, err) 253 }() 254 } 255 req, err := client.GetPreparer(ctx, resourceGroupName, labName, name, expand) 256 if err != nil { 257 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Get", nil, "Failure preparing request") 258 return 259 } 260 261 resp, err := client.GetSender(req) 262 if err != nil { 263 result.Response = autorest.Response{Response: resp} 264 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Get", resp, "Failure sending request") 265 return 266 } 267 268 result, err = client.GetResponder(resp) 269 if err != nil { 270 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Get", resp, "Failure responding to request") 271 return 272 } 273 274 return 275} 276 277// GetPreparer prepares the Get request. 278func (client UsersClient) GetPreparer(ctx context.Context, resourceGroupName string, labName string, name string, expand string) (*http.Request, error) { 279 pathParameters := map[string]interface{}{ 280 "labName": autorest.Encode("path", labName), 281 "name": autorest.Encode("path", name), 282 "resourceGroupName": autorest.Encode("path", resourceGroupName), 283 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 284 } 285 286 const APIVersion = "2018-09-15" 287 queryParameters := map[string]interface{}{ 288 "api-version": APIVersion, 289 } 290 if len(expand) > 0 { 291 queryParameters["$expand"] = autorest.Encode("query", expand) 292 } 293 294 preparer := autorest.CreatePreparer( 295 autorest.AsGet(), 296 autorest.WithBaseURL(client.BaseURI), 297 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/users/{name}", pathParameters), 298 autorest.WithQueryParameters(queryParameters)) 299 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 300} 301 302// GetSender sends the Get request. The method will close the 303// http.Response Body if it receives an error. 304func (client UsersClient) GetSender(req *http.Request) (*http.Response, error) { 305 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 306} 307 308// GetResponder handles the response to the Get request. The method always 309// closes the http.Response Body. 310func (client UsersClient) GetResponder(resp *http.Response) (result User, err error) { 311 err = autorest.Respond( 312 resp, 313 azure.WithErrorUnlessStatusCode(http.StatusOK), 314 autorest.ByUnmarshallingJSON(&result), 315 autorest.ByClosing()) 316 result.Response = autorest.Response{Response: resp} 317 return 318} 319 320// List list user profiles in a given lab. 321// Parameters: 322// resourceGroupName - the name of the resource group. 323// labName - the name of the lab. 324// expand - specify the $expand query. Example: 'properties($select=identity)' 325// filter - the filter to apply to the operation. Example: '$filter=contains(name,'myName') 326// top - the maximum number of resources to return from the operation. Example: '$top=10' 327// orderby - the ordering expression for the results, using OData notation. Example: '$orderby=name desc' 328func (client UsersClient) List(ctx context.Context, resourceGroupName string, labName string, expand string, filter string, top *int32, orderby string) (result UserListPage, err error) { 329 if tracing.IsEnabled() { 330 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.List") 331 defer func() { 332 sc := -1 333 if result.ul.Response.Response != nil { 334 sc = result.ul.Response.Response.StatusCode 335 } 336 tracing.EndSpan(ctx, sc, err) 337 }() 338 } 339 result.fn = client.listNextResults 340 req, err := client.ListPreparer(ctx, resourceGroupName, labName, expand, filter, top, orderby) 341 if err != nil { 342 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "List", nil, "Failure preparing request") 343 return 344 } 345 346 resp, err := client.ListSender(req) 347 if err != nil { 348 result.ul.Response = autorest.Response{Response: resp} 349 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "List", resp, "Failure sending request") 350 return 351 } 352 353 result.ul, err = client.ListResponder(resp) 354 if err != nil { 355 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "List", resp, "Failure responding to request") 356 return 357 } 358 if result.ul.hasNextLink() && result.ul.IsEmpty() { 359 err = result.NextWithContext(ctx) 360 return 361 } 362 363 return 364} 365 366// ListPreparer prepares the List request. 367func (client UsersClient) ListPreparer(ctx context.Context, resourceGroupName string, labName string, expand string, filter string, top *int32, orderby string) (*http.Request, error) { 368 pathParameters := map[string]interface{}{ 369 "labName": autorest.Encode("path", labName), 370 "resourceGroupName": autorest.Encode("path", resourceGroupName), 371 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 372 } 373 374 const APIVersion = "2018-09-15" 375 queryParameters := map[string]interface{}{ 376 "api-version": APIVersion, 377 } 378 if len(expand) > 0 { 379 queryParameters["$expand"] = autorest.Encode("query", expand) 380 } 381 if len(filter) > 0 { 382 queryParameters["$filter"] = autorest.Encode("query", filter) 383 } 384 if top != nil { 385 queryParameters["$top"] = autorest.Encode("query", *top) 386 } 387 if len(orderby) > 0 { 388 queryParameters["$orderby"] = autorest.Encode("query", orderby) 389 } 390 391 preparer := autorest.CreatePreparer( 392 autorest.AsGet(), 393 autorest.WithBaseURL(client.BaseURI), 394 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/users", pathParameters), 395 autorest.WithQueryParameters(queryParameters)) 396 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 397} 398 399// ListSender sends the List request. The method will close the 400// http.Response Body if it receives an error. 401func (client UsersClient) ListSender(req *http.Request) (*http.Response, error) { 402 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 403} 404 405// ListResponder handles the response to the List request. The method always 406// closes the http.Response Body. 407func (client UsersClient) ListResponder(resp *http.Response) (result UserList, err error) { 408 err = autorest.Respond( 409 resp, 410 azure.WithErrorUnlessStatusCode(http.StatusOK), 411 autorest.ByUnmarshallingJSON(&result), 412 autorest.ByClosing()) 413 result.Response = autorest.Response{Response: resp} 414 return 415} 416 417// listNextResults retrieves the next set of results, if any. 418func (client UsersClient) listNextResults(ctx context.Context, lastResults UserList) (result UserList, err error) { 419 req, err := lastResults.userListPreparer(ctx) 420 if err != nil { 421 return result, autorest.NewErrorWithError(err, "dtl.UsersClient", "listNextResults", nil, "Failure preparing next results request") 422 } 423 if req == nil { 424 return 425 } 426 resp, err := client.ListSender(req) 427 if err != nil { 428 result.Response = autorest.Response{Response: resp} 429 return result, autorest.NewErrorWithError(err, "dtl.UsersClient", "listNextResults", resp, "Failure sending next results request") 430 } 431 result, err = client.ListResponder(resp) 432 if err != nil { 433 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "listNextResults", resp, "Failure responding to next results request") 434 } 435 return 436} 437 438// ListComplete enumerates all values, automatically crossing page boundaries as required. 439func (client UsersClient) ListComplete(ctx context.Context, resourceGroupName string, labName string, expand string, filter string, top *int32, orderby string) (result UserListIterator, err error) { 440 if tracing.IsEnabled() { 441 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.List") 442 defer func() { 443 sc := -1 444 if result.Response().Response.Response != nil { 445 sc = result.page.Response().Response.Response.StatusCode 446 } 447 tracing.EndSpan(ctx, sc, err) 448 }() 449 } 450 result.page, err = client.List(ctx, resourceGroupName, labName, expand, filter, top, orderby) 451 return 452} 453 454// Update allows modifying tags of user profiles. All other properties will be ignored. 455// Parameters: 456// resourceGroupName - the name of the resource group. 457// labName - the name of the lab. 458// name - the name of the user profile. 459// userParameter - profile of a lab user. 460func (client UsersClient) Update(ctx context.Context, resourceGroupName string, labName string, name string, userParameter UserFragment) (result User, err error) { 461 if tracing.IsEnabled() { 462 ctx = tracing.StartSpan(ctx, fqdn+"/UsersClient.Update") 463 defer func() { 464 sc := -1 465 if result.Response.Response != nil { 466 sc = result.Response.Response.StatusCode 467 } 468 tracing.EndSpan(ctx, sc, err) 469 }() 470 } 471 req, err := client.UpdatePreparer(ctx, resourceGroupName, labName, name, userParameter) 472 if err != nil { 473 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Update", nil, "Failure preparing request") 474 return 475 } 476 477 resp, err := client.UpdateSender(req) 478 if err != nil { 479 result.Response = autorest.Response{Response: resp} 480 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Update", resp, "Failure sending request") 481 return 482 } 483 484 result, err = client.UpdateResponder(resp) 485 if err != nil { 486 err = autorest.NewErrorWithError(err, "dtl.UsersClient", "Update", resp, "Failure responding to request") 487 return 488 } 489 490 return 491} 492 493// UpdatePreparer prepares the Update request. 494func (client UsersClient) UpdatePreparer(ctx context.Context, resourceGroupName string, labName string, name string, userParameter UserFragment) (*http.Request, error) { 495 pathParameters := map[string]interface{}{ 496 "labName": autorest.Encode("path", labName), 497 "name": autorest.Encode("path", name), 498 "resourceGroupName": autorest.Encode("path", resourceGroupName), 499 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 500 } 501 502 const APIVersion = "2018-09-15" 503 queryParameters := map[string]interface{}{ 504 "api-version": APIVersion, 505 } 506 507 preparer := autorest.CreatePreparer( 508 autorest.AsContentType("application/json; charset=utf-8"), 509 autorest.AsPatch(), 510 autorest.WithBaseURL(client.BaseURI), 511 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DevTestLab/labs/{labName}/users/{name}", pathParameters), 512 autorest.WithJSON(userParameter), 513 autorest.WithQueryParameters(queryParameters)) 514 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 515} 516 517// UpdateSender sends the Update request. The method will close the 518// http.Response Body if it receives an error. 519func (client UsersClient) UpdateSender(req *http.Request) (*http.Response, error) { 520 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 521} 522 523// UpdateResponder handles the response to the Update request. The method always 524// closes the http.Response Body. 525func (client UsersClient) UpdateResponder(resp *http.Response) (result User, err error) { 526 err = autorest.Respond( 527 resp, 528 azure.WithErrorUnlessStatusCode(http.StatusOK), 529 autorest.ByUnmarshallingJSON(&result), 530 autorest.ByClosing()) 531 result.Response = autorest.Response{Response: resp} 532 return 533} 534