1package containerinstance 2 3// Copyright (c) Microsoft Corporation. All rights reserved. 4// Licensed under the MIT License. See License.txt in the project root for license information. 5// 6// Code generated by Microsoft (R) AutoRest Code Generator. 7// Changes may cause incorrect behavior and will be lost if the code is regenerated. 8 9import ( 10 "context" 11 "github.com/Azure/go-autorest/autorest" 12 "github.com/Azure/go-autorest/autorest/azure" 13 "github.com/Azure/go-autorest/autorest/validation" 14 "github.com/Azure/go-autorest/tracing" 15 "net/http" 16) 17 18// ContainerGroupsClient is the client for the ContainerGroups methods of the Containerinstance service. 19type ContainerGroupsClient struct { 20 BaseClient 21} 22 23// NewContainerGroupsClient creates an instance of the ContainerGroupsClient client. 24func NewContainerGroupsClient(subscriptionID string) ContainerGroupsClient { 25 return NewContainerGroupsClientWithBaseURI(DefaultBaseURI, subscriptionID) 26} 27 28// NewContainerGroupsClientWithBaseURI creates an instance of the ContainerGroupsClient client using a custom endpoint. 29// Use this when interacting with an Azure cloud that uses a non-standard base URI (sovereign clouds, Azure stack). 30func NewContainerGroupsClientWithBaseURI(baseURI string, subscriptionID string) ContainerGroupsClient { 31 return ContainerGroupsClient{NewWithBaseURI(baseURI, subscriptionID)} 32} 33 34// CreateOrUpdate create or update container groups with specified configurations. 35// Parameters: 36// resourceGroupName - the name of the resource group. 37// containerGroupName - the name of the container group. 38// containerGroup - the properties of the container group to be created or updated. 39func (client ContainerGroupsClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, containerGroupName string, containerGroup ContainerGroup) (result ContainerGroup, err error) { 40 if tracing.IsEnabled() { 41 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.CreateOrUpdate") 42 defer func() { 43 sc := -1 44 if result.Response.Response != nil { 45 sc = result.Response.Response.StatusCode 46 } 47 tracing.EndSpan(ctx, sc, err) 48 }() 49 } 50 if err := validation.Validate([]validation.Validation{ 51 {TargetValue: containerGroup, 52 Constraints: []validation.Constraint{{Target: "containerGroup.ContainerGroupProperties", Name: validation.Null, Rule: true, 53 Chain: []validation.Constraint{{Target: "containerGroup.ContainerGroupProperties.Containers", Name: validation.Null, Rule: true, Chain: nil}, 54 {Target: "containerGroup.ContainerGroupProperties.IPAddress", Name: validation.Null, Rule: false, 55 Chain: []validation.Constraint{{Target: "containerGroup.ContainerGroupProperties.IPAddress.Ports", Name: validation.Null, Rule: true, Chain: nil}, 56 {Target: "containerGroup.ContainerGroupProperties.IPAddress.Type", Name: validation.Null, Rule: true, Chain: nil}, 57 }}, 58 }}}}}); err != nil { 59 return result, validation.NewError("containerinstance.ContainerGroupsClient", "CreateOrUpdate", err.Error()) 60 } 61 62 req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, containerGroupName, containerGroup) 63 if err != nil { 64 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "CreateOrUpdate", nil, "Failure preparing request") 65 return 66 } 67 68 resp, err := client.CreateOrUpdateSender(req) 69 if err != nil { 70 result.Response = autorest.Response{Response: resp} 71 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "CreateOrUpdate", resp, "Failure sending request") 72 return 73 } 74 75 result, err = client.CreateOrUpdateResponder(resp) 76 if err != nil { 77 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "CreateOrUpdate", resp, "Failure responding to request") 78 return 79 } 80 81 return 82} 83 84// CreateOrUpdatePreparer prepares the CreateOrUpdate request. 85func (client ContainerGroupsClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, containerGroupName string, containerGroup ContainerGroup) (*http.Request, error) { 86 pathParameters := map[string]interface{}{ 87 "containerGroupName": autorest.Encode("path", containerGroupName), 88 "resourceGroupName": autorest.Encode("path", resourceGroupName), 89 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 90 } 91 92 const APIVersion = "2017-10-01-preview" 93 queryParameters := map[string]interface{}{ 94 "api-version": APIVersion, 95 } 96 97 preparer := autorest.CreatePreparer( 98 autorest.AsContentType("application/json; charset=utf-8"), 99 autorest.AsPut(), 100 autorest.WithBaseURL(client.BaseURI), 101 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerInstance/containerGroups/{containerGroupName}", pathParameters), 102 autorest.WithJSON(containerGroup), 103 autorest.WithQueryParameters(queryParameters)) 104 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 105} 106 107// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the 108// http.Response Body if it receives an error. 109func (client ContainerGroupsClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) { 110 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 111} 112 113// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always 114// closes the http.Response Body. 115func (client ContainerGroupsClient) CreateOrUpdateResponder(resp *http.Response) (result ContainerGroup, err error) { 116 err = autorest.Respond( 117 resp, 118 azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated), 119 autorest.ByUnmarshallingJSON(&result), 120 autorest.ByClosing()) 121 result.Response = autorest.Response{Response: resp} 122 return 123} 124 125// Delete delete the specified container group in the specified subscription and resource group. The operation does not 126// delete other resources provided by the user, such as volumes. 127// Parameters: 128// resourceGroupName - the name of the resource group. 129// containerGroupName - the name of the container group. 130func (client ContainerGroupsClient) Delete(ctx context.Context, resourceGroupName string, containerGroupName string) (result ContainerGroup, err error) { 131 if tracing.IsEnabled() { 132 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.Delete") 133 defer func() { 134 sc := -1 135 if result.Response.Response != nil { 136 sc = result.Response.Response.StatusCode 137 } 138 tracing.EndSpan(ctx, sc, err) 139 }() 140 } 141 req, err := client.DeletePreparer(ctx, resourceGroupName, containerGroupName) 142 if err != nil { 143 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Delete", nil, "Failure preparing request") 144 return 145 } 146 147 resp, err := client.DeleteSender(req) 148 if err != nil { 149 result.Response = autorest.Response{Response: resp} 150 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Delete", resp, "Failure sending request") 151 return 152 } 153 154 result, err = client.DeleteResponder(resp) 155 if err != nil { 156 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Delete", resp, "Failure responding to request") 157 return 158 } 159 160 return 161} 162 163// DeletePreparer prepares the Delete request. 164func (client ContainerGroupsClient) DeletePreparer(ctx context.Context, resourceGroupName string, containerGroupName string) (*http.Request, error) { 165 pathParameters := map[string]interface{}{ 166 "containerGroupName": autorest.Encode("path", containerGroupName), 167 "resourceGroupName": autorest.Encode("path", resourceGroupName), 168 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 169 } 170 171 const APIVersion = "2017-10-01-preview" 172 queryParameters := map[string]interface{}{ 173 "api-version": APIVersion, 174 } 175 176 preparer := autorest.CreatePreparer( 177 autorest.AsDelete(), 178 autorest.WithBaseURL(client.BaseURI), 179 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerInstance/containerGroups/{containerGroupName}", pathParameters), 180 autorest.WithQueryParameters(queryParameters)) 181 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 182} 183 184// DeleteSender sends the Delete request. The method will close the 185// http.Response Body if it receives an error. 186func (client ContainerGroupsClient) DeleteSender(req *http.Request) (*http.Response, error) { 187 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 188} 189 190// DeleteResponder handles the response to the Delete request. The method always 191// closes the http.Response Body. 192func (client ContainerGroupsClient) DeleteResponder(resp *http.Response) (result ContainerGroup, err error) { 193 err = autorest.Respond( 194 resp, 195 azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent), 196 autorest.ByUnmarshallingJSON(&result), 197 autorest.ByClosing()) 198 result.Response = autorest.Response{Response: resp} 199 return 200} 201 202// Get gets the properties of the specified container group in the specified subscription and resource group. The 203// operation returns the properties of each container group including containers, image registry credentials, restart 204// policy, IP address type, OS type, state, and volumes. 205// Parameters: 206// resourceGroupName - the name of the resource group. 207// containerGroupName - the name of the container group. 208func (client ContainerGroupsClient) Get(ctx context.Context, resourceGroupName string, containerGroupName string) (result ContainerGroup, err error) { 209 if tracing.IsEnabled() { 210 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.Get") 211 defer func() { 212 sc := -1 213 if result.Response.Response != nil { 214 sc = result.Response.Response.StatusCode 215 } 216 tracing.EndSpan(ctx, sc, err) 217 }() 218 } 219 req, err := client.GetPreparer(ctx, resourceGroupName, containerGroupName) 220 if err != nil { 221 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Get", nil, "Failure preparing request") 222 return 223 } 224 225 resp, err := client.GetSender(req) 226 if err != nil { 227 result.Response = autorest.Response{Response: resp} 228 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Get", resp, "Failure sending request") 229 return 230 } 231 232 result, err = client.GetResponder(resp) 233 if err != nil { 234 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "Get", resp, "Failure responding to request") 235 return 236 } 237 238 return 239} 240 241// GetPreparer prepares the Get request. 242func (client ContainerGroupsClient) GetPreparer(ctx context.Context, resourceGroupName string, containerGroupName string) (*http.Request, error) { 243 pathParameters := map[string]interface{}{ 244 "containerGroupName": autorest.Encode("path", containerGroupName), 245 "resourceGroupName": autorest.Encode("path", resourceGroupName), 246 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 247 } 248 249 const APIVersion = "2017-10-01-preview" 250 queryParameters := map[string]interface{}{ 251 "api-version": APIVersion, 252 } 253 254 preparer := autorest.CreatePreparer( 255 autorest.AsGet(), 256 autorest.WithBaseURL(client.BaseURI), 257 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerInstance/containerGroups/{containerGroupName}", pathParameters), 258 autorest.WithQueryParameters(queryParameters)) 259 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 260} 261 262// GetSender sends the Get request. The method will close the 263// http.Response Body if it receives an error. 264func (client ContainerGroupsClient) GetSender(req *http.Request) (*http.Response, error) { 265 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 266} 267 268// GetResponder handles the response to the Get request. The method always 269// closes the http.Response Body. 270func (client ContainerGroupsClient) GetResponder(resp *http.Response) (result ContainerGroup, err error) { 271 err = autorest.Respond( 272 resp, 273 azure.WithErrorUnlessStatusCode(http.StatusOK), 274 autorest.ByUnmarshallingJSON(&result), 275 autorest.ByClosing()) 276 result.Response = autorest.Response{Response: resp} 277 return 278} 279 280// List get a list of container groups in the specified subscription. This operation returns properties of each 281// container group including containers, image registry credentials, restart policy, IP address type, OS type, state, 282// and volumes. 283func (client ContainerGroupsClient) List(ctx context.Context) (result ContainerGroupListResultPage, err error) { 284 if tracing.IsEnabled() { 285 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.List") 286 defer func() { 287 sc := -1 288 if result.cglr.Response.Response != nil { 289 sc = result.cglr.Response.Response.StatusCode 290 } 291 tracing.EndSpan(ctx, sc, err) 292 }() 293 } 294 result.fn = client.listNextResults 295 req, err := client.ListPreparer(ctx) 296 if err != nil { 297 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "List", nil, "Failure preparing request") 298 return 299 } 300 301 resp, err := client.ListSender(req) 302 if err != nil { 303 result.cglr.Response = autorest.Response{Response: resp} 304 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "List", resp, "Failure sending request") 305 return 306 } 307 308 result.cglr, err = client.ListResponder(resp) 309 if err != nil { 310 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "List", resp, "Failure responding to request") 311 return 312 } 313 if result.cglr.hasNextLink() && result.cglr.IsEmpty() { 314 err = result.NextWithContext(ctx) 315 return 316 } 317 318 return 319} 320 321// ListPreparer prepares the List request. 322func (client ContainerGroupsClient) ListPreparer(ctx context.Context) (*http.Request, error) { 323 pathParameters := map[string]interface{}{ 324 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 325 } 326 327 const APIVersion = "2017-10-01-preview" 328 queryParameters := map[string]interface{}{ 329 "api-version": APIVersion, 330 } 331 332 preparer := autorest.CreatePreparer( 333 autorest.AsGet(), 334 autorest.WithBaseURL(client.BaseURI), 335 autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.ContainerInstance/containerGroups", pathParameters), 336 autorest.WithQueryParameters(queryParameters)) 337 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 338} 339 340// ListSender sends the List request. The method will close the 341// http.Response Body if it receives an error. 342func (client ContainerGroupsClient) ListSender(req *http.Request) (*http.Response, error) { 343 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 344} 345 346// ListResponder handles the response to the List request. The method always 347// closes the http.Response Body. 348func (client ContainerGroupsClient) ListResponder(resp *http.Response) (result ContainerGroupListResult, err error) { 349 err = autorest.Respond( 350 resp, 351 azure.WithErrorUnlessStatusCode(http.StatusOK), 352 autorest.ByUnmarshallingJSON(&result), 353 autorest.ByClosing()) 354 result.Response = autorest.Response{Response: resp} 355 return 356} 357 358// listNextResults retrieves the next set of results, if any. 359func (client ContainerGroupsClient) listNextResults(ctx context.Context, lastResults ContainerGroupListResult) (result ContainerGroupListResult, err error) { 360 req, err := lastResults.containerGroupListResultPreparer(ctx) 361 if err != nil { 362 return result, autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listNextResults", nil, "Failure preparing next results request") 363 } 364 if req == nil { 365 return 366 } 367 resp, err := client.ListSender(req) 368 if err != nil { 369 result.Response = autorest.Response{Response: resp} 370 return result, autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listNextResults", resp, "Failure sending next results request") 371 } 372 result, err = client.ListResponder(resp) 373 if err != nil { 374 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listNextResults", resp, "Failure responding to next results request") 375 } 376 return 377} 378 379// ListComplete enumerates all values, automatically crossing page boundaries as required. 380func (client ContainerGroupsClient) ListComplete(ctx context.Context) (result ContainerGroupListResultIterator, err error) { 381 if tracing.IsEnabled() { 382 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.List") 383 defer func() { 384 sc := -1 385 if result.Response().Response.Response != nil { 386 sc = result.page.Response().Response.Response.StatusCode 387 } 388 tracing.EndSpan(ctx, sc, err) 389 }() 390 } 391 result.page, err = client.List(ctx) 392 return 393} 394 395// ListByResourceGroup get a list of container groups in a specified subscription and resource group. This operation 396// returns properties of each container group including containers, image registry credentials, restart policy, IP 397// address type, OS type, state, and volumes. 398// Parameters: 399// resourceGroupName - the name of the resource group. 400func (client ContainerGroupsClient) ListByResourceGroup(ctx context.Context, resourceGroupName string) (result ContainerGroupListResultPage, err error) { 401 if tracing.IsEnabled() { 402 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.ListByResourceGroup") 403 defer func() { 404 sc := -1 405 if result.cglr.Response.Response != nil { 406 sc = result.cglr.Response.Response.StatusCode 407 } 408 tracing.EndSpan(ctx, sc, err) 409 }() 410 } 411 result.fn = client.listByResourceGroupNextResults 412 req, err := client.ListByResourceGroupPreparer(ctx, resourceGroupName) 413 if err != nil { 414 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "ListByResourceGroup", nil, "Failure preparing request") 415 return 416 } 417 418 resp, err := client.ListByResourceGroupSender(req) 419 if err != nil { 420 result.cglr.Response = autorest.Response{Response: resp} 421 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "ListByResourceGroup", resp, "Failure sending request") 422 return 423 } 424 425 result.cglr, err = client.ListByResourceGroupResponder(resp) 426 if err != nil { 427 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "ListByResourceGroup", resp, "Failure responding to request") 428 return 429 } 430 if result.cglr.hasNextLink() && result.cglr.IsEmpty() { 431 err = result.NextWithContext(ctx) 432 return 433 } 434 435 return 436} 437 438// ListByResourceGroupPreparer prepares the ListByResourceGroup request. 439func (client ContainerGroupsClient) ListByResourceGroupPreparer(ctx context.Context, resourceGroupName string) (*http.Request, error) { 440 pathParameters := map[string]interface{}{ 441 "resourceGroupName": autorest.Encode("path", resourceGroupName), 442 "subscriptionId": autorest.Encode("path", client.SubscriptionID), 443 } 444 445 const APIVersion = "2017-10-01-preview" 446 queryParameters := map[string]interface{}{ 447 "api-version": APIVersion, 448 } 449 450 preparer := autorest.CreatePreparer( 451 autorest.AsGet(), 452 autorest.WithBaseURL(client.BaseURI), 453 autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerInstance/containerGroups", pathParameters), 454 autorest.WithQueryParameters(queryParameters)) 455 return preparer.Prepare((&http.Request{}).WithContext(ctx)) 456} 457 458// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the 459// http.Response Body if it receives an error. 460func (client ContainerGroupsClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) { 461 return client.Send(req, azure.DoRetryWithRegistration(client.Client)) 462} 463 464// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always 465// closes the http.Response Body. 466func (client ContainerGroupsClient) ListByResourceGroupResponder(resp *http.Response) (result ContainerGroupListResult, err error) { 467 err = autorest.Respond( 468 resp, 469 azure.WithErrorUnlessStatusCode(http.StatusOK), 470 autorest.ByUnmarshallingJSON(&result), 471 autorest.ByClosing()) 472 result.Response = autorest.Response{Response: resp} 473 return 474} 475 476// listByResourceGroupNextResults retrieves the next set of results, if any. 477func (client ContainerGroupsClient) listByResourceGroupNextResults(ctx context.Context, lastResults ContainerGroupListResult) (result ContainerGroupListResult, err error) { 478 req, err := lastResults.containerGroupListResultPreparer(ctx) 479 if err != nil { 480 return result, autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listByResourceGroupNextResults", nil, "Failure preparing next results request") 481 } 482 if req == nil { 483 return 484 } 485 resp, err := client.ListByResourceGroupSender(req) 486 if err != nil { 487 result.Response = autorest.Response{Response: resp} 488 return result, autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listByResourceGroupNextResults", resp, "Failure sending next results request") 489 } 490 result, err = client.ListByResourceGroupResponder(resp) 491 if err != nil { 492 err = autorest.NewErrorWithError(err, "containerinstance.ContainerGroupsClient", "listByResourceGroupNextResults", resp, "Failure responding to next results request") 493 } 494 return 495} 496 497// ListByResourceGroupComplete enumerates all values, automatically crossing page boundaries as required. 498func (client ContainerGroupsClient) ListByResourceGroupComplete(ctx context.Context, resourceGroupName string) (result ContainerGroupListResultIterator, err error) { 499 if tracing.IsEnabled() { 500 ctx = tracing.StartSpan(ctx, fqdn+"/ContainerGroupsClient.ListByResourceGroup") 501 defer func() { 502 sc := -1 503 if result.Response().Response.Response != nil { 504 sc = result.page.Response().Response.Response.StatusCode 505 } 506 tracing.EndSpan(ctx, sc, err) 507 }() 508 } 509 result.page, err = client.ListByResourceGroup(ctx, resourceGroupName) 510 return 511} 512