Add in build files.
This commit is contained in:
committed by
Brendan Burns
parent
3856267b5b
commit
0d26b36c66
30
vendor/bitbucket.org/bertimus9/systemstat/BUILD
generated
vendored
Normal file
30
vendor/bitbucket.org/bertimus9/systemstat/BUILD
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"systemstat.go",
|
||||||
|
"systemstat_linux.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/bitbucket.org/ww/goautoneg/BUILD
generated
vendored
Normal file
27
vendor/bitbucket.org/ww/goautoneg/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["autoneg.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
32
vendor/cloud.google.com/go/compute/metadata/BUILD
generated
vendored
Normal file
32
vendor/cloud.google.com/go/compute/metadata/BUILD
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["metadata.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/cloud.google.com/go/internal:go_default_library",
|
||||||
|
"//vendor/golang.org/x/net/context:go_default_library",
|
||||||
|
"//vendor/golang.org/x/net/context/ctxhttp:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/cloud.google.com/go/internal/BUILD
generated
vendored
Normal file
27
vendor/cloud.google.com/go/internal/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["cloud.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
48
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/BUILD
generated
vendored
Normal file
48
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/BUILD
generated
vendored
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"availabilitysets.go",
|
||||||
|
"client.go",
|
||||||
|
"images.go",
|
||||||
|
"models.go",
|
||||||
|
"usage.go",
|
||||||
|
"version.go",
|
||||||
|
"virtualmachineextensionimages.go",
|
||||||
|
"virtualmachineextensions.go",
|
||||||
|
"virtualmachineimages.go",
|
||||||
|
"virtualmachines.go",
|
||||||
|
"virtualmachinescalesets.go",
|
||||||
|
"virtualmachinescalesetvms.go",
|
||||||
|
"virtualmachinesizes.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
463
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/images.go
generated
vendored
Executable file
463
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/images.go
generated
vendored
Executable file
@@ -0,0 +1,463 @@
|
|||||||
|
package compute
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ImagesClient is the the Compute Management Client.
|
||||||
|
type ImagesClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewImagesClient creates an instance of the ImagesClient client.
|
||||||
|
func NewImagesClient(subscriptionID string) ImagesClient {
|
||||||
|
return NewImagesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewImagesClientWithBaseURI creates an instance of the ImagesClient client.
|
||||||
|
func NewImagesClientWithBaseURI(baseURI string, subscriptionID string) ImagesClient {
|
||||||
|
return ImagesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdate create or update an image. This method may poll for
|
||||||
|
// completion. Polling can be canceled by passing the cancel channel argument.
|
||||||
|
// The channel will be used to cancel polling and any outstanding HTTP
|
||||||
|
// requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. imageName is the name
|
||||||
|
// of the image. parameters is parameters supplied to the Create Image
|
||||||
|
// operation.
|
||||||
|
func (client ImagesClient) CreateOrUpdate(resourceGroupName string, imageName string, parameters Image, cancel <-chan struct{}) (<-chan Image, <-chan error) {
|
||||||
|
resultChan := make(chan Image, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: parameters,
|
||||||
|
Constraints: []validation.Constraint{{Target: "parameters.ImageProperties", Name: validation.Null, Rule: false,
|
||||||
|
Chain: []validation.Constraint{{Target: "parameters.ImageProperties.StorageProfile", Name: validation.Null, Rule: false,
|
||||||
|
Chain: []validation.Constraint{{Target: "parameters.ImageProperties.StorageProfile.OsDisk", Name: validation.Null, Rule: true, Chain: nil}}},
|
||||||
|
}}}}}); err != nil {
|
||||||
|
errChan <- validation.NewErrorWithValidationError(err, "compute.ImagesClient", "CreateOrUpdate")
|
||||||
|
close(errChan)
|
||||||
|
close(resultChan)
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result Image
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.CreateOrUpdatePreparer(resourceGroupName, imageName, parameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.CreateOrUpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.CreateOrUpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "CreateOrUpdate", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
|
||||||
|
func (client ImagesClient) CreateOrUpdatePreparer(resourceGroupName string, imageName string, parameters Image, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"imageName": autorest.Encode("path", imageName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPut(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters),
|
||||||
|
autorest.WithJSON(parameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ImagesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ImagesClient) CreateOrUpdateResponder(resp *http.Response) (result Image, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes an Image. This method may poll for completion. Polling can be
|
||||||
|
// canceled by passing the cancel channel argument. The channel will be used to
|
||||||
|
// cancel polling and any outstanding HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. imageName is the name
|
||||||
|
// of the image.
|
||||||
|
func (client ImagesClient) Delete(resourceGroupName string, imageName string, cancel <-chan struct{}) (<-chan OperationStatusResponse, <-chan error) {
|
||||||
|
resultChan := make(chan OperationStatusResponse, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result OperationStatusResponse
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.DeletePreparer(resourceGroupName, imageName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.DeleteSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.DeleteResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Delete", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePreparer prepares the Delete request.
|
||||||
|
func (client ImagesClient) DeletePreparer(resourceGroupName string, imageName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"imageName": autorest.Encode("path", imageName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsDelete(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ImagesClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ImagesClient) DeleteResponder(resp *http.Response) (result OperationStatusResponse, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted, http.StatusNoContent),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets an image.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. imageName is the name
|
||||||
|
// of the image. expand is the expand expression to apply on the operation.
|
||||||
|
func (client ImagesClient) Get(resourceGroupName string, imageName string, expand string) (result Image, err error) {
|
||||||
|
req, err := client.GetPreparer(resourceGroupName, imageName, expand)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "Get", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPreparer prepares the Get request.
|
||||||
|
func (client ImagesClient) GetPreparer(resourceGroupName string, imageName string, expand string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"imageName": autorest.Encode("path", imageName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
if len(expand) > 0 {
|
||||||
|
queryParameters["$expand"] = autorest.Encode("query", expand)
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images/{imageName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSender sends the Get request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ImagesClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ImagesClient) GetResponder(resp *http.Response) (result Image, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets the list of Images in the subscription. Use nextLink property in
|
||||||
|
// the response to get the next page of Images. Do this till nextLink is not
|
||||||
|
// null to fetch all the Images.
|
||||||
|
func (client ImagesClient) List() (result ImageListResult, err error) {
|
||||||
|
req, err := client.ListPreparer()
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client ImagesClient) ListPreparer() (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/images", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ImagesClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ImagesClient) ListResponder(resp *http.Response) (result ImageListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListNextResults retrieves the next set of results, if any.
|
||||||
|
func (client ImagesClient) ListNextResults(lastResults ImageListResult) (result ImageListResult, err error) {
|
||||||
|
req, err := lastResults.ImageListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "List", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "List", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroup gets the list of images under a resource group.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group.
|
||||||
|
func (client ImagesClient) ListByResourceGroup(resourceGroupName string) (result ImageListResult, err error) {
|
||||||
|
req, err := client.ListByResourceGroupPreparer(resourceGroupName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByResourceGroupSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByResourceGroupResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
|
||||||
|
func (client ImagesClient) ListByResourceGroupPreparer(resourceGroupName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/images", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ImagesClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ImagesClient) ListByResourceGroupResponder(resp *http.Response) (result ImageListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupNextResults retrieves the next set of results, if any.
|
||||||
|
func (client ImagesClient) ListByResourceGroupNextResults(lastResults ImageListResult) (result ImageListResult, err error) {
|
||||||
|
req, err := lastResults.ImageListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByResourceGroupSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByResourceGroupResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.ImagesClient", "ListByResourceGroup", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
137
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/usage.go
generated
vendored
Executable file
137
vendor/github.com/Azure/azure-sdk-for-go/arm/compute/usage.go
generated
vendored
Executable file
@@ -0,0 +1,137 @@
|
|||||||
|
package compute
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UsageClient is the the Compute Management Client.
|
||||||
|
type UsageClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsageClient creates an instance of the UsageClient client.
|
||||||
|
func NewUsageClient(subscriptionID string) UsageClient {
|
||||||
|
return NewUsageClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsageClientWithBaseURI creates an instance of the UsageClient client.
|
||||||
|
func NewUsageClientWithBaseURI(baseURI string, subscriptionID string) UsageClient {
|
||||||
|
return UsageClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets, for the specified location, the current compute resource usage
|
||||||
|
// information as well as the limits for compute resources under the
|
||||||
|
// subscription.
|
||||||
|
//
|
||||||
|
// location is the location for which resource usage is queried.
|
||||||
|
func (client UsageClient) List(location string) (result ListUsagesResult, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: location,
|
||||||
|
Constraints: []validation.Constraint{{Target: "location", Name: validation.Pattern, Rule: `^[-\w\._]+$`, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewErrorWithValidationError(err, "compute.UsageClient", "List")
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := client.ListPreparer(location)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client UsageClient) ListPreparer(location string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"location": autorest.Encode("path", location),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-04-30-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Compute/locations/{location}/usages", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client UsageClient) ListResponder(resp *http.Response) (result ListUsagesResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListNextResults retrieves the next set of results, if any.
|
||||||
|
func (client UsageClient) ListNextResults(lastResults ListUsagesResult) (result ListUsagesResult, err error) {
|
||||||
|
req, err := lastResults.ListUsagesResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.UsageClient", "List", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "compute.UsageClient", "List", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
40
vendor/github.com/Azure/azure-sdk-for-go/arm/containerregistry/BUILD
generated
vendored
Normal file
40
vendor/github.com/Azure/azure-sdk-for-go/arm/containerregistry/BUILD
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"client.go",
|
||||||
|
"models.go",
|
||||||
|
"operations.go",
|
||||||
|
"registries.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
124
vendor/github.com/Azure/azure-sdk-for-go/arm/containerregistry/operations.go
generated
vendored
Executable file
124
vendor/github.com/Azure/azure-sdk-for-go/arm/containerregistry/operations.go
generated
vendored
Executable file
@@ -0,0 +1,124 @@
|
|||||||
|
package containerregistry
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OperationsClient is the client for the Operations methods of the
|
||||||
|
// Containerregistry service.
|
||||||
|
type OperationsClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewOperationsClient creates an instance of the OperationsClient client.
|
||||||
|
func NewOperationsClient(subscriptionID string) OperationsClient {
|
||||||
|
return NewOperationsClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewOperationsClientWithBaseURI creates an instance of the OperationsClient
|
||||||
|
// client.
|
||||||
|
func NewOperationsClientWithBaseURI(baseURI string, subscriptionID string) OperationsClient {
|
||||||
|
return OperationsClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List lists all of the available Azure Container Registry REST API
|
||||||
|
// operations.
|
||||||
|
func (client OperationsClient) List() (result OperationListResult, err error) {
|
||||||
|
req, err := client.ListPreparer()
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client OperationsClient) ListPreparer() (*http.Request, error) {
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPath("/providers/Microsoft.ContainerRegistry/operations"),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client OperationsClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client OperationsClient) ListResponder(resp *http.Response) (result OperationListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListNextResults retrieves the next set of results, if any.
|
||||||
|
func (client OperationsClient) ListNextResults(lastResults OperationListResult) (result OperationListResult, err error) {
|
||||||
|
req, err := lastResults.OperationListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "containerregistry.OperationsClient", "List", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
62
vendor/github.com/Azure/azure-sdk-for-go/arm/network/BUILD
generated
vendored
Normal file
62
vendor/github.com/Azure/azure-sdk-for-go/arm/network/BUILD
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"applicationgateways.go",
|
||||||
|
"bgpservicecommunities.go",
|
||||||
|
"client.go",
|
||||||
|
"expressroutecircuitauthorizations.go",
|
||||||
|
"expressroutecircuitpeerings.go",
|
||||||
|
"expressroutecircuits.go",
|
||||||
|
"expressrouteserviceproviders.go",
|
||||||
|
"interfaces.go",
|
||||||
|
"loadbalancers.go",
|
||||||
|
"localnetworkgateways.go",
|
||||||
|
"models.go",
|
||||||
|
"packetcaptures.go",
|
||||||
|
"publicipaddresses.go",
|
||||||
|
"routefilterrules.go",
|
||||||
|
"routefilters.go",
|
||||||
|
"routes.go",
|
||||||
|
"routetables.go",
|
||||||
|
"securitygroups.go",
|
||||||
|
"securityrules.go",
|
||||||
|
"subnets.go",
|
||||||
|
"usages.go",
|
||||||
|
"version.go",
|
||||||
|
"virtualnetworkgatewayconnections.go",
|
||||||
|
"virtualnetworkgateways.go",
|
||||||
|
"virtualnetworkpeerings.go",
|
||||||
|
"virtualnetworks.go",
|
||||||
|
"watchers.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
127
vendor/github.com/Azure/azure-sdk-for-go/arm/network/bgpservicecommunities.go
generated
vendored
Executable file
127
vendor/github.com/Azure/azure-sdk-for-go/arm/network/bgpservicecommunities.go
generated
vendored
Executable file
@@ -0,0 +1,127 @@
|
|||||||
|
package network
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BgpServiceCommunitiesClient is the composite Swagger for Network Client
|
||||||
|
type BgpServiceCommunitiesClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBgpServiceCommunitiesClient creates an instance of the
|
||||||
|
// BgpServiceCommunitiesClient client.
|
||||||
|
func NewBgpServiceCommunitiesClient(subscriptionID string) BgpServiceCommunitiesClient {
|
||||||
|
return NewBgpServiceCommunitiesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBgpServiceCommunitiesClientWithBaseURI creates an instance of the
|
||||||
|
// BgpServiceCommunitiesClient client.
|
||||||
|
func NewBgpServiceCommunitiesClientWithBaseURI(baseURI string, subscriptionID string) BgpServiceCommunitiesClient {
|
||||||
|
return BgpServiceCommunitiesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets all the available bgp service communities.
|
||||||
|
func (client BgpServiceCommunitiesClient) List() (result BgpServiceCommunityListResult, err error) {
|
||||||
|
req, err := client.ListPreparer()
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client BgpServiceCommunitiesClient) ListPreparer() (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/bgpServiceCommunities", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client BgpServiceCommunitiesClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client BgpServiceCommunitiesClient) ListResponder(resp *http.Response) (result BgpServiceCommunityListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListNextResults retrieves the next set of results, if any.
|
||||||
|
func (client BgpServiceCommunitiesClient) ListNextResults(lastResults BgpServiceCommunityListResult) (result BgpServiceCommunityListResult, err error) {
|
||||||
|
req, err := lastResults.BgpServiceCommunityListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.BgpServiceCommunitiesClient", "List", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
526
vendor/github.com/Azure/azure-sdk-for-go/arm/network/packetcaptures.go
generated
vendored
Executable file
526
vendor/github.com/Azure/azure-sdk-for-go/arm/network/packetcaptures.go
generated
vendored
Executable file
@@ -0,0 +1,526 @@
|
|||||||
|
package network
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PacketCapturesClient is the composite Swagger for Network Client
|
||||||
|
type PacketCapturesClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPacketCapturesClient creates an instance of the PacketCapturesClient
|
||||||
|
// client.
|
||||||
|
func NewPacketCapturesClient(subscriptionID string) PacketCapturesClient {
|
||||||
|
return NewPacketCapturesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewPacketCapturesClientWithBaseURI creates an instance of the
|
||||||
|
// PacketCapturesClient client.
|
||||||
|
func NewPacketCapturesClientWithBaseURI(baseURI string, subscriptionID string) PacketCapturesClient {
|
||||||
|
return PacketCapturesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create create and start a packet capture on the specified VM. This method
|
||||||
|
// may poll for completion. Polling can be canceled by passing the cancel
|
||||||
|
// channel argument. The channel will be used to cancel polling and any
|
||||||
|
// outstanding HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the network watcher. packetCaptureName is the name of the packet
|
||||||
|
// capture session. parameters is parameters that define the create packet
|
||||||
|
// capture operation.
|
||||||
|
func (client PacketCapturesClient) Create(resourceGroupName string, networkWatcherName string, packetCaptureName string, parameters PacketCapture, cancel <-chan struct{}) (<-chan PacketCaptureResult, <-chan error) {
|
||||||
|
resultChan := make(chan PacketCaptureResult, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: parameters,
|
||||||
|
Constraints: []validation.Constraint{{Target: "parameters.PacketCaptureParameters", Name: validation.Null, Rule: true,
|
||||||
|
Chain: []validation.Constraint{{Target: "parameters.PacketCaptureParameters.Target", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
|
{Target: "parameters.PacketCaptureParameters.StorageLocation", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
|
}}}}}); err != nil {
|
||||||
|
errChan <- validation.NewErrorWithValidationError(err, "network.PacketCapturesClient", "Create")
|
||||||
|
close(errChan)
|
||||||
|
close(resultChan)
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result PacketCaptureResult
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.CreatePreparer(resourceGroupName, networkWatcherName, packetCaptureName, parameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Create", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.CreateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Create", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.CreateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Create", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreatePreparer prepares the Create request.
|
||||||
|
func (client PacketCapturesClient) CreatePreparer(resourceGroupName string, networkWatcherName string, packetCaptureName string, parameters PacketCapture, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"packetCaptureName": autorest.Encode("path", packetCaptureName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPut(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}", pathParameters),
|
||||||
|
autorest.WithJSON(parameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateSender sends the Create request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) CreateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateResponder handles the response to the Create request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) CreateResponder(resp *http.Response) (result PacketCaptureResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the specified packet capture session. This method may poll
|
||||||
|
// for completion. Polling can be canceled by passing the cancel channel
|
||||||
|
// argument. The channel will be used to cancel polling and any outstanding
|
||||||
|
// HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the network watcher. packetCaptureName is the name of the packet
|
||||||
|
// capture session.
|
||||||
|
func (client PacketCapturesClient) Delete(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) {
|
||||||
|
resultChan := make(chan autorest.Response, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result autorest.Response
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.DeletePreparer(resourceGroupName, networkWatcherName, packetCaptureName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Delete", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.DeleteSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = resp
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Delete", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.DeleteResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Delete", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePreparer prepares the Delete request.
|
||||||
|
func (client PacketCapturesClient) DeletePreparer(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"packetCaptureName": autorest.Encode("path", packetCaptureName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsDelete(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent, http.StatusAccepted),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = resp
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets a packet capture session by name.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the network watcher. packetCaptureName is the name of the packet
|
||||||
|
// capture session.
|
||||||
|
func (client PacketCapturesClient) Get(resourceGroupName string, networkWatcherName string, packetCaptureName string) (result PacketCaptureResult, err error) {
|
||||||
|
req, err := client.GetPreparer(resourceGroupName, networkWatcherName, packetCaptureName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Get", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Get", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Get", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPreparer prepares the Get request.
|
||||||
|
func (client PacketCapturesClient) GetPreparer(resourceGroupName string, networkWatcherName string, packetCaptureName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"packetCaptureName": autorest.Encode("path", packetCaptureName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSender sends the Get request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) GetResponder(resp *http.Response) (result PacketCaptureResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStatus query the status of a running packet capture session. This method
|
||||||
|
// may poll for completion. Polling can be canceled by passing the cancel
|
||||||
|
// channel argument. The channel will be used to cancel polling and any
|
||||||
|
// outstanding HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the Network Watcher resource. packetCaptureName is the name
|
||||||
|
// given to the packet capture session.
|
||||||
|
func (client PacketCapturesClient) GetStatus(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (<-chan PacketCaptureQueryStatusResult, <-chan error) {
|
||||||
|
resultChan := make(chan PacketCaptureQueryStatusResult, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result PacketCaptureQueryStatusResult
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.GetStatusPreparer(resourceGroupName, networkWatcherName, packetCaptureName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "GetStatus", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetStatusSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "GetStatus", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetStatusResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "GetStatus", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStatusPreparer prepares the GetStatus request.
|
||||||
|
func (client PacketCapturesClient) GetStatusPreparer(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"packetCaptureName": autorest.Encode("path", packetCaptureName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsPost(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}/queryStatus", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStatusSender sends the GetStatus request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) GetStatusSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetStatusResponder handles the response to the GetStatus request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) GetStatusResponder(resp *http.Response) (result PacketCaptureQueryStatusResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// List lists all packet capture sessions within the specified resource group.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the Network Watcher resource.
|
||||||
|
func (client PacketCapturesClient) List(resourceGroupName string, networkWatcherName string) (result PacketCaptureListResult, err error) {
|
||||||
|
req, err := client.ListPreparer(resourceGroupName, networkWatcherName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client PacketCapturesClient) ListPreparer(resourceGroupName string, networkWatcherName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) ListResponder(resp *http.Response) (result PacketCaptureListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop stops a specified packet capture session. This method may poll for
|
||||||
|
// completion. Polling can be canceled by passing the cancel channel argument.
|
||||||
|
// The channel will be used to cancel polling and any outstanding HTTP
|
||||||
|
// requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. networkWatcherName is
|
||||||
|
// the name of the network watcher. packetCaptureName is the name of the packet
|
||||||
|
// capture session.
|
||||||
|
func (client PacketCapturesClient) Stop(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) {
|
||||||
|
resultChan := make(chan autorest.Response, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result autorest.Response
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.StopPreparer(resourceGroupName, networkWatcherName, packetCaptureName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Stop", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.StopSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = resp
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Stop", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.StopResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.PacketCapturesClient", "Stop", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// StopPreparer prepares the Stop request.
|
||||||
|
func (client PacketCapturesClient) StopPreparer(resourceGroupName string, networkWatcherName string, packetCaptureName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"networkWatcherName": autorest.Encode("path", networkWatcherName),
|
||||||
|
"packetCaptureName": autorest.Encode("path", packetCaptureName),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsPost(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/networkWatchers/{networkWatcherName}/packetCaptures/{packetCaptureName}/stop", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// StopSender sends the Stop request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client PacketCapturesClient) StopSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// StopResponder handles the response to the Stop request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client PacketCapturesClient) StopResponder(resp *http.Response) (result autorest.Response, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusAccepted),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = resp
|
||||||
|
return
|
||||||
|
}
|
||||||
468
vendor/github.com/Azure/azure-sdk-for-go/arm/network/routefilterrules.go
generated
vendored
Executable file
468
vendor/github.com/Azure/azure-sdk-for-go/arm/network/routefilterrules.go
generated
vendored
Executable file
@@ -0,0 +1,468 @@
|
|||||||
|
package network
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RouteFilterRulesClient is the composite Swagger for Network Client
|
||||||
|
type RouteFilterRulesClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRouteFilterRulesClient creates an instance of the RouteFilterRulesClient
|
||||||
|
// client.
|
||||||
|
func NewRouteFilterRulesClient(subscriptionID string) RouteFilterRulesClient {
|
||||||
|
return NewRouteFilterRulesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRouteFilterRulesClientWithBaseURI creates an instance of the
|
||||||
|
// RouteFilterRulesClient client.
|
||||||
|
func NewRouteFilterRulesClientWithBaseURI(baseURI string, subscriptionID string) RouteFilterRulesClient {
|
||||||
|
return RouteFilterRulesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdate creates or updates a route in the specified route filter.
|
||||||
|
// This method may poll for completion. Polling can be canceled by passing the
|
||||||
|
// cancel channel argument. The channel will be used to cancel polling and any
|
||||||
|
// outstanding HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. ruleName is the name of the route filter rule.
|
||||||
|
// routeFilterRuleParameters is parameters supplied to the create or update
|
||||||
|
// route filter rule operation.
|
||||||
|
func (client RouteFilterRulesClient) CreateOrUpdate(resourceGroupName string, routeFilterName string, ruleName string, routeFilterRuleParameters RouteFilterRule, cancel <-chan struct{}) (<-chan RouteFilterRule, <-chan error) {
|
||||||
|
resultChan := make(chan RouteFilterRule, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: routeFilterRuleParameters,
|
||||||
|
Constraints: []validation.Constraint{{Target: "routeFilterRuleParameters.RouteFilterRulePropertiesFormat", Name: validation.Null, Rule: false,
|
||||||
|
Chain: []validation.Constraint{{Target: "routeFilterRuleParameters.RouteFilterRulePropertiesFormat.RouteFilterRuleType", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
|
{Target: "routeFilterRuleParameters.RouteFilterRulePropertiesFormat.Communities", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
|
}}}}}); err != nil {
|
||||||
|
errChan <- validation.NewErrorWithValidationError(err, "network.RouteFilterRulesClient", "CreateOrUpdate")
|
||||||
|
close(errChan)
|
||||||
|
close(resultChan)
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result RouteFilterRule
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.CreateOrUpdatePreparer(resourceGroupName, routeFilterName, ruleName, routeFilterRuleParameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "CreateOrUpdate", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.CreateOrUpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "CreateOrUpdate", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.CreateOrUpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "CreateOrUpdate", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
|
||||||
|
func (client RouteFilterRulesClient) CreateOrUpdatePreparer(resourceGroupName string, routeFilterName string, ruleName string, routeFilterRuleParameters RouteFilterRule, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"ruleName": autorest.Encode("path", ruleName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPut(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}/routeFilterRules/{ruleName}", pathParameters),
|
||||||
|
autorest.WithJSON(routeFilterRuleParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFilterRulesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFilterRulesClient) CreateOrUpdateResponder(resp *http.Response) (result RouteFilterRule, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the specified rule from a route filter. This method may poll
|
||||||
|
// for completion. Polling can be canceled by passing the cancel channel
|
||||||
|
// argument. The channel will be used to cancel polling and any outstanding
|
||||||
|
// HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. ruleName is the name of the rule.
|
||||||
|
func (client RouteFilterRulesClient) Delete(resourceGroupName string, routeFilterName string, ruleName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) {
|
||||||
|
resultChan := make(chan autorest.Response, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result autorest.Response
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.DeletePreparer(resourceGroupName, routeFilterName, ruleName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Delete", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.DeleteSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = resp
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Delete", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.DeleteResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Delete", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePreparer prepares the Delete request.
|
||||||
|
func (client RouteFilterRulesClient) DeletePreparer(resourceGroupName string, routeFilterName string, ruleName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"ruleName": autorest.Encode("path", ruleName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsDelete(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}/routeFilterRules/{ruleName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFilterRulesClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFilterRulesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusAccepted, http.StatusOK, http.StatusNoContent),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = resp
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets the specified rule from a route filter.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. ruleName is the name of the rule.
|
||||||
|
func (client RouteFilterRulesClient) Get(resourceGroupName string, routeFilterName string, ruleName string) (result RouteFilterRule, err error) {
|
||||||
|
req, err := client.GetPreparer(resourceGroupName, routeFilterName, ruleName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Get", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Get", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Get", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPreparer prepares the Get request.
|
||||||
|
func (client RouteFilterRulesClient) GetPreparer(resourceGroupName string, routeFilterName string, ruleName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"ruleName": autorest.Encode("path", ruleName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}/routeFilterRules/{ruleName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSender sends the Get request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFilterRulesClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFilterRulesClient) GetResponder(resp *http.Response) (result RouteFilterRule, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByRouteFilter gets all RouteFilterRules in a route filter.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter.
|
||||||
|
func (client RouteFilterRulesClient) ListByRouteFilter(resourceGroupName string, routeFilterName string) (result RouteFilterRuleListResult, err error) {
|
||||||
|
req, err := client.ListByRouteFilterPreparer(resourceGroupName, routeFilterName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByRouteFilterSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByRouteFilterResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByRouteFilterPreparer prepares the ListByRouteFilter request.
|
||||||
|
func (client RouteFilterRulesClient) ListByRouteFilterPreparer(resourceGroupName string, routeFilterName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}/routeFilterRules", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByRouteFilterSender sends the ListByRouteFilter request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFilterRulesClient) ListByRouteFilterSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByRouteFilterResponder handles the response to the ListByRouteFilter request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFilterRulesClient) ListByRouteFilterResponder(resp *http.Response) (result RouteFilterRuleListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByRouteFilterNextResults retrieves the next set of results, if any.
|
||||||
|
func (client RouteFilterRulesClient) ListByRouteFilterNextResults(lastResults RouteFilterRuleListResult) (result RouteFilterRuleListResult, err error) {
|
||||||
|
req, err := lastResults.RouteFilterRuleListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByRouteFilterSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByRouteFilterResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "ListByRouteFilter", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update updates a route in the specified route filter. This method may poll
|
||||||
|
// for completion. Polling can be canceled by passing the cancel channel
|
||||||
|
// argument. The channel will be used to cancel polling and any outstanding
|
||||||
|
// HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. ruleName is the name of the route filter rule.
|
||||||
|
// routeFilterRuleParameters is parameters supplied to the update route filter
|
||||||
|
// rule operation.
|
||||||
|
func (client RouteFilterRulesClient) Update(resourceGroupName string, routeFilterName string, ruleName string, routeFilterRuleParameters PatchRouteFilterRule, cancel <-chan struct{}) (<-chan RouteFilterRule, <-chan error) {
|
||||||
|
resultChan := make(chan RouteFilterRule, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result RouteFilterRule
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.UpdatePreparer(resourceGroupName, routeFilterName, ruleName, routeFilterRuleParameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Update", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.UpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Update", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.UpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFilterRulesClient", "Update", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePreparer prepares the Update request.
|
||||||
|
func (client RouteFilterRulesClient) UpdatePreparer(resourceGroupName string, routeFilterName string, ruleName string, routeFilterRuleParameters PatchRouteFilterRule, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"ruleName": autorest.Encode("path", ruleName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPatch(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}/routeFilterRules/{ruleName}", pathParameters),
|
||||||
|
autorest.WithJSON(routeFilterRuleParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSender sends the Update request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFilterRulesClient) UpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateResponder handles the response to the Update request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFilterRulesClient) UpdateResponder(resp *http.Response) (result RouteFilterRule, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
535
vendor/github.com/Azure/azure-sdk-for-go/arm/network/routefilters.go
generated
vendored
Executable file
535
vendor/github.com/Azure/azure-sdk-for-go/arm/network/routefilters.go
generated
vendored
Executable file
@@ -0,0 +1,535 @@
|
|||||||
|
package network
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// RouteFiltersClient is the composite Swagger for Network Client
|
||||||
|
type RouteFiltersClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRouteFiltersClient creates an instance of the RouteFiltersClient client.
|
||||||
|
func NewRouteFiltersClient(subscriptionID string) RouteFiltersClient {
|
||||||
|
return NewRouteFiltersClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewRouteFiltersClientWithBaseURI creates an instance of the
|
||||||
|
// RouteFiltersClient client.
|
||||||
|
func NewRouteFiltersClientWithBaseURI(baseURI string, subscriptionID string) RouteFiltersClient {
|
||||||
|
return RouteFiltersClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdate creates or updates a route filter in a specified resource
|
||||||
|
// group. This method may poll for completion. Polling can be canceled by
|
||||||
|
// passing the cancel channel argument. The channel will be used to cancel
|
||||||
|
// polling and any outstanding HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. routeFilterParameters is parameters supplied to
|
||||||
|
// the create or update route filter operation.
|
||||||
|
func (client RouteFiltersClient) CreateOrUpdate(resourceGroupName string, routeFilterName string, routeFilterParameters RouteFilter, cancel <-chan struct{}) (<-chan RouteFilter, <-chan error) {
|
||||||
|
resultChan := make(chan RouteFilter, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result RouteFilter
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.CreateOrUpdatePreparer(resourceGroupName, routeFilterName, routeFilterParameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "CreateOrUpdate", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.CreateOrUpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "CreateOrUpdate", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.CreateOrUpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "CreateOrUpdate", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
|
||||||
|
func (client RouteFiltersClient) CreateOrUpdatePreparer(resourceGroupName string, routeFilterName string, routeFilterParameters RouteFilter, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPut(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}", pathParameters),
|
||||||
|
autorest.WithJSON(routeFilterParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) CreateOrUpdateResponder(resp *http.Response) (result RouteFilter, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusCreated),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the specified route filter. This method may poll for
|
||||||
|
// completion. Polling can be canceled by passing the cancel channel argument.
|
||||||
|
// The channel will be used to cancel polling and any outstanding HTTP
|
||||||
|
// requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter.
|
||||||
|
func (client RouteFiltersClient) Delete(resourceGroupName string, routeFilterName string, cancel <-chan struct{}) (<-chan autorest.Response, <-chan error) {
|
||||||
|
resultChan := make(chan autorest.Response, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result autorest.Response
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.DeletePreparer(resourceGroupName, routeFilterName, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Delete", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.DeleteSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = resp
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Delete", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.DeleteResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Delete", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePreparer prepares the Delete request.
|
||||||
|
func (client RouteFiltersClient) DeletePreparer(resourceGroupName string, routeFilterName string, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsDelete(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusAccepted, http.StatusOK, http.StatusNoContent),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = resp
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets the specified route filter.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. expand is expands referenced express route bgp
|
||||||
|
// peering resources.
|
||||||
|
func (client RouteFiltersClient) Get(resourceGroupName string, routeFilterName string, expand string) (result RouteFilter, err error) {
|
||||||
|
req, err := client.GetPreparer(resourceGroupName, routeFilterName, expand)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Get", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Get", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Get", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPreparer prepares the Get request.
|
||||||
|
func (client RouteFiltersClient) GetPreparer(resourceGroupName string, routeFilterName string, expand string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
if len(expand) > 0 {
|
||||||
|
queryParameters["$expand"] = autorest.Encode("query", expand)
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSender sends the Get request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) GetResponder(resp *http.Response) (result RouteFilter, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets all route filters in a subscription.
|
||||||
|
func (client RouteFiltersClient) List() (result RouteFilterListResult, err error) {
|
||||||
|
req, err := client.ListPreparer()
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client RouteFiltersClient) ListPreparer() (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Network/routeFilters", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) ListResponder(resp *http.Response) (result RouteFilterListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListNextResults retrieves the next set of results, if any.
|
||||||
|
func (client RouteFiltersClient) ListNextResults(lastResults RouteFilterListResult) (result RouteFilterListResult, err error) {
|
||||||
|
req, err := lastResults.RouteFilterListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "List", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroup gets all route filters in a resource group.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group.
|
||||||
|
func (client RouteFiltersClient) ListByResourceGroup(resourceGroupName string) (result RouteFilterListResult, err error) {
|
||||||
|
req, err := client.ListByResourceGroupPreparer(resourceGroupName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByResourceGroupSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByResourceGroupResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupPreparer prepares the ListByResourceGroup request.
|
||||||
|
func (client RouteFiltersClient) ListByResourceGroupPreparer(resourceGroupName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupSender sends the ListByResourceGroup request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) ListByResourceGroupSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupResponder handles the response to the ListByResourceGroup request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) ListByResourceGroupResponder(resp *http.Response) (result RouteFilterListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByResourceGroupNextResults retrieves the next set of results, if any.
|
||||||
|
func (client RouteFiltersClient) ListByResourceGroupNextResults(lastResults RouteFilterListResult) (result RouteFilterListResult, err error) {
|
||||||
|
req, err := lastResults.RouteFilterListResultPreparer()
|
||||||
|
if err != nil {
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", nil, "Failure preparing next results request")
|
||||||
|
}
|
||||||
|
if req == nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByResourceGroupSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return result, autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", resp, "Failure sending next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByResourceGroupResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "ListByResourceGroup", resp, "Failure responding to next results request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update updates a route filter in a specified resource group. This method may
|
||||||
|
// poll for completion. Polling can be canceled by passing the cancel channel
|
||||||
|
// argument. The channel will be used to cancel polling and any outstanding
|
||||||
|
// HTTP requests.
|
||||||
|
//
|
||||||
|
// resourceGroupName is the name of the resource group. routeFilterName is the
|
||||||
|
// name of the route filter. routeFilterParameters is parameters supplied to
|
||||||
|
// the update route filter operation.
|
||||||
|
func (client RouteFiltersClient) Update(resourceGroupName string, routeFilterName string, routeFilterParameters PatchRouteFilter, cancel <-chan struct{}) (<-chan RouteFilter, <-chan error) {
|
||||||
|
resultChan := make(chan RouteFilter, 1)
|
||||||
|
errChan := make(chan error, 1)
|
||||||
|
go func() {
|
||||||
|
var err error
|
||||||
|
var result RouteFilter
|
||||||
|
defer func() {
|
||||||
|
resultChan <- result
|
||||||
|
errChan <- err
|
||||||
|
close(resultChan)
|
||||||
|
close(errChan)
|
||||||
|
}()
|
||||||
|
req, err := client.UpdatePreparer(resourceGroupName, routeFilterName, routeFilterParameters, cancel)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Update", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.UpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Update", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.UpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "network.RouteFiltersClient", "Update", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return resultChan, errChan
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdatePreparer prepares the Update request.
|
||||||
|
func (client RouteFiltersClient) UpdatePreparer(resourceGroupName string, routeFilterName string, routeFilterParameters PatchRouteFilter, cancel <-chan struct{}) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"routeFilterName": autorest.Encode("path", routeFilterName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2017-03-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsJSON(),
|
||||||
|
autorest.AsPatch(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/routeFilters/{routeFilterName}", pathParameters),
|
||||||
|
autorest.WithJSON(routeFilterParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{Cancel: cancel})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateSender sends the Update request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client RouteFiltersClient) UpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client,
|
||||||
|
req,
|
||||||
|
azure.DoPollForAsynchronous(client.PollingDelay))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateResponder handles the response to the Update request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client RouteFiltersClient) UpdateResponder(resp *http.Response) (result RouteFilter, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
1131
vendor/github.com/Azure/azure-sdk-for-go/arm/network/watchers.go
generated
vendored
Executable file
1131
vendor/github.com/Azure/azure-sdk-for-go/arm/network/watchers.go
generated
vendored
Executable file
File diff suppressed because it is too large
Load Diff
39
vendor/github.com/Azure/azure-sdk-for-go/arm/storage/BUILD
generated
vendored
Normal file
39
vendor/github.com/Azure/azure-sdk-for-go/arm/storage/BUILD
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"accounts.go",
|
||||||
|
"client.go",
|
||||||
|
"models.go",
|
||||||
|
"usage.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/validation:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
102
vendor/github.com/Azure/azure-sdk-for-go/arm/storage/usage.go
generated
vendored
Executable file
102
vendor/github.com/Azure/azure-sdk-for-go/arm/storage/usage.go
generated
vendored
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator 1.0.1.0
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is
|
||||||
|
// regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UsageClient is the the Azure Storage Management API.
|
||||||
|
type UsageClient struct {
|
||||||
|
ManagementClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsageClient creates an instance of the UsageClient client.
|
||||||
|
func NewUsageClient(subscriptionID string) UsageClient {
|
||||||
|
return NewUsageClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsageClientWithBaseURI creates an instance of the UsageClient client.
|
||||||
|
func NewUsageClientWithBaseURI(baseURI string, subscriptionID string) UsageClient {
|
||||||
|
return UsageClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets the current usage count and the limit for the resources under the
|
||||||
|
// subscription.
|
||||||
|
func (client UsageClient) List() (result UsageListResult, err error) {
|
||||||
|
req, err := client.ListPreparer()
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListPreparer prepares the List request.
|
||||||
|
func (client UsageClient) ListPreparer() (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2016-12-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare(&http.Request{})
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSender sends the List request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListResponder handles the response to the List request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client UsageClient) ListResponder(resp *http.Response) (result UsageListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
60
vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD
generated
vendored
Normal file
60
vendor/github.com/Azure/azure-sdk-for-go/storage/BUILD
generated
vendored
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"appendblob.go",
|
||||||
|
"authorization.go",
|
||||||
|
"blob.go",
|
||||||
|
"blobsasuri.go",
|
||||||
|
"blobserviceclient.go",
|
||||||
|
"blockblob.go",
|
||||||
|
"client.go",
|
||||||
|
"container.go",
|
||||||
|
"copyblob.go",
|
||||||
|
"directory.go",
|
||||||
|
"entity.go",
|
||||||
|
"file.go",
|
||||||
|
"fileserviceclient.go",
|
||||||
|
"leaseblob.go",
|
||||||
|
"message.go",
|
||||||
|
"odata.go",
|
||||||
|
"pageblob.go",
|
||||||
|
"queue.go",
|
||||||
|
"queueserviceclient.go",
|
||||||
|
"share.go",
|
||||||
|
"storagepolicy.go",
|
||||||
|
"storageservice.go",
|
||||||
|
"table.go",
|
||||||
|
"table_batch.go",
|
||||||
|
"tableserviceclient.go",
|
||||||
|
"util.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:go_default_library",
|
||||||
|
"//vendor/github.com/satori/uuid:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
70
vendor/github.com/Azure/azure-sdk-for-go/storage/appendblob.go
generated
vendored
Normal file
70
vendor/github.com/Azure/azure-sdk-for-go/storage/appendblob.go
generated
vendored
Normal file
@@ -0,0 +1,70 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// PutAppendBlob initializes an empty append blob with specified name. An
|
||||||
|
// append blob must be created using this method before appending blocks.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Blob
|
||||||
|
func (b *Blob) PutAppendBlob(options *PutBlobOptions) error {
|
||||||
|
params := url.Values{}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-blob-type"] = string(BlobTypeAppend)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(b.Properties))
|
||||||
|
headers = b.Container.bsc.client.addMetadataToHeaders(headers, b.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// AppendBlockOptions includes the options for an append block operation
|
||||||
|
type AppendBlockOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
MaxSize *uint `header:"x-ms-blob-condition-maxsize"`
|
||||||
|
AppendPosition *uint `header:"x-ms-blob-condition-appendpos"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
IfMatch string `header:"If-Match"`
|
||||||
|
IfNoneMatch string `header:"If-None-Match"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AppendBlock appends a block to an append blob.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Append-Block
|
||||||
|
func (b *Blob) AppendBlock(chunk []byte, options *AppendBlockOptions) error {
|
||||||
|
params := url.Values{"comp": {"appendblock"}}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-blob-type"] = string(BlobTypeAppend)
|
||||||
|
headers["Content-Length"] = fmt.Sprintf("%v", len(chunk))
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, bytes.NewReader(chunk), b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
227
vendor/github.com/Azure/azure-sdk-for-go/storage/authorization.go
generated
vendored
Normal file
227
vendor/github.com/Azure/azure-sdk-for-go/storage/authorization.go
generated
vendored
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
// Package storage provides clients for Microsoft Azure Storage Services.
|
||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// See: https://docs.microsoft.com/rest/api/storageservices/fileservices/authentication-for-the-azure-storage-services
|
||||||
|
|
||||||
|
type authentication string
|
||||||
|
|
||||||
|
const (
|
||||||
|
sharedKey authentication = "sharedKey"
|
||||||
|
sharedKeyForTable authentication = "sharedKeyTable"
|
||||||
|
sharedKeyLite authentication = "sharedKeyLite"
|
||||||
|
sharedKeyLiteForTable authentication = "sharedKeyLiteTable"
|
||||||
|
|
||||||
|
// headers
|
||||||
|
headerAcceptCharset = "Accept-Charset"
|
||||||
|
headerAuthorization = "Authorization"
|
||||||
|
headerContentLength = "Content-Length"
|
||||||
|
headerDate = "Date"
|
||||||
|
headerXmsDate = "x-ms-date"
|
||||||
|
headerXmsVersion = "x-ms-version"
|
||||||
|
headerContentEncoding = "Content-Encoding"
|
||||||
|
headerContentLanguage = "Content-Language"
|
||||||
|
headerContentType = "Content-Type"
|
||||||
|
headerContentMD5 = "Content-MD5"
|
||||||
|
headerIfModifiedSince = "If-Modified-Since"
|
||||||
|
headerIfMatch = "If-Match"
|
||||||
|
headerIfNoneMatch = "If-None-Match"
|
||||||
|
headerIfUnmodifiedSince = "If-Unmodified-Since"
|
||||||
|
headerRange = "Range"
|
||||||
|
headerDataServiceVersion = "DataServiceVersion"
|
||||||
|
headerMaxDataServiceVersion = "MaxDataServiceVersion"
|
||||||
|
headerContentTransferEncoding = "Content-Transfer-Encoding"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (c *Client) addAuthorizationHeader(verb, url string, headers map[string]string, auth authentication) (map[string]string, error) {
|
||||||
|
authHeader, err := c.getSharedKey(verb, url, headers, auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
headers[headerAuthorization] = authHeader
|
||||||
|
return headers, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getSharedKey(verb, url string, headers map[string]string, auth authentication) (string, error) {
|
||||||
|
canRes, err := c.buildCanonicalizedResource(url, auth)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
canString, err := buildCanonicalizedString(verb, headers, canRes, auth)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return c.createAuthorizationHeader(canString, auth), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) buildCanonicalizedResource(uri string, auth authentication) (string, error) {
|
||||||
|
errMsg := "buildCanonicalizedResource error: %s"
|
||||||
|
u, err := url.Parse(uri)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf(errMsg, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
cr := bytes.NewBufferString("/")
|
||||||
|
cr.WriteString(c.getCanonicalizedAccountName())
|
||||||
|
|
||||||
|
if len(u.Path) > 0 {
|
||||||
|
// Any portion of the CanonicalizedResource string that is derived from
|
||||||
|
// the resource's URI should be encoded exactly as it is in the URI.
|
||||||
|
// -- https://msdn.microsoft.com/en-gb/library/azure/dd179428.aspx
|
||||||
|
cr.WriteString(u.EscapedPath())
|
||||||
|
}
|
||||||
|
|
||||||
|
params, err := url.ParseQuery(u.RawQuery)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf(errMsg, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://github.com/Azure/azure-storage-net/blob/master/Lib/Common/Core/Util/AuthenticationUtility.cs#L277
|
||||||
|
if auth == sharedKey {
|
||||||
|
if len(params) > 0 {
|
||||||
|
cr.WriteString("\n")
|
||||||
|
|
||||||
|
keys := []string{}
|
||||||
|
for key := range params {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
|
completeParams := []string{}
|
||||||
|
for _, key := range keys {
|
||||||
|
if len(params[key]) > 1 {
|
||||||
|
sort.Strings(params[key])
|
||||||
|
}
|
||||||
|
|
||||||
|
completeParams = append(completeParams, fmt.Sprintf("%s:%s", key, strings.Join(params[key], ",")))
|
||||||
|
}
|
||||||
|
cr.WriteString(strings.Join(completeParams, "\n"))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// search for "comp" parameter, if exists then add it to canonicalizedresource
|
||||||
|
if v, ok := params["comp"]; ok {
|
||||||
|
cr.WriteString("?comp=" + v[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return string(cr.Bytes()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getCanonicalizedAccountName() string {
|
||||||
|
// since we may be trying to access a secondary storage account, we need to
|
||||||
|
// remove the -secondary part of the storage name
|
||||||
|
return strings.TrimSuffix(c.accountName, "-secondary")
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildCanonicalizedString(verb string, headers map[string]string, canonicalizedResource string, auth authentication) (string, error) {
|
||||||
|
contentLength := headers[headerContentLength]
|
||||||
|
if contentLength == "0" {
|
||||||
|
contentLength = ""
|
||||||
|
}
|
||||||
|
date := headers[headerDate]
|
||||||
|
if v, ok := headers[headerXmsDate]; ok {
|
||||||
|
if auth == sharedKey || auth == sharedKeyLite {
|
||||||
|
date = ""
|
||||||
|
} else {
|
||||||
|
date = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var canString string
|
||||||
|
switch auth {
|
||||||
|
case sharedKey:
|
||||||
|
canString = strings.Join([]string{
|
||||||
|
verb,
|
||||||
|
headers[headerContentEncoding],
|
||||||
|
headers[headerContentLanguage],
|
||||||
|
contentLength,
|
||||||
|
headers[headerContentMD5],
|
||||||
|
headers[headerContentType],
|
||||||
|
date,
|
||||||
|
headers[headerIfModifiedSince],
|
||||||
|
headers[headerIfMatch],
|
||||||
|
headers[headerIfNoneMatch],
|
||||||
|
headers[headerIfUnmodifiedSince],
|
||||||
|
headers[headerRange],
|
||||||
|
buildCanonicalizedHeader(headers),
|
||||||
|
canonicalizedResource,
|
||||||
|
}, "\n")
|
||||||
|
case sharedKeyForTable:
|
||||||
|
canString = strings.Join([]string{
|
||||||
|
verb,
|
||||||
|
headers[headerContentMD5],
|
||||||
|
headers[headerContentType],
|
||||||
|
date,
|
||||||
|
canonicalizedResource,
|
||||||
|
}, "\n")
|
||||||
|
case sharedKeyLite:
|
||||||
|
canString = strings.Join([]string{
|
||||||
|
verb,
|
||||||
|
headers[headerContentMD5],
|
||||||
|
headers[headerContentType],
|
||||||
|
date,
|
||||||
|
buildCanonicalizedHeader(headers),
|
||||||
|
canonicalizedResource,
|
||||||
|
}, "\n")
|
||||||
|
case sharedKeyLiteForTable:
|
||||||
|
canString = strings.Join([]string{
|
||||||
|
date,
|
||||||
|
canonicalizedResource,
|
||||||
|
}, "\n")
|
||||||
|
default:
|
||||||
|
return "", fmt.Errorf("%s authentication is not supported yet", auth)
|
||||||
|
}
|
||||||
|
return canString, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildCanonicalizedHeader(headers map[string]string) string {
|
||||||
|
cm := make(map[string]string)
|
||||||
|
|
||||||
|
for k, v := range headers {
|
||||||
|
headerName := strings.TrimSpace(strings.ToLower(k))
|
||||||
|
if strings.HasPrefix(headerName, "x-ms-") {
|
||||||
|
cm[headerName] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(cm) == 0 {
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
keys := []string{}
|
||||||
|
for key := range cm {
|
||||||
|
keys = append(keys, key)
|
||||||
|
}
|
||||||
|
|
||||||
|
sort.Strings(keys)
|
||||||
|
|
||||||
|
ch := bytes.NewBufferString("")
|
||||||
|
|
||||||
|
for _, key := range keys {
|
||||||
|
ch.WriteString(key)
|
||||||
|
ch.WriteRune(':')
|
||||||
|
ch.WriteString(cm[key])
|
||||||
|
ch.WriteRune('\n')
|
||||||
|
}
|
||||||
|
|
||||||
|
return strings.TrimSuffix(string(ch.Bytes()), "\n")
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) createAuthorizationHeader(canonicalizedString string, auth authentication) string {
|
||||||
|
signature := c.computeHmac256(canonicalizedString)
|
||||||
|
var key string
|
||||||
|
switch auth {
|
||||||
|
case sharedKey, sharedKeyForTable:
|
||||||
|
key = "SharedKey"
|
||||||
|
case sharedKeyLite, sharedKeyLiteForTable:
|
||||||
|
key = "SharedKeyLite"
|
||||||
|
}
|
||||||
|
return fmt.Sprintf("%s %s:%s", key, c.getCanonicalizedAccountName(), signature)
|
||||||
|
}
|
||||||
106
vendor/github.com/Azure/azure-sdk-for-go/storage/blobsasuri.go
generated
vendored
Normal file
106
vendor/github.com/Azure/azure-sdk-for-go/storage/blobsasuri.go
generated
vendored
Normal file
@@ -0,0 +1,106 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetSASURIWithSignedIPAndProtocol creates an URL to the specified blob which contains the Shared
|
||||||
|
// Access Signature with specified permissions and expiration time. Also includes signedIPRange and allowed protocols.
|
||||||
|
// If old API version is used but no signedIP is passed (ie empty string) then this should still work.
|
||||||
|
// We only populate the signedIP when it non-empty.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/ee395415.aspx
|
||||||
|
func (b *Blob) GetSASURIWithSignedIPAndProtocol(expiry time.Time, permissions string, signedIPRange string, HTTPSOnly bool) (string, error) {
|
||||||
|
var (
|
||||||
|
signedPermissions = permissions
|
||||||
|
blobURL = b.GetURL()
|
||||||
|
)
|
||||||
|
canonicalizedResource, err := b.Container.bsc.client.buildCanonicalizedResource(blobURL, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
// "The canonicalizedresouce portion of the string is a canonical path to the signed resource.
|
||||||
|
// It must include the service name (blob, table, queue or file) for version 2015-02-21 or
|
||||||
|
// later, the storage account name, and the resource name, and must be URL-decoded.
|
||||||
|
// -- https://msdn.microsoft.com/en-us/library/azure/dn140255.aspx
|
||||||
|
|
||||||
|
// We need to replace + with %2b first to avoid being treated as a space (which is correct for query strings, but not the path component).
|
||||||
|
canonicalizedResource = strings.Replace(canonicalizedResource, "+", "%2b", -1)
|
||||||
|
canonicalizedResource, err = url.QueryUnescape(canonicalizedResource)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
signedExpiry := expiry.UTC().Format(time.RFC3339)
|
||||||
|
|
||||||
|
//If blob name is missing, resource is a container
|
||||||
|
signedResource := "c"
|
||||||
|
if len(b.Name) > 0 {
|
||||||
|
signedResource = "b"
|
||||||
|
}
|
||||||
|
|
||||||
|
protocols := "https,http"
|
||||||
|
if HTTPSOnly {
|
||||||
|
protocols = "https"
|
||||||
|
}
|
||||||
|
stringToSign, err := blobSASStringToSign(b.Container.bsc.client.apiVersion, canonicalizedResource, signedExpiry, signedPermissions, signedIPRange, protocols)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
sig := b.Container.bsc.client.computeHmac256(stringToSign)
|
||||||
|
sasParams := url.Values{
|
||||||
|
"sv": {b.Container.bsc.client.apiVersion},
|
||||||
|
"se": {signedExpiry},
|
||||||
|
"sr": {signedResource},
|
||||||
|
"sp": {signedPermissions},
|
||||||
|
"sig": {sig},
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.Container.bsc.client.apiVersion >= "2015-04-05" {
|
||||||
|
sasParams.Add("spr", protocols)
|
||||||
|
if signedIPRange != "" {
|
||||||
|
sasParams.Add("sip", signedIPRange)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sasURL, err := url.Parse(blobURL)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
sasURL.RawQuery = sasParams.Encode()
|
||||||
|
return sasURL.String(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSASURI creates an URL to the specified blob which contains the Shared
|
||||||
|
// Access Signature with specified permissions and expiration time.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/ee395415.aspx
|
||||||
|
func (b *Blob) GetSASURI(expiry time.Time, permissions string) (string, error) {
|
||||||
|
return b.GetSASURIWithSignedIPAndProtocol(expiry, permissions, "", false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func blobSASStringToSign(signedVersion, canonicalizedResource, signedExpiry, signedPermissions string, signedIP string, protocols string) (string, error) {
|
||||||
|
var signedStart, signedIdentifier, rscc, rscd, rsce, rscl, rsct string
|
||||||
|
|
||||||
|
if signedVersion >= "2015-02-21" {
|
||||||
|
canonicalizedResource = "/blob" + canonicalizedResource
|
||||||
|
}
|
||||||
|
|
||||||
|
// https://msdn.microsoft.com/en-us/library/azure/dn140255.aspx#Anchor_12
|
||||||
|
if signedVersion >= "2015-04-05" {
|
||||||
|
return fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", signedPermissions, signedStart, signedExpiry, canonicalizedResource, signedIdentifier, signedIP, protocols, signedVersion, rscc, rscd, rsce, rscl, rsct), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// reference: http://msdn.microsoft.com/en-us/library/azure/dn140255.aspx
|
||||||
|
if signedVersion >= "2013-08-15" {
|
||||||
|
return fmt.Sprintf("%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s", signedPermissions, signedStart, signedExpiry, canonicalizedResource, signedIdentifier, signedVersion, rscc, rscd, rsce, rscl, rsct), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", errors.New("storage: not implemented SAS for versions earlier than 2013-08-15")
|
||||||
|
}
|
||||||
95
vendor/github.com/Azure/azure-sdk-for-go/storage/blobserviceclient.go
generated
vendored
Normal file
95
vendor/github.com/Azure/azure-sdk-for-go/storage/blobserviceclient.go
generated
vendored
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BlobStorageClient contains operations for Microsoft Azure Blob Storage
|
||||||
|
// Service.
|
||||||
|
type BlobStorageClient struct {
|
||||||
|
client Client
|
||||||
|
auth authentication
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServiceProperties gets the properties of your storage account's blob service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-blob-service-properties
|
||||||
|
func (b *BlobStorageClient) GetServiceProperties() (*ServiceProperties, error) {
|
||||||
|
return b.client.getServiceProperties(blobServiceName, b.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetServiceProperties sets the properties of your storage account's blob service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-blob-service-properties
|
||||||
|
func (b *BlobStorageClient) SetServiceProperties(props ServiceProperties) error {
|
||||||
|
return b.client.setServiceProperties(props, blobServiceName, b.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListContainersParameters defines the set of customizable parameters to make a
|
||||||
|
// List Containers call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179352.aspx
|
||||||
|
type ListContainersParameters struct {
|
||||||
|
Prefix string
|
||||||
|
Marker string
|
||||||
|
Include string
|
||||||
|
MaxResults uint
|
||||||
|
Timeout uint
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContainerReference returns a Container object for the specified container name.
|
||||||
|
func (b *BlobStorageClient) GetContainerReference(name string) *Container {
|
||||||
|
return &Container{
|
||||||
|
bsc: b,
|
||||||
|
Name: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListContainers returns the list of containers in a storage account along with
|
||||||
|
// pagination token and other response details.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179352.aspx
|
||||||
|
func (b BlobStorageClient) ListContainers(params ListContainersParameters) (*ContainerListResponse, error) {
|
||||||
|
q := mergeParams(params.getParameters(), url.Values{"comp": {"list"}})
|
||||||
|
uri := b.client.getEndpoint(blobServiceName, "", q)
|
||||||
|
headers := b.client.getStandardHeaders()
|
||||||
|
|
||||||
|
var out ContainerListResponse
|
||||||
|
resp, err := b.client.exec(http.MethodGet, uri, headers, nil, b.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// assign our client to the newly created Container objects
|
||||||
|
for i := range out.Containers {
|
||||||
|
out.Containers[i].bsc = &b
|
||||||
|
}
|
||||||
|
return &out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ListContainersParameters) getParameters() url.Values {
|
||||||
|
out := url.Values{}
|
||||||
|
|
||||||
|
if p.Prefix != "" {
|
||||||
|
out.Set("prefix", p.Prefix)
|
||||||
|
}
|
||||||
|
if p.Marker != "" {
|
||||||
|
out.Set("marker", p.Marker)
|
||||||
|
}
|
||||||
|
if p.Include != "" {
|
||||||
|
out.Set("include", p.Include)
|
||||||
|
}
|
||||||
|
if p.MaxResults != 0 {
|
||||||
|
out.Set("maxresults", strconv.FormatUint(uint64(p.MaxResults), 10))
|
||||||
|
}
|
||||||
|
if p.Timeout != 0 {
|
||||||
|
out.Set("timeout", strconv.FormatUint(uint64(p.Timeout), 10))
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
240
vendor/github.com/Azure/azure-sdk-for-go/storage/blockblob.go
generated
vendored
Normal file
240
vendor/github.com/Azure/azure-sdk-for-go/storage/blockblob.go
generated
vendored
Normal file
@@ -0,0 +1,240 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/xml"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// BlockListType is used to filter out types of blocks in a Get Blocks List call
|
||||||
|
// for a block blob.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179400.aspx for all
|
||||||
|
// block types.
|
||||||
|
type BlockListType string
|
||||||
|
|
||||||
|
// Filters for listing blocks in block blobs
|
||||||
|
const (
|
||||||
|
BlockListTypeAll BlockListType = "all"
|
||||||
|
BlockListTypeCommitted BlockListType = "committed"
|
||||||
|
BlockListTypeUncommitted BlockListType = "uncommitted"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Maximum sizes (per REST API) for various concepts
|
||||||
|
const (
|
||||||
|
MaxBlobBlockSize = 100 * 1024 * 1024
|
||||||
|
MaxBlobPageSize = 4 * 1024 * 1024
|
||||||
|
)
|
||||||
|
|
||||||
|
// BlockStatus defines states a block for a block blob can
|
||||||
|
// be in.
|
||||||
|
type BlockStatus string
|
||||||
|
|
||||||
|
// List of statuses that can be used to refer to a block in a block list
|
||||||
|
const (
|
||||||
|
BlockStatusUncommitted BlockStatus = "Uncommitted"
|
||||||
|
BlockStatusCommitted BlockStatus = "Committed"
|
||||||
|
BlockStatusLatest BlockStatus = "Latest"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Block is used to create Block entities for Put Block List
|
||||||
|
// call.
|
||||||
|
type Block struct {
|
||||||
|
ID string
|
||||||
|
Status BlockStatus
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlockListResponse contains the response fields from Get Block List call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179400.aspx
|
||||||
|
type BlockListResponse struct {
|
||||||
|
XMLName xml.Name `xml:"BlockList"`
|
||||||
|
CommittedBlocks []BlockResponse `xml:"CommittedBlocks>Block"`
|
||||||
|
UncommittedBlocks []BlockResponse `xml:"UncommittedBlocks>Block"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlockResponse contains the block information returned
|
||||||
|
// in the GetBlockListCall.
|
||||||
|
type BlockResponse struct {
|
||||||
|
Name string `xml:"Name"`
|
||||||
|
Size int64 `xml:"Size"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBlockBlob initializes an empty block blob with no blocks.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Blob
|
||||||
|
func (b *Blob) CreateBlockBlob(options *PutBlobOptions) error {
|
||||||
|
return b.CreateBlockBlobFromReader(nil, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateBlockBlobFromReader initializes a block blob using data from
|
||||||
|
// reader. Size must be the number of bytes read from reader. To
|
||||||
|
// create an empty blob, use size==0 and reader==nil.
|
||||||
|
//
|
||||||
|
// The API rejects requests with size > 256 MiB (but this limit is not
|
||||||
|
// checked by the SDK). To write a larger blob, use CreateBlockBlob,
|
||||||
|
// PutBlock, and PutBlockList.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Blob
|
||||||
|
func (b *Blob) CreateBlockBlobFromReader(blob io.Reader, options *PutBlobOptions) error {
|
||||||
|
params := url.Values{}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-blob-type"] = string(BlobTypeBlock)
|
||||||
|
|
||||||
|
headers["Content-Length"] = "0"
|
||||||
|
var n int64
|
||||||
|
var err error
|
||||||
|
if blob != nil {
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
n, err = io.Copy(buf, blob)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
blob = buf
|
||||||
|
headers["Content-Length"] = strconv.FormatInt(n, 10)
|
||||||
|
}
|
||||||
|
b.Properties.ContentLength = n
|
||||||
|
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(b.Properties))
|
||||||
|
headers = b.Container.bsc.client.addMetadataToHeaders(headers, b.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, blob, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBlockOptions includes the options for a put block operation
|
||||||
|
type PutBlockOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
ContentMD5 string `header:"Content-MD5"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBlock saves the given data chunk to the specified block blob with
|
||||||
|
// given ID.
|
||||||
|
//
|
||||||
|
// The API rejects chunks larger than 100 MiB (but this limit is not
|
||||||
|
// checked by the SDK).
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Block
|
||||||
|
func (b *Blob) PutBlock(blockID string, chunk []byte, options *PutBlockOptions) error {
|
||||||
|
return b.PutBlockWithLength(blockID, uint64(len(chunk)), bytes.NewReader(chunk), options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBlockWithLength saves the given data stream of exactly specified size to
|
||||||
|
// the block blob with given ID. It is an alternative to PutBlocks where data
|
||||||
|
// comes as stream but the length is known in advance.
|
||||||
|
//
|
||||||
|
// The API rejects requests with size > 100 MiB (but this limit is not
|
||||||
|
// checked by the SDK).
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Block
|
||||||
|
func (b *Blob) PutBlockWithLength(blockID string, size uint64, blob io.Reader, options *PutBlockOptions) error {
|
||||||
|
query := url.Values{
|
||||||
|
"comp": {"block"},
|
||||||
|
"blockid": {blockID},
|
||||||
|
}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["Content-Length"] = fmt.Sprintf("%v", size)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), query)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, blob, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBlockListOptions includes the options for a put block list operation
|
||||||
|
type PutBlockListOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
IfMatch string `header:"If-Match"`
|
||||||
|
IfNoneMatch string `header:"If-None-Match"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutBlockList saves list of blocks to the specified block blob.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Block-List
|
||||||
|
func (b *Blob) PutBlockList(blocks []Block, options *PutBlockListOptions) error {
|
||||||
|
params := url.Values{"comp": {"blocklist"}}
|
||||||
|
blockListXML := prepareBlockListRequest(blocks)
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["Content-Length"] = fmt.Sprintf("%v", len(blockListXML))
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(b.Properties))
|
||||||
|
headers = b.Container.bsc.client.addMetadataToHeaders(headers, b.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, strings.NewReader(blockListXML), b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBlockListOptions includes the options for a get block list operation
|
||||||
|
type GetBlockListOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Snapshot *time.Time
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetBlockList retrieves list of blocks in the specified block blob.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Get-Block-List
|
||||||
|
func (b *Blob) GetBlockList(blockType BlockListType, options *GetBlockListOptions) (BlockListResponse, error) {
|
||||||
|
params := url.Values{
|
||||||
|
"comp": {"blocklist"},
|
||||||
|
"blocklisttype": {string(blockType)},
|
||||||
|
}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
params = addSnapshot(params, options.Snapshot)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
var out BlockListResponse
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodGet, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
453
vendor/github.com/Azure/azure-sdk-for-go/storage/container.go
generated
vendored
Normal file
453
vendor/github.com/Azure/azure-sdk-for-go/storage/container.go
generated
vendored
Normal file
@@ -0,0 +1,453 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Container represents an Azure container.
|
||||||
|
type Container struct {
|
||||||
|
bsc *BlobStorageClient
|
||||||
|
Name string `xml:"Name"`
|
||||||
|
Properties ContainerProperties `xml:"Properties"`
|
||||||
|
Metadata map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Container) buildPath() string {
|
||||||
|
return fmt.Sprintf("/%s", c.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerProperties contains various properties of a container returned from
|
||||||
|
// various endpoints like ListContainers.
|
||||||
|
type ContainerProperties struct {
|
||||||
|
LastModified string `xml:"Last-Modified"`
|
||||||
|
Etag string `xml:"Etag"`
|
||||||
|
LeaseStatus string `xml:"LeaseStatus"`
|
||||||
|
LeaseState string `xml:"LeaseState"`
|
||||||
|
LeaseDuration string `xml:"LeaseDuration"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerListResponse contains the response fields from
|
||||||
|
// ListContainers call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179352.aspx
|
||||||
|
type ContainerListResponse struct {
|
||||||
|
XMLName xml.Name `xml:"EnumerationResults"`
|
||||||
|
Xmlns string `xml:"xmlns,attr"`
|
||||||
|
Prefix string `xml:"Prefix"`
|
||||||
|
Marker string `xml:"Marker"`
|
||||||
|
NextMarker string `xml:"NextMarker"`
|
||||||
|
MaxResults int64 `xml:"MaxResults"`
|
||||||
|
Containers []Container `xml:"Containers>Container"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BlobListResponse contains the response fields from ListBlobs call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd135734.aspx
|
||||||
|
type BlobListResponse struct {
|
||||||
|
XMLName xml.Name `xml:"EnumerationResults"`
|
||||||
|
Xmlns string `xml:"xmlns,attr"`
|
||||||
|
Prefix string `xml:"Prefix"`
|
||||||
|
Marker string `xml:"Marker"`
|
||||||
|
NextMarker string `xml:"NextMarker"`
|
||||||
|
MaxResults int64 `xml:"MaxResults"`
|
||||||
|
Blobs []Blob `xml:"Blobs>Blob"`
|
||||||
|
|
||||||
|
// BlobPrefix is used to traverse blobs as if it were a file system.
|
||||||
|
// It is returned if ListBlobsParameters.Delimiter is specified.
|
||||||
|
// The list here can be thought of as "folders" that may contain
|
||||||
|
// other folders or blobs.
|
||||||
|
BlobPrefixes []string `xml:"Blobs>BlobPrefix>Name"`
|
||||||
|
|
||||||
|
// Delimiter is used to traverse blobs as if it were a file system.
|
||||||
|
// It is returned if ListBlobsParameters.Delimiter is specified.
|
||||||
|
Delimiter string `xml:"Delimiter"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// IncludeBlobDataset has options to include in a list blobs operation
|
||||||
|
type IncludeBlobDataset struct {
|
||||||
|
Snapshots bool
|
||||||
|
Metadata bool
|
||||||
|
UncommittedBlobs bool
|
||||||
|
Copy bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListBlobsParameters defines the set of customizable
|
||||||
|
// parameters to make a List Blobs call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd135734.aspx
|
||||||
|
type ListBlobsParameters struct {
|
||||||
|
Prefix string
|
||||||
|
Delimiter string
|
||||||
|
Marker string
|
||||||
|
Include *IncludeBlobDataset
|
||||||
|
MaxResults uint
|
||||||
|
Timeout uint
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ListBlobsParameters) getParameters() url.Values {
|
||||||
|
out := url.Values{}
|
||||||
|
|
||||||
|
if p.Prefix != "" {
|
||||||
|
out.Set("prefix", p.Prefix)
|
||||||
|
}
|
||||||
|
if p.Delimiter != "" {
|
||||||
|
out.Set("delimiter", p.Delimiter)
|
||||||
|
}
|
||||||
|
if p.Marker != "" {
|
||||||
|
out.Set("marker", p.Marker)
|
||||||
|
}
|
||||||
|
if p.Include != nil {
|
||||||
|
include := []string{}
|
||||||
|
include = addString(include, p.Include.Snapshots, "snapshots")
|
||||||
|
include = addString(include, p.Include.Metadata, "metadata")
|
||||||
|
include = addString(include, p.Include.UncommittedBlobs, "uncommittedblobs")
|
||||||
|
include = addString(include, p.Include.Copy, "copy")
|
||||||
|
fullInclude := strings.Join(include, ",")
|
||||||
|
out.Set("include", fullInclude)
|
||||||
|
}
|
||||||
|
if p.MaxResults != 0 {
|
||||||
|
out.Set("maxresults", strconv.FormatUint(uint64(p.MaxResults), 10))
|
||||||
|
}
|
||||||
|
if p.Timeout != 0 {
|
||||||
|
out.Set("timeout", strconv.FormatUint(uint64(p.Timeout), 10))
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func addString(datasets []string, include bool, text string) []string {
|
||||||
|
if include {
|
||||||
|
datasets = append(datasets, text)
|
||||||
|
}
|
||||||
|
return datasets
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerAccessType defines the access level to the container from a public
|
||||||
|
// request.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179468.aspx and "x-ms-
|
||||||
|
// blob-public-access" header.
|
||||||
|
type ContainerAccessType string
|
||||||
|
|
||||||
|
// Access options for containers
|
||||||
|
const (
|
||||||
|
ContainerAccessTypePrivate ContainerAccessType = ""
|
||||||
|
ContainerAccessTypeBlob ContainerAccessType = "blob"
|
||||||
|
ContainerAccessTypeContainer ContainerAccessType = "container"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ContainerAccessPolicy represents each access policy in the container ACL.
|
||||||
|
type ContainerAccessPolicy struct {
|
||||||
|
ID string
|
||||||
|
StartTime time.Time
|
||||||
|
ExpiryTime time.Time
|
||||||
|
CanRead bool
|
||||||
|
CanWrite bool
|
||||||
|
CanDelete bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerPermissions represents the container ACLs.
|
||||||
|
type ContainerPermissions struct {
|
||||||
|
AccessType ContainerAccessType
|
||||||
|
AccessPolicies []ContainerAccessPolicy
|
||||||
|
}
|
||||||
|
|
||||||
|
// ContainerAccessHeader references header used when setting/getting container ACL
|
||||||
|
const (
|
||||||
|
ContainerAccessHeader string = "x-ms-blob-public-access"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetBlobReference returns a Blob object for the specified blob name.
|
||||||
|
func (c *Container) GetBlobReference(name string) *Blob {
|
||||||
|
return &Blob{
|
||||||
|
Container: c,
|
||||||
|
Name: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateContainerOptions includes the options for a create container operation
|
||||||
|
type CreateContainerOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Access ContainerAccessType `header:"x-ms-blob-public-access"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create creates a blob container within the storage account
|
||||||
|
// with given name and access level. Returns error if container already exists.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Container
|
||||||
|
func (c *Container) Create(options *CreateContainerOptions) error {
|
||||||
|
resp, err := c.create(options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateIfNotExists creates a blob container if it does not exist. Returns
|
||||||
|
// true if container is newly created or false if container already exists.
|
||||||
|
func (c *Container) CreateIfNotExists(options *CreateContainerOptions) (bool, error) {
|
||||||
|
resp, err := c.create(options)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusCreated || resp.statusCode == http.StatusConflict {
|
||||||
|
return resp.statusCode == http.StatusCreated, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Container) create(options *CreateContainerOptions) (*storageResponse, error) {
|
||||||
|
query := url.Values{"restype": {"container"}}
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
headers = c.bsc.client.addMetadataToHeaders(headers, c.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), query)
|
||||||
|
|
||||||
|
return c.bsc.client.exec(http.MethodPut, uri, headers, nil, c.bsc.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists returns true if a container with given name exists
|
||||||
|
// on the storage account, otherwise returns false.
|
||||||
|
func (c *Container) Exists() (bool, error) {
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), url.Values{"restype": {"container"}})
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
resp, err := c.bsc.client.exec(http.MethodHead, uri, headers, nil, c.bsc.auth)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusOK || resp.statusCode == http.StatusNotFound {
|
||||||
|
return resp.statusCode == http.StatusOK, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetContainerPermissionOptions includes options for a set container permissions operation
|
||||||
|
type SetContainerPermissionOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetPermissions sets up container permissions
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Set-Container-ACL
|
||||||
|
func (c *Container) SetPermissions(permissions ContainerPermissions, options *SetContainerPermissionOptions) error {
|
||||||
|
body, length, err := generateContainerACLpayload(permissions.AccessPolicies)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
params := url.Values{
|
||||||
|
"restype": {"container"},
|
||||||
|
"comp": {"acl"},
|
||||||
|
}
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
headers = addToHeaders(headers, ContainerAccessHeader, string(permissions.AccessType))
|
||||||
|
headers["Content-Length"] = strconv.Itoa(length)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := c.bsc.client.exec(http.MethodPut, uri, headers, body, c.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return errors.New("Unable to set permissions")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetContainerPermissionOptions includes options for a get container permissions operation
|
||||||
|
type GetContainerPermissionOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPermissions gets the container permissions as per https://msdn.microsoft.com/en-us/library/azure/dd179469.aspx
|
||||||
|
// If timeout is 0 then it will not be passed to Azure
|
||||||
|
// leaseID will only be passed to Azure if populated
|
||||||
|
func (c *Container) GetPermissions(options *GetContainerPermissionOptions) (*ContainerPermissions, error) {
|
||||||
|
params := url.Values{
|
||||||
|
"restype": {"container"},
|
||||||
|
"comp": {"acl"},
|
||||||
|
}
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := c.bsc.client.exec(http.MethodGet, uri, headers, nil, c.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
var ap AccessPolicy
|
||||||
|
err = xmlUnmarshal(resp.body, &ap.SignedIdentifiersList)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return buildAccessPolicy(ap, &resp.headers), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func buildAccessPolicy(ap AccessPolicy, headers *http.Header) *ContainerPermissions {
|
||||||
|
// containerAccess. Blob, Container, empty
|
||||||
|
containerAccess := headers.Get(http.CanonicalHeaderKey(ContainerAccessHeader))
|
||||||
|
permissions := ContainerPermissions{
|
||||||
|
AccessType: ContainerAccessType(containerAccess),
|
||||||
|
AccessPolicies: []ContainerAccessPolicy{},
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, policy := range ap.SignedIdentifiersList.SignedIdentifiers {
|
||||||
|
capd := ContainerAccessPolicy{
|
||||||
|
ID: policy.ID,
|
||||||
|
StartTime: policy.AccessPolicy.StartTime,
|
||||||
|
ExpiryTime: policy.AccessPolicy.ExpiryTime,
|
||||||
|
}
|
||||||
|
capd.CanRead = updatePermissions(policy.AccessPolicy.Permission, "r")
|
||||||
|
capd.CanWrite = updatePermissions(policy.AccessPolicy.Permission, "w")
|
||||||
|
capd.CanDelete = updatePermissions(policy.AccessPolicy.Permission, "d")
|
||||||
|
|
||||||
|
permissions.AccessPolicies = append(permissions.AccessPolicies, capd)
|
||||||
|
}
|
||||||
|
return &permissions
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteContainerOptions includes options for a delete container operation
|
||||||
|
type DeleteContainerOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the container with given name on the storage
|
||||||
|
// account. If the container does not exist returns error.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/delete-container
|
||||||
|
func (c *Container) Delete(options *DeleteContainerOptions) error {
|
||||||
|
resp, err := c.delete(options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusAccepted})
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteIfExists deletes the container with given name on the storage
|
||||||
|
// account if it exists. Returns true if container is deleted with this call, or
|
||||||
|
// false if the container did not exist at the time of the Delete Container
|
||||||
|
// operation.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/delete-container
|
||||||
|
func (c *Container) DeleteIfExists(options *DeleteContainerOptions) (bool, error) {
|
||||||
|
resp, err := c.delete(options)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusAccepted || resp.statusCode == http.StatusNotFound {
|
||||||
|
return resp.statusCode == http.StatusAccepted, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Container) delete(options *DeleteContainerOptions) (*storageResponse, error) {
|
||||||
|
query := url.Values{"restype": {"container"}}
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), query)
|
||||||
|
|
||||||
|
return c.bsc.client.exec(http.MethodDelete, uri, headers, nil, c.bsc.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListBlobs returns an object that contains list of blobs in the container,
|
||||||
|
// pagination token and other information in the response of List Blobs call.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Blobs
|
||||||
|
func (c *Container) ListBlobs(params ListBlobsParameters) (BlobListResponse, error) {
|
||||||
|
q := mergeParams(params.getParameters(), url.Values{
|
||||||
|
"restype": {"container"},
|
||||||
|
"comp": {"list"}},
|
||||||
|
)
|
||||||
|
uri := c.bsc.client.getEndpoint(blobServiceName, c.buildPath(), q)
|
||||||
|
|
||||||
|
headers := c.bsc.client.getStandardHeaders()
|
||||||
|
headers = addToHeaders(headers, "x-ms-client-request-id", params.RequestID)
|
||||||
|
|
||||||
|
var out BlobListResponse
|
||||||
|
resp, err := c.bsc.client.exec(http.MethodGet, uri, headers, nil, c.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
for i := range out.Blobs {
|
||||||
|
out.Blobs[i].Container = c
|
||||||
|
}
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
func generateContainerACLpayload(policies []ContainerAccessPolicy) (io.Reader, int, error) {
|
||||||
|
sil := SignedIdentifiers{
|
||||||
|
SignedIdentifiers: []SignedIdentifier{},
|
||||||
|
}
|
||||||
|
for _, capd := range policies {
|
||||||
|
permission := capd.generateContainerPermissions()
|
||||||
|
signedIdentifier := convertAccessPolicyToXMLStructs(capd.ID, capd.StartTime, capd.ExpiryTime, permission)
|
||||||
|
sil.SignedIdentifiers = append(sil.SignedIdentifiers, signedIdentifier)
|
||||||
|
}
|
||||||
|
return xmlMarshal(sil)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (capd *ContainerAccessPolicy) generateContainerPermissions() (permissions string) {
|
||||||
|
// generate the permissions string (rwd).
|
||||||
|
// still want the end user API to have bool flags.
|
||||||
|
permissions = ""
|
||||||
|
|
||||||
|
if capd.CanRead {
|
||||||
|
permissions += "r"
|
||||||
|
}
|
||||||
|
|
||||||
|
if capd.CanWrite {
|
||||||
|
permissions += "w"
|
||||||
|
}
|
||||||
|
|
||||||
|
if capd.CanDelete {
|
||||||
|
permissions += "d"
|
||||||
|
}
|
||||||
|
|
||||||
|
return permissions
|
||||||
|
}
|
||||||
223
vendor/github.com/Azure/azure-sdk-for-go/storage/copyblob.go
generated
vendored
Normal file
223
vendor/github.com/Azure/azure-sdk-for-go/storage/copyblob.go
generated
vendored
Normal file
@@ -0,0 +1,223 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
blobCopyStatusPending = "pending"
|
||||||
|
blobCopyStatusSuccess = "success"
|
||||||
|
blobCopyStatusAborted = "aborted"
|
||||||
|
blobCopyStatusFailed = "failed"
|
||||||
|
)
|
||||||
|
|
||||||
|
// CopyOptions includes the options for a copy blob operation
|
||||||
|
type CopyOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Source CopyOptionsConditions
|
||||||
|
Destiny CopyOptionsConditions
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// IncrementalCopyOptions includes the options for an incremental copy blob operation
|
||||||
|
type IncrementalCopyOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Destination IncrementalCopyOptionsConditions
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// CopyOptionsConditions includes some conditional options in a copy blob operation
|
||||||
|
type CopyOptionsConditions struct {
|
||||||
|
LeaseID string
|
||||||
|
IfModifiedSince *time.Time
|
||||||
|
IfUnmodifiedSince *time.Time
|
||||||
|
IfMatch string
|
||||||
|
IfNoneMatch string
|
||||||
|
}
|
||||||
|
|
||||||
|
// IncrementalCopyOptionsConditions includes some conditional options in a copy blob operation
|
||||||
|
type IncrementalCopyOptionsConditions struct {
|
||||||
|
IfModifiedSince *time.Time
|
||||||
|
IfUnmodifiedSince *time.Time
|
||||||
|
IfMatch string
|
||||||
|
IfNoneMatch string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy starts a blob copy operation and waits for the operation to
|
||||||
|
// complete. sourceBlob parameter must be a canonical URL to the blob (can be
|
||||||
|
// obtained using GetBlobURL method.) There is no SLA on blob copy and therefore
|
||||||
|
// this helper method works faster on smaller files.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Copy-Blob
|
||||||
|
func (b *Blob) Copy(sourceBlob string, options *CopyOptions) error {
|
||||||
|
copyID, err := b.StartCopy(sourceBlob, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return b.WaitForCopy(copyID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// StartCopy starts a blob copy operation.
|
||||||
|
// sourceBlob parameter must be a canonical URL to the blob (can be
|
||||||
|
// obtained using GetBlobURL method.)
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Copy-Blob
|
||||||
|
func (b *Blob) StartCopy(sourceBlob string, options *CopyOptions) (string, error) {
|
||||||
|
params := url.Values{}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-copy-source"] = sourceBlob
|
||||||
|
headers = b.Container.bsc.client.addMetadataToHeaders(headers, b.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = addToHeaders(headers, "x-ms-client-request-id", options.RequestID)
|
||||||
|
// source
|
||||||
|
headers = addToHeaders(headers, "x-ms-source-lease-id", options.Source.LeaseID)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-source-if-modified-since", options.Source.IfModifiedSince)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-source-if-unmodified-since", options.Source.IfUnmodifiedSince)
|
||||||
|
headers = addToHeaders(headers, "x-ms-source-if-match", options.Source.IfMatch)
|
||||||
|
headers = addToHeaders(headers, "x-ms-source-if-none-match", options.Source.IfNoneMatch)
|
||||||
|
//destiny
|
||||||
|
headers = addToHeaders(headers, "x-ms-lease-id", options.Destiny.LeaseID)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-if-modified-since", options.Destiny.IfModifiedSince)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-if-unmodified-since", options.Destiny.IfUnmodifiedSince)
|
||||||
|
headers = addToHeaders(headers, "x-ms-if-match", options.Destiny.IfMatch)
|
||||||
|
headers = addToHeaders(headers, "x-ms-if-none-match", options.Destiny.IfNoneMatch)
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{http.StatusAccepted, http.StatusCreated}); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
copyID := resp.headers.Get("x-ms-copy-id")
|
||||||
|
if copyID == "" {
|
||||||
|
return "", errors.New("Got empty copy id header")
|
||||||
|
}
|
||||||
|
return copyID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// AbortCopyOptions includes the options for an abort blob operation
|
||||||
|
type AbortCopyOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AbortCopy aborts a BlobCopy which has already been triggered by the StartBlobCopy function.
|
||||||
|
// copyID is generated from StartBlobCopy function.
|
||||||
|
// currentLeaseID is required IF the destination blob has an active lease on it.
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Abort-Copy-Blob
|
||||||
|
func (b *Blob) AbortCopy(copyID string, options *AbortCopyOptions) error {
|
||||||
|
params := url.Values{
|
||||||
|
"comp": {"copy"},
|
||||||
|
"copyid": {copyID},
|
||||||
|
}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-copy-action"] = "abort"
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusNoContent})
|
||||||
|
}
|
||||||
|
|
||||||
|
// WaitForCopy loops until a BlobCopy operation is completed (or fails with error)
|
||||||
|
func (b *Blob) WaitForCopy(copyID string) error {
|
||||||
|
for {
|
||||||
|
err := b.GetProperties(nil)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if b.Properties.CopyID != copyID {
|
||||||
|
return errBlobCopyIDMismatch
|
||||||
|
}
|
||||||
|
|
||||||
|
switch b.Properties.CopyStatus {
|
||||||
|
case blobCopyStatusSuccess:
|
||||||
|
return nil
|
||||||
|
case blobCopyStatusPending:
|
||||||
|
continue
|
||||||
|
case blobCopyStatusAborted:
|
||||||
|
return errBlobCopyAborted
|
||||||
|
case blobCopyStatusFailed:
|
||||||
|
return fmt.Errorf("storage: blob copy failed. Id=%s Description=%s", b.Properties.CopyID, b.Properties.CopyStatusDescription)
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("storage: unhandled blob copy status: '%s'", b.Properties.CopyStatus)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// IncrementalCopyBlob copies a snapshot of a source blob and copies to referring blob
|
||||||
|
// sourceBlob parameter must be a valid snapshot URL of the original blob.
|
||||||
|
// THe original blob mut be public, or use a Shared Access Signature.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/incremental-copy-blob .
|
||||||
|
func (b *Blob) IncrementalCopyBlob(sourceBlobURL string, snapshotTime time.Time, options *IncrementalCopyOptions) (string, error) {
|
||||||
|
params := url.Values{"comp": {"incrementalcopy"}}
|
||||||
|
|
||||||
|
// need formatting to 7 decimal places so it's friendly to Windows and *nix
|
||||||
|
snapshotTimeFormatted := snapshotTime.Format("2006-01-02T15:04:05.0000000Z")
|
||||||
|
u, err := url.Parse(sourceBlobURL)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
query := u.Query()
|
||||||
|
query.Add("snapshot", snapshotTimeFormatted)
|
||||||
|
encodedQuery := query.Encode()
|
||||||
|
encodedQuery = strings.Replace(encodedQuery, "%3A", ":", -1)
|
||||||
|
u.RawQuery = encodedQuery
|
||||||
|
snapshotURL := u.String()
|
||||||
|
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-copy-source"] = snapshotURL
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
addTimeout(params, options.Timeout)
|
||||||
|
headers = addToHeaders(headers, "x-ms-client-request-id", options.RequestID)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-if-modified-since", options.Destination.IfModifiedSince)
|
||||||
|
headers = addTimeToHeaders(headers, "x-ms-if-unmodified-since", options.Destination.IfUnmodifiedSince)
|
||||||
|
headers = addToHeaders(headers, "x-ms-if-match", options.Destination.IfMatch)
|
||||||
|
headers = addToHeaders(headers, "x-ms-if-none-match", options.Destination.IfNoneMatch)
|
||||||
|
}
|
||||||
|
|
||||||
|
// get URI of destination blob
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{http.StatusAccepted}); err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
copyID := resp.headers.Get("x-ms-copy-id")
|
||||||
|
if copyID == "" {
|
||||||
|
return "", errors.New("Got empty copy id header")
|
||||||
|
}
|
||||||
|
return copyID, nil
|
||||||
|
}
|
||||||
222
vendor/github.com/Azure/azure-sdk-for-go/storage/directory.go
generated
vendored
Normal file
222
vendor/github.com/Azure/azure-sdk-for-go/storage/directory.go
generated
vendored
Normal file
@@ -0,0 +1,222 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Directory represents a directory on a share.
|
||||||
|
type Directory struct {
|
||||||
|
fsc *FileServiceClient
|
||||||
|
Metadata map[string]string
|
||||||
|
Name string `xml:"Name"`
|
||||||
|
parent *Directory
|
||||||
|
Properties DirectoryProperties
|
||||||
|
share *Share
|
||||||
|
}
|
||||||
|
|
||||||
|
// DirectoryProperties contains various properties of a directory.
|
||||||
|
type DirectoryProperties struct {
|
||||||
|
LastModified string `xml:"Last-Modified"`
|
||||||
|
Etag string `xml:"Etag"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListDirsAndFilesParameters defines the set of customizable parameters to
|
||||||
|
// make a List Files and Directories call.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Directories-and-Files
|
||||||
|
type ListDirsAndFilesParameters struct {
|
||||||
|
Prefix string
|
||||||
|
Marker string
|
||||||
|
MaxResults uint
|
||||||
|
Timeout uint
|
||||||
|
}
|
||||||
|
|
||||||
|
// DirsAndFilesListResponse contains the response fields from
|
||||||
|
// a List Files and Directories call.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Directories-and-Files
|
||||||
|
type DirsAndFilesListResponse struct {
|
||||||
|
XMLName xml.Name `xml:"EnumerationResults"`
|
||||||
|
Xmlns string `xml:"xmlns,attr"`
|
||||||
|
Marker string `xml:"Marker"`
|
||||||
|
MaxResults int64 `xml:"MaxResults"`
|
||||||
|
Directories []Directory `xml:"Entries>Directory"`
|
||||||
|
Files []File `xml:"Entries>File"`
|
||||||
|
NextMarker string `xml:"NextMarker"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// builds the complete directory path for this directory object.
|
||||||
|
func (d *Directory) buildPath() string {
|
||||||
|
path := ""
|
||||||
|
current := d
|
||||||
|
for current.Name != "" {
|
||||||
|
path = "/" + current.Name + path
|
||||||
|
current = current.parent
|
||||||
|
}
|
||||||
|
return d.share.buildPath() + path
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create this directory in the associated share.
|
||||||
|
// If a directory with the same name already exists, the operation fails.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Directory
|
||||||
|
func (d *Directory) Create(options *FileRequestOptions) error {
|
||||||
|
// if this is the root directory exit early
|
||||||
|
if d.parent == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
params := prepareOptions(options)
|
||||||
|
headers, err := d.fsc.createResource(d.buildPath(), resourceDirectory, params, mergeMDIntoExtraHeaders(d.Metadata, nil), []int{http.StatusCreated})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.updateEtagAndLastModified(headers)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateIfNotExists creates this directory under the associated share if the
|
||||||
|
// directory does not exists. Returns true if the directory is newly created or
|
||||||
|
// false if the directory already exists.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Directory
|
||||||
|
func (d *Directory) CreateIfNotExists(options *FileRequestOptions) (bool, error) {
|
||||||
|
// if this is the root directory exit early
|
||||||
|
if d.parent == nil {
|
||||||
|
return false, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
params := prepareOptions(options)
|
||||||
|
resp, err := d.fsc.createResourceNoClose(d.buildPath(), resourceDirectory, params, nil)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusCreated || resp.statusCode == http.StatusConflict {
|
||||||
|
if resp.statusCode == http.StatusCreated {
|
||||||
|
d.updateEtagAndLastModified(resp.headers)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, d.FetchAttributes(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete removes this directory. It must be empty in order to be deleted.
|
||||||
|
// If the directory does not exist the operation fails.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Delete-Directory
|
||||||
|
func (d *Directory) Delete(options *FileRequestOptions) error {
|
||||||
|
return d.fsc.deleteResource(d.buildPath(), resourceDirectory, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteIfExists removes this directory if it exists.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Delete-Directory
|
||||||
|
func (d *Directory) DeleteIfExists(options *FileRequestOptions) (bool, error) {
|
||||||
|
resp, err := d.fsc.deleteResourceNoClose(d.buildPath(), resourceDirectory, options)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusAccepted || resp.statusCode == http.StatusNotFound {
|
||||||
|
return resp.statusCode == http.StatusAccepted, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists returns true if this directory exists.
|
||||||
|
func (d *Directory) Exists() (bool, error) {
|
||||||
|
exists, headers, err := d.fsc.resourceExists(d.buildPath(), resourceDirectory)
|
||||||
|
if exists {
|
||||||
|
d.updateEtagAndLastModified(headers)
|
||||||
|
}
|
||||||
|
return exists, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// FetchAttributes retrieves metadata for this directory.
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-directory-properties
|
||||||
|
func (d *Directory) FetchAttributes(options *FileRequestOptions) error {
|
||||||
|
params := prepareOptions(options)
|
||||||
|
headers, err := d.fsc.getResourceHeaders(d.buildPath(), compNone, resourceDirectory, params, http.MethodHead)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.updateEtagAndLastModified(headers)
|
||||||
|
d.Metadata = getMetadataFromHeaders(headers)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetDirectoryReference returns a child Directory object for this directory.
|
||||||
|
func (d *Directory) GetDirectoryReference(name string) *Directory {
|
||||||
|
return &Directory{
|
||||||
|
fsc: d.fsc,
|
||||||
|
Name: name,
|
||||||
|
parent: d,
|
||||||
|
share: d.share,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFileReference returns a child File object for this directory.
|
||||||
|
func (d *Directory) GetFileReference(name string) *File {
|
||||||
|
return &File{
|
||||||
|
fsc: d.fsc,
|
||||||
|
Name: name,
|
||||||
|
parent: d,
|
||||||
|
share: d.share,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListDirsAndFiles returns a list of files and directories under this directory.
|
||||||
|
// It also contains a pagination token and other response details.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Directories-and-Files
|
||||||
|
func (d *Directory) ListDirsAndFiles(params ListDirsAndFilesParameters) (*DirsAndFilesListResponse, error) {
|
||||||
|
q := mergeParams(params.getParameters(), getURLInitValues(compList, resourceDirectory))
|
||||||
|
|
||||||
|
resp, err := d.fsc.listContent(d.buildPath(), q, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.body.Close()
|
||||||
|
var out DirsAndFilesListResponse
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
return &out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetadata replaces the metadata for this directory.
|
||||||
|
//
|
||||||
|
// Some keys may be converted to Camel-Case before sending. All keys
|
||||||
|
// are returned in lower case by GetDirectoryMetadata. HTTP header names
|
||||||
|
// are case-insensitive so case munging should not matter to other
|
||||||
|
// applications either.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Set-Directory-Metadata
|
||||||
|
func (d *Directory) SetMetadata(options *FileRequestOptions) error {
|
||||||
|
headers, err := d.fsc.setResourceHeaders(d.buildPath(), compMetadata, resourceDirectory, mergeMDIntoExtraHeaders(d.Metadata, nil), options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
d.updateEtagAndLastModified(headers)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// updates Etag and last modified date
|
||||||
|
func (d *Directory) updateEtagAndLastModified(headers http.Header) {
|
||||||
|
d.Properties.Etag = headers.Get("Etag")
|
||||||
|
d.Properties.LastModified = headers.Get("Last-Modified")
|
||||||
|
}
|
||||||
|
|
||||||
|
// URL gets the canonical URL to this directory.
|
||||||
|
// This method does not create a publicly accessible URL if the directory
|
||||||
|
// is private and this method does not check if the directory exists.
|
||||||
|
func (d *Directory) URL() string {
|
||||||
|
return d.fsc.client.getEndpoint(fileServiceName, d.buildPath(), url.Values{})
|
||||||
|
}
|
||||||
439
vendor/github.com/Azure/azure-sdk-for-go/storage/entity.go
generated
vendored
Normal file
439
vendor/github.com/Azure/azure-sdk-for-go/storage/entity.go
generated
vendored
Normal file
@@ -0,0 +1,439 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/satori/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Annotating as secure for gas scanning
|
||||||
|
/* #nosec */
|
||||||
|
const (
|
||||||
|
partitionKeyNode = "PartitionKey"
|
||||||
|
rowKeyNode = "RowKey"
|
||||||
|
etagErrorTemplate = "Etag didn't match: %v"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
errEmptyPayload = errors.New("Empty payload is not a valid metadata level for this operation")
|
||||||
|
errNilPreviousResult = errors.New("The previous results page is nil")
|
||||||
|
errNilNextLink = errors.New("There are no more pages in this query results")
|
||||||
|
)
|
||||||
|
|
||||||
|
// Entity represents an entity inside an Azure table.
|
||||||
|
type Entity struct {
|
||||||
|
Table *Table
|
||||||
|
PartitionKey string
|
||||||
|
RowKey string
|
||||||
|
TimeStamp time.Time
|
||||||
|
OdataMetadata string
|
||||||
|
OdataType string
|
||||||
|
OdataID string
|
||||||
|
OdataEtag string
|
||||||
|
OdataEditLink string
|
||||||
|
Properties map[string]interface{}
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEntityReference returns an Entity object with the specified
|
||||||
|
// partition key and row key.
|
||||||
|
func (t *Table) GetEntityReference(partitionKey, rowKey string) *Entity {
|
||||||
|
return &Entity{
|
||||||
|
PartitionKey: partitionKey,
|
||||||
|
RowKey: rowKey,
|
||||||
|
Table: t,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// EntityOptions includes options for entity operations.
|
||||||
|
type EntityOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetEntityOptions includes options for a get entity operation
|
||||||
|
type GetEntityOptions struct {
|
||||||
|
Select []string
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets the referenced entity. Which properties to get can be
|
||||||
|
// specified using the select option.
|
||||||
|
// See:
|
||||||
|
// https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/query-entities
|
||||||
|
// https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/querying-tables-and-entities
|
||||||
|
func (e *Entity) Get(timeout uint, ml MetadataLevel, options *GetEntityOptions) error {
|
||||||
|
if ml == EmptyPayload {
|
||||||
|
return errEmptyPayload
|
||||||
|
}
|
||||||
|
// RowKey and PartitionKey could be lost if not included in the query
|
||||||
|
// As those are the entity identifiers, it is best if they are not lost
|
||||||
|
rk := e.RowKey
|
||||||
|
pk := e.PartitionKey
|
||||||
|
|
||||||
|
query := url.Values{
|
||||||
|
"timeout": {strconv.FormatUint(uint64(timeout), 10)},
|
||||||
|
}
|
||||||
|
headers := e.Table.tsc.client.getStandardHeaders()
|
||||||
|
headers[headerAccept] = string(ml)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
if len(options.Select) > 0 {
|
||||||
|
query.Add("$select", strings.Join(options.Select, ","))
|
||||||
|
}
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
|
||||||
|
uri := e.Table.tsc.client.getEndpoint(tableServiceName, e.buildPath(), query)
|
||||||
|
resp, err := e.Table.tsc.client.exec(http.MethodGet, uri, headers, nil, e.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
respBody, err := ioutil.ReadAll(resp.body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
err = json.Unmarshal(respBody, e)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
e.PartitionKey = pk
|
||||||
|
e.RowKey = rk
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert inserts the referenced entity in its table.
|
||||||
|
// The function fails if there is an entity with the same
|
||||||
|
// PartitionKey and RowKey in the table.
|
||||||
|
// ml determines the level of detail of metadata in the operation response,
|
||||||
|
// or no data at all.
|
||||||
|
// See: https://docs.microsoft.com/rest/api/storageservices/fileservices/insert-entity
|
||||||
|
func (e *Entity) Insert(ml MetadataLevel, options *EntityOptions) error {
|
||||||
|
query, headers := options.getParameters()
|
||||||
|
headers = mergeHeaders(headers, e.Table.tsc.client.getStandardHeaders())
|
||||||
|
|
||||||
|
body, err := json.Marshal(e)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
headers = addBodyRelatedHeaders(headers, len(body))
|
||||||
|
headers = addReturnContentHeaders(headers, ml)
|
||||||
|
|
||||||
|
uri := e.Table.tsc.client.getEndpoint(tableServiceName, e.Table.buildPath(), query)
|
||||||
|
resp, err := e.Table.tsc.client.exec(http.MethodPost, uri, headers, bytes.NewReader(body), e.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
data, err := ioutil.ReadAll(resp.body)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if ml != EmptyPayload {
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusCreated}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
if err = e.UnmarshalJSON(data); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusNoContent}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update updates the contents of an entity. The function fails if there is no entity
|
||||||
|
// with the same PartitionKey and RowKey in the table or if the ETag is different
|
||||||
|
// than the one in Azure.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/update-entity2
|
||||||
|
func (e *Entity) Update(force bool, options *EntityOptions) error {
|
||||||
|
return e.updateMerge(force, http.MethodPut, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Merge merges the contents of entity specified with PartitionKey and RowKey
|
||||||
|
// with the content specified in Properties.
|
||||||
|
// The function fails if there is no entity with the same PartitionKey and
|
||||||
|
// RowKey in the table or if the ETag is different than the one in Azure.
|
||||||
|
// Read more: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/merge-entity
|
||||||
|
func (e *Entity) Merge(force bool, options *EntityOptions) error {
|
||||||
|
return e.updateMerge(force, "MERGE", options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the entity.
|
||||||
|
// The function fails if there is no entity with the same PartitionKey and
|
||||||
|
// RowKey in the table or if the ETag is different than the one in Azure.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/delete-entity1
|
||||||
|
func (e *Entity) Delete(force bool, options *EntityOptions) error {
|
||||||
|
query, headers := options.getParameters()
|
||||||
|
headers = mergeHeaders(headers, e.Table.tsc.client.getStandardHeaders())
|
||||||
|
|
||||||
|
headers = addIfMatchHeader(headers, force, e.OdataEtag)
|
||||||
|
headers = addReturnContentHeaders(headers, EmptyPayload)
|
||||||
|
|
||||||
|
uri := e.Table.tsc.client.getEndpoint(tableServiceName, e.buildPath(), query)
|
||||||
|
resp, err := e.Table.tsc.client.exec(http.MethodDelete, uri, headers, nil, e.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
if resp.statusCode == http.StatusPreconditionFailed {
|
||||||
|
return fmt.Errorf(etagErrorTemplate, err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusNoContent}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.updateTimestamp(resp.headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrReplace inserts an entity or replaces the existing one.
|
||||||
|
// Read more: https://docs.microsoft.com/rest/api/storageservices/fileservices/insert-or-replace-entity
|
||||||
|
func (e *Entity) InsertOrReplace(options *EntityOptions) error {
|
||||||
|
return e.insertOr(http.MethodPut, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrMerge inserts an entity or merges the existing one.
|
||||||
|
// Read more: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/insert-or-merge-entity
|
||||||
|
func (e *Entity) InsertOrMerge(options *EntityOptions) error {
|
||||||
|
return e.insertOr("MERGE", options)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entity) buildPath() string {
|
||||||
|
return fmt.Sprintf("%s(PartitionKey='%s', RowKey='%s')", e.Table.buildPath(), e.PartitionKey, e.RowKey)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON is a custom marshaller for entity
|
||||||
|
func (e *Entity) MarshalJSON() ([]byte, error) {
|
||||||
|
completeMap := map[string]interface{}{}
|
||||||
|
completeMap[partitionKeyNode] = e.PartitionKey
|
||||||
|
completeMap[rowKeyNode] = e.RowKey
|
||||||
|
for k, v := range e.Properties {
|
||||||
|
typeKey := strings.Join([]string{k, OdataTypeSuffix}, "")
|
||||||
|
switch t := v.(type) {
|
||||||
|
case []byte:
|
||||||
|
completeMap[typeKey] = OdataBinary
|
||||||
|
completeMap[k] = string(t)
|
||||||
|
case time.Time:
|
||||||
|
completeMap[typeKey] = OdataDateTime
|
||||||
|
completeMap[k] = t.Format(time.RFC3339Nano)
|
||||||
|
case uuid.UUID:
|
||||||
|
completeMap[typeKey] = OdataGUID
|
||||||
|
completeMap[k] = t.String()
|
||||||
|
case int64:
|
||||||
|
completeMap[typeKey] = OdataInt64
|
||||||
|
completeMap[k] = fmt.Sprintf("%v", v)
|
||||||
|
default:
|
||||||
|
completeMap[k] = v
|
||||||
|
}
|
||||||
|
if strings.HasSuffix(k, OdataTypeSuffix) {
|
||||||
|
if !(completeMap[k] == OdataBinary ||
|
||||||
|
completeMap[k] == OdataDateTime ||
|
||||||
|
completeMap[k] == OdataGUID ||
|
||||||
|
completeMap[k] == OdataInt64) {
|
||||||
|
return nil, fmt.Errorf("Odata.type annotation %v value is not valid", k)
|
||||||
|
}
|
||||||
|
valueKey := strings.TrimSuffix(k, OdataTypeSuffix)
|
||||||
|
if _, ok := completeMap[valueKey]; !ok {
|
||||||
|
return nil, fmt.Errorf("Odata.type annotation %v defined without value defined", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return json.Marshal(completeMap)
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON is a custom unmarshaller for entities
|
||||||
|
func (e *Entity) UnmarshalJSON(data []byte) error {
|
||||||
|
errorTemplate := "Deserializing error: %v"
|
||||||
|
|
||||||
|
props := map[string]interface{}{}
|
||||||
|
err := json.Unmarshal(data, &props)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
// deselialize metadata
|
||||||
|
e.OdataMetadata = stringFromMap(props, "odata.metadata")
|
||||||
|
e.OdataType = stringFromMap(props, "odata.type")
|
||||||
|
e.OdataID = stringFromMap(props, "odata.id")
|
||||||
|
e.OdataEtag = stringFromMap(props, "odata.etag")
|
||||||
|
e.OdataEditLink = stringFromMap(props, "odata.editLink")
|
||||||
|
e.PartitionKey = stringFromMap(props, partitionKeyNode)
|
||||||
|
e.RowKey = stringFromMap(props, rowKeyNode)
|
||||||
|
|
||||||
|
// deserialize timestamp
|
||||||
|
timeStamp, ok := props["Timestamp"]
|
||||||
|
if ok {
|
||||||
|
str, ok := timeStamp.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(errorTemplate, "Timestamp casting error")
|
||||||
|
}
|
||||||
|
t, err := time.Parse(time.RFC3339Nano, str)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(errorTemplate, err)
|
||||||
|
}
|
||||||
|
e.TimeStamp = t
|
||||||
|
}
|
||||||
|
delete(props, "Timestamp")
|
||||||
|
delete(props, "Timestamp@odata.type")
|
||||||
|
|
||||||
|
// deserialize entity (user defined fields)
|
||||||
|
for k, v := range props {
|
||||||
|
if strings.HasSuffix(k, OdataTypeSuffix) {
|
||||||
|
valueKey := strings.TrimSuffix(k, OdataTypeSuffix)
|
||||||
|
str, ok := props[valueKey].(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf(errorTemplate, fmt.Sprintf("%v casting error", v))
|
||||||
|
}
|
||||||
|
switch v {
|
||||||
|
case OdataBinary:
|
||||||
|
props[valueKey] = []byte(str)
|
||||||
|
case OdataDateTime:
|
||||||
|
t, err := time.Parse("2006-01-02T15:04:05Z", str)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(errorTemplate, err)
|
||||||
|
}
|
||||||
|
props[valueKey] = t
|
||||||
|
case OdataGUID:
|
||||||
|
props[valueKey] = uuid.FromStringOrNil(str)
|
||||||
|
case OdataInt64:
|
||||||
|
i, err := strconv.ParseInt(str, 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf(errorTemplate, err)
|
||||||
|
}
|
||||||
|
props[valueKey] = i
|
||||||
|
default:
|
||||||
|
return fmt.Errorf(errorTemplate, fmt.Sprintf("%v is not supported", v))
|
||||||
|
}
|
||||||
|
delete(props, k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
e.Properties = props
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getAndDelete(props map[string]interface{}, key string) interface{} {
|
||||||
|
if value, ok := props[key]; ok {
|
||||||
|
delete(props, key)
|
||||||
|
return value
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func addIfMatchHeader(h map[string]string, force bool, etag string) map[string]string {
|
||||||
|
if force {
|
||||||
|
h[headerIfMatch] = "*"
|
||||||
|
} else {
|
||||||
|
h[headerIfMatch] = etag
|
||||||
|
}
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
// updates Etag and timestamp
|
||||||
|
func (e *Entity) updateEtagAndTimestamp(headers http.Header) error {
|
||||||
|
e.OdataEtag = headers.Get(headerEtag)
|
||||||
|
return e.updateTimestamp(headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entity) updateTimestamp(headers http.Header) error {
|
||||||
|
str := headers.Get(headerDate)
|
||||||
|
t, err := time.Parse(time.RFC1123, str)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("Update timestamp error: %v", err)
|
||||||
|
}
|
||||||
|
e.TimeStamp = t
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entity) insertOr(verb string, options *EntityOptions) error {
|
||||||
|
query, headers := options.getParameters()
|
||||||
|
headers = mergeHeaders(headers, e.Table.tsc.client.getStandardHeaders())
|
||||||
|
|
||||||
|
body, err := json.Marshal(e)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
headers = addBodyRelatedHeaders(headers, len(body))
|
||||||
|
headers = addReturnContentHeaders(headers, EmptyPayload)
|
||||||
|
|
||||||
|
uri := e.Table.tsc.client.getEndpoint(tableServiceName, e.buildPath(), query)
|
||||||
|
resp, err := e.Table.tsc.client.exec(verb, uri, headers, bytes.NewReader(body), e.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusNoContent}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.updateEtagAndTimestamp(resp.headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *Entity) updateMerge(force bool, verb string, options *EntityOptions) error {
|
||||||
|
query, headers := options.getParameters()
|
||||||
|
headers = mergeHeaders(headers, e.Table.tsc.client.getStandardHeaders())
|
||||||
|
|
||||||
|
body, err := json.Marshal(e)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
headers = addBodyRelatedHeaders(headers, len(body))
|
||||||
|
headers = addIfMatchHeader(headers, force, e.OdataEtag)
|
||||||
|
headers = addReturnContentHeaders(headers, EmptyPayload)
|
||||||
|
|
||||||
|
uri := e.Table.tsc.client.getEndpoint(tableServiceName, e.buildPath(), query)
|
||||||
|
resp, err := e.Table.tsc.client.exec(verb, uri, headers, bytes.NewReader(body), e.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
if resp.statusCode == http.StatusPreconditionFailed {
|
||||||
|
return fmt.Errorf(etagErrorTemplate, err)
|
||||||
|
}
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusNoContent}); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return e.updateEtagAndTimestamp(resp.headers)
|
||||||
|
}
|
||||||
|
|
||||||
|
func stringFromMap(props map[string]interface{}, key string) string {
|
||||||
|
value := getAndDelete(props, key)
|
||||||
|
if value != nil {
|
||||||
|
return value.(string)
|
||||||
|
}
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
|
||||||
|
func (options *EntityOptions) getParameters() (url.Values, map[string]string) {
|
||||||
|
query := url.Values{}
|
||||||
|
headers := map[string]string{}
|
||||||
|
if options != nil {
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = headersFromStruct(*options)
|
||||||
|
}
|
||||||
|
return query, headers
|
||||||
|
}
|
||||||
324
vendor/github.com/Azure/azure-sdk-for-go/storage/fileserviceclient.go
generated
vendored
Normal file
324
vendor/github.com/Azure/azure-sdk-for-go/storage/fileserviceclient.go
generated
vendored
Normal file
@@ -0,0 +1,324 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// FileServiceClient contains operations for Microsoft Azure File Service.
|
||||||
|
type FileServiceClient struct {
|
||||||
|
client Client
|
||||||
|
auth authentication
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListSharesParameters defines the set of customizable parameters to make a
|
||||||
|
// List Shares call.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Shares
|
||||||
|
type ListSharesParameters struct {
|
||||||
|
Prefix string
|
||||||
|
Marker string
|
||||||
|
Include string
|
||||||
|
MaxResults uint
|
||||||
|
Timeout uint
|
||||||
|
}
|
||||||
|
|
||||||
|
// ShareListResponse contains the response fields from
|
||||||
|
// ListShares call.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/List-Shares
|
||||||
|
type ShareListResponse struct {
|
||||||
|
XMLName xml.Name `xml:"EnumerationResults"`
|
||||||
|
Xmlns string `xml:"xmlns,attr"`
|
||||||
|
Prefix string `xml:"Prefix"`
|
||||||
|
Marker string `xml:"Marker"`
|
||||||
|
NextMarker string `xml:"NextMarker"`
|
||||||
|
MaxResults int64 `xml:"MaxResults"`
|
||||||
|
Shares []Share `xml:"Shares>Share"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type compType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
compNone compType = ""
|
||||||
|
compList compType = "list"
|
||||||
|
compMetadata compType = "metadata"
|
||||||
|
compProperties compType = "properties"
|
||||||
|
compRangeList compType = "rangelist"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (ct compType) String() string {
|
||||||
|
return string(ct)
|
||||||
|
}
|
||||||
|
|
||||||
|
type resourceType string
|
||||||
|
|
||||||
|
const (
|
||||||
|
resourceDirectory resourceType = "directory"
|
||||||
|
resourceFile resourceType = ""
|
||||||
|
resourceShare resourceType = "share"
|
||||||
|
)
|
||||||
|
|
||||||
|
func (rt resourceType) String() string {
|
||||||
|
return string(rt)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ListSharesParameters) getParameters() url.Values {
|
||||||
|
out := url.Values{}
|
||||||
|
|
||||||
|
if p.Prefix != "" {
|
||||||
|
out.Set("prefix", p.Prefix)
|
||||||
|
}
|
||||||
|
if p.Marker != "" {
|
||||||
|
out.Set("marker", p.Marker)
|
||||||
|
}
|
||||||
|
if p.Include != "" {
|
||||||
|
out.Set("include", p.Include)
|
||||||
|
}
|
||||||
|
if p.MaxResults != 0 {
|
||||||
|
out.Set("maxresults", strconv.FormatUint(uint64(p.MaxResults), 10))
|
||||||
|
}
|
||||||
|
if p.Timeout != 0 {
|
||||||
|
out.Set("timeout", strconv.FormatUint(uint64(p.Timeout), 10))
|
||||||
|
}
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p ListDirsAndFilesParameters) getParameters() url.Values {
|
||||||
|
out := url.Values{}
|
||||||
|
|
||||||
|
if p.Prefix != "" {
|
||||||
|
out.Set("prefix", p.Prefix)
|
||||||
|
}
|
||||||
|
if p.Marker != "" {
|
||||||
|
out.Set("marker", p.Marker)
|
||||||
|
}
|
||||||
|
if p.MaxResults != 0 {
|
||||||
|
out.Set("maxresults", strconv.FormatUint(uint64(p.MaxResults), 10))
|
||||||
|
}
|
||||||
|
out = addTimeout(out, p.Timeout)
|
||||||
|
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns url.Values for the specified types
|
||||||
|
func getURLInitValues(comp compType, res resourceType) url.Values {
|
||||||
|
values := url.Values{}
|
||||||
|
if comp != compNone {
|
||||||
|
values.Set("comp", comp.String())
|
||||||
|
}
|
||||||
|
if res != resourceFile {
|
||||||
|
values.Set("restype", res.String())
|
||||||
|
}
|
||||||
|
return values
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetShareReference returns a Share object for the specified share name.
|
||||||
|
func (f *FileServiceClient) GetShareReference(name string) *Share {
|
||||||
|
return &Share{
|
||||||
|
fsc: f,
|
||||||
|
Name: name,
|
||||||
|
Properties: ShareProperties{
|
||||||
|
Quota: -1,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListShares returns the list of shares in a storage account along with
|
||||||
|
// pagination token and other response details.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/list-shares
|
||||||
|
func (f FileServiceClient) ListShares(params ListSharesParameters) (*ShareListResponse, error) {
|
||||||
|
q := mergeParams(params.getParameters(), url.Values{"comp": {"list"}})
|
||||||
|
|
||||||
|
var out ShareListResponse
|
||||||
|
resp, err := f.listContent("", q, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
|
||||||
|
// assign our client to the newly created Share objects
|
||||||
|
for i := range out.Shares {
|
||||||
|
out.Shares[i].fsc = &f
|
||||||
|
}
|
||||||
|
return &out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServiceProperties gets the properties of your storage account's file service.
|
||||||
|
// File service does not support logging
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-file-service-properties
|
||||||
|
func (f *FileServiceClient) GetServiceProperties() (*ServiceProperties, error) {
|
||||||
|
return f.client.getServiceProperties(fileServiceName, f.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetServiceProperties sets the properties of your storage account's file service.
|
||||||
|
// File service does not support logging
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-file-service-properties
|
||||||
|
func (f *FileServiceClient) SetServiceProperties(props ServiceProperties) error {
|
||||||
|
return f.client.setServiceProperties(props, fileServiceName, f.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// retrieves directory or share content
|
||||||
|
func (f FileServiceClient) listContent(path string, params url.Values, extraHeaders map[string]string) (*storageResponse, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, params)
|
||||||
|
extraHeaders = f.client.protectUserAgent(extraHeaders)
|
||||||
|
headers := mergeHeaders(f.client.getStandardHeaders(), extraHeaders)
|
||||||
|
|
||||||
|
resp, err := f.client.exec(http.MethodGet, uri, headers, nil, f.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns true if the specified resource exists
|
||||||
|
func (f FileServiceClient) resourceExists(path string, res resourceType) (bool, http.Header, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return false, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, getURLInitValues(compNone, res))
|
||||||
|
headers := f.client.getStandardHeaders()
|
||||||
|
|
||||||
|
resp, err := f.client.exec(http.MethodHead, uri, headers, nil, f.auth)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusOK || resp.statusCode == http.StatusNotFound {
|
||||||
|
return resp.statusCode == http.StatusOK, resp.headers, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// creates a resource depending on the specified resource type
|
||||||
|
func (f FileServiceClient) createResource(path string, res resourceType, urlParams url.Values, extraHeaders map[string]string, expectedResponseCodes []int) (http.Header, error) {
|
||||||
|
resp, err := f.createResourceNoClose(path, res, urlParams, extraHeaders)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
return resp.headers, checkRespCode(resp.statusCode, expectedResponseCodes)
|
||||||
|
}
|
||||||
|
|
||||||
|
// creates a resource depending on the specified resource type, doesn't close the response body
|
||||||
|
func (f FileServiceClient) createResourceNoClose(path string, res resourceType, urlParams url.Values, extraHeaders map[string]string) (*storageResponse, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
values := getURLInitValues(compNone, res)
|
||||||
|
combinedParams := mergeParams(values, urlParams)
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, combinedParams)
|
||||||
|
extraHeaders = f.client.protectUserAgent(extraHeaders)
|
||||||
|
headers := mergeHeaders(f.client.getStandardHeaders(), extraHeaders)
|
||||||
|
|
||||||
|
return f.client.exec(http.MethodPut, uri, headers, nil, f.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns HTTP header data for the specified directory or share
|
||||||
|
func (f FileServiceClient) getResourceHeaders(path string, comp compType, res resourceType, params url.Values, verb string) (http.Header, error) {
|
||||||
|
resp, err := f.getResourceNoClose(path, comp, res, params, verb, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.headers, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// gets the specified resource, doesn't close the response body
|
||||||
|
func (f FileServiceClient) getResourceNoClose(path string, comp compType, res resourceType, params url.Values, verb string, extraHeaders map[string]string) (*storageResponse, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
params = mergeParams(params, getURLInitValues(comp, res))
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, params)
|
||||||
|
headers := mergeHeaders(f.client.getStandardHeaders(), extraHeaders)
|
||||||
|
|
||||||
|
return f.client.exec(verb, uri, headers, nil, f.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// deletes the resource and returns the response
|
||||||
|
func (f FileServiceClient) deleteResource(path string, res resourceType, options *FileRequestOptions) error {
|
||||||
|
resp, err := f.deleteResourceNoClose(path, res, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusAccepted})
|
||||||
|
}
|
||||||
|
|
||||||
|
// deletes the resource and returns the response, doesn't close the response body
|
||||||
|
func (f FileServiceClient) deleteResourceNoClose(path string, res resourceType, options *FileRequestOptions) (*storageResponse, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
values := mergeParams(getURLInitValues(compNone, res), prepareOptions(options))
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, values)
|
||||||
|
return f.client.exec(http.MethodDelete, uri, f.client.getStandardHeaders(), nil, f.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// merges metadata into extraHeaders and returns extraHeaders
|
||||||
|
func mergeMDIntoExtraHeaders(metadata, extraHeaders map[string]string) map[string]string {
|
||||||
|
if metadata == nil && extraHeaders == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if extraHeaders == nil {
|
||||||
|
extraHeaders = make(map[string]string)
|
||||||
|
}
|
||||||
|
for k, v := range metadata {
|
||||||
|
extraHeaders[userDefinedMetadataHeaderPrefix+k] = v
|
||||||
|
}
|
||||||
|
return extraHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
// sets extra header data for the specified resource
|
||||||
|
func (f FileServiceClient) setResourceHeaders(path string, comp compType, res resourceType, extraHeaders map[string]string, options *FileRequestOptions) (http.Header, error) {
|
||||||
|
if err := f.checkForStorageEmulator(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
params := mergeParams(getURLInitValues(comp, res), prepareOptions(options))
|
||||||
|
uri := f.client.getEndpoint(fileServiceName, path, params)
|
||||||
|
extraHeaders = f.client.protectUserAgent(extraHeaders)
|
||||||
|
headers := mergeHeaders(f.client.getStandardHeaders(), extraHeaders)
|
||||||
|
|
||||||
|
resp, err := f.client.exec(http.MethodPut, uri, headers, nil, f.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
return resp.headers, checkRespCode(resp.statusCode, []int{http.StatusOK})
|
||||||
|
}
|
||||||
|
|
||||||
|
//checkForStorageEmulator determines if the client is setup for use with
|
||||||
|
//Azure Storage Emulator, and returns a relevant error
|
||||||
|
func (f FileServiceClient) checkForStorageEmulator() error {
|
||||||
|
if f.client.accountName == StorageEmulatorAccountName {
|
||||||
|
return fmt.Errorf("Error: File service is not currently supported by Azure Storage Emulator")
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
187
vendor/github.com/Azure/azure-sdk-for-go/storage/leaseblob.go
generated
vendored
Normal file
187
vendor/github.com/Azure/azure-sdk-for-go/storage/leaseblob.go
generated
vendored
Normal file
@@ -0,0 +1,187 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// lease constants.
|
||||||
|
const (
|
||||||
|
leaseHeaderPrefix = "x-ms-lease-"
|
||||||
|
headerLeaseID = "x-ms-lease-id"
|
||||||
|
leaseAction = "x-ms-lease-action"
|
||||||
|
leaseBreakPeriod = "x-ms-lease-break-period"
|
||||||
|
leaseDuration = "x-ms-lease-duration"
|
||||||
|
leaseProposedID = "x-ms-proposed-lease-id"
|
||||||
|
leaseTime = "x-ms-lease-time"
|
||||||
|
|
||||||
|
acquireLease = "acquire"
|
||||||
|
renewLease = "renew"
|
||||||
|
changeLease = "change"
|
||||||
|
releaseLease = "release"
|
||||||
|
breakLease = "break"
|
||||||
|
)
|
||||||
|
|
||||||
|
// leasePut is common PUT code for the various acquire/release/break etc functions.
|
||||||
|
func (b *Blob) leaseCommonPut(headers map[string]string, expectedStatus int, options *LeaseOptions) (http.Header, error) {
|
||||||
|
params := url.Values{"comp": {"lease"}}
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{expectedStatus}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp.headers, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// LeaseOptions includes options for all operations regarding leasing blobs
|
||||||
|
type LeaseOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Origin string `header:"Origin"`
|
||||||
|
IfMatch string `header:"If-Match"`
|
||||||
|
IfNoneMatch string `header:"If-None-Match"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AcquireLease creates a lease for a blob
|
||||||
|
// returns leaseID acquired
|
||||||
|
// In API Versions starting on 2012-02-12, the minimum leaseTimeInSeconds is 15, the maximum
|
||||||
|
// non-infinite leaseTimeInSeconds is 60. To specify an infinite lease, provide the value -1.
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Lease-Blob
|
||||||
|
func (b *Blob) AcquireLease(leaseTimeInSeconds int, proposedLeaseID string, options *LeaseOptions) (returnedLeaseID string, err error) {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = acquireLease
|
||||||
|
|
||||||
|
if leaseTimeInSeconds == -1 {
|
||||||
|
// Do nothing, but don't trigger the following clauses.
|
||||||
|
} else if leaseTimeInSeconds > 60 || b.Container.bsc.client.apiVersion < "2012-02-12" {
|
||||||
|
leaseTimeInSeconds = 60
|
||||||
|
} else if leaseTimeInSeconds < 15 {
|
||||||
|
leaseTimeInSeconds = 15
|
||||||
|
}
|
||||||
|
|
||||||
|
headers[leaseDuration] = strconv.Itoa(leaseTimeInSeconds)
|
||||||
|
|
||||||
|
if proposedLeaseID != "" {
|
||||||
|
headers[leaseProposedID] = proposedLeaseID
|
||||||
|
}
|
||||||
|
|
||||||
|
respHeaders, err := b.leaseCommonPut(headers, http.StatusCreated, options)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
returnedLeaseID = respHeaders.Get(http.CanonicalHeaderKey(headerLeaseID))
|
||||||
|
|
||||||
|
if returnedLeaseID != "" {
|
||||||
|
return returnedLeaseID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", errors.New("LeaseID not returned")
|
||||||
|
}
|
||||||
|
|
||||||
|
// BreakLease breaks the lease for a blob
|
||||||
|
// Returns the timeout remaining in the lease in seconds
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Lease-Blob
|
||||||
|
func (b *Blob) BreakLease(options *LeaseOptions) (breakTimeout int, err error) {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = breakLease
|
||||||
|
return b.breakLeaseCommon(headers, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// BreakLeaseWithBreakPeriod breaks the lease for a blob
|
||||||
|
// breakPeriodInSeconds is used to determine how long until new lease can be created.
|
||||||
|
// Returns the timeout remaining in the lease in seconds
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Lease-Blob
|
||||||
|
func (b *Blob) BreakLeaseWithBreakPeriod(breakPeriodInSeconds int, options *LeaseOptions) (breakTimeout int, err error) {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = breakLease
|
||||||
|
headers[leaseBreakPeriod] = strconv.Itoa(breakPeriodInSeconds)
|
||||||
|
return b.breakLeaseCommon(headers, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// breakLeaseCommon is common code for both version of BreakLease (with and without break period)
|
||||||
|
func (b *Blob) breakLeaseCommon(headers map[string]string, options *LeaseOptions) (breakTimeout int, err error) {
|
||||||
|
|
||||||
|
respHeaders, err := b.leaseCommonPut(headers, http.StatusAccepted, options)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
breakTimeoutStr := respHeaders.Get(http.CanonicalHeaderKey(leaseTime))
|
||||||
|
if breakTimeoutStr != "" {
|
||||||
|
breakTimeout, err = strconv.Atoi(breakTimeoutStr)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return breakTimeout, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ChangeLease changes a lease ID for a blob
|
||||||
|
// Returns the new LeaseID acquired
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Lease-Blob
|
||||||
|
func (b *Blob) ChangeLease(currentLeaseID string, proposedLeaseID string, options *LeaseOptions) (newLeaseID string, err error) {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = changeLease
|
||||||
|
headers[headerLeaseID] = currentLeaseID
|
||||||
|
headers[leaseProposedID] = proposedLeaseID
|
||||||
|
|
||||||
|
respHeaders, err := b.leaseCommonPut(headers, http.StatusOK, options)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
newLeaseID = respHeaders.Get(http.CanonicalHeaderKey(headerLeaseID))
|
||||||
|
if newLeaseID != "" {
|
||||||
|
return newLeaseID, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return "", errors.New("LeaseID not returned")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReleaseLease releases the lease for a blob
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Lease-Blob
|
||||||
|
func (b *Blob) ReleaseLease(currentLeaseID string, options *LeaseOptions) error {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = releaseLease
|
||||||
|
headers[headerLeaseID] = currentLeaseID
|
||||||
|
|
||||||
|
_, err := b.leaseCommonPut(headers, http.StatusOK, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// RenewLease renews the lease for a blob as per https://msdn.microsoft.com/en-us/library/azure/ee691972.aspx
|
||||||
|
func (b *Blob) RenewLease(currentLeaseID string, options *LeaseOptions) error {
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers[leaseAction] = renewLease
|
||||||
|
headers[headerLeaseID] = currentLeaseID
|
||||||
|
|
||||||
|
_, err := b.leaseCommonPut(headers, http.StatusOK, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
153
vendor/github.com/Azure/azure-sdk-for-go/storage/message.go
generated
vendored
Normal file
153
vendor/github.com/Azure/azure-sdk-for-go/storage/message.go
generated
vendored
Normal file
@@ -0,0 +1,153 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Message represents an Azure message.
|
||||||
|
type Message struct {
|
||||||
|
Queue *Queue
|
||||||
|
Text string `xml:"MessageText"`
|
||||||
|
ID string `xml:"MessageId"`
|
||||||
|
Insertion TimeRFC1123 `xml:"InsertionTime"`
|
||||||
|
Expiration TimeRFC1123 `xml:"ExpirationTime"`
|
||||||
|
PopReceipt string `xml:"PopReceipt"`
|
||||||
|
NextVisible TimeRFC1123 `xml:"TimeNextVisible"`
|
||||||
|
DequeueCount int `xml:"DequeueCount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m *Message) buildPath() string {
|
||||||
|
return fmt.Sprintf("%s/%s", m.Queue.buildPathMessages(), m.ID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutMessageOptions is the set of options can be specified for Put Messsage
|
||||||
|
// operation. A zero struct does not use any preferences for the request.
|
||||||
|
type PutMessageOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
VisibilityTimeout int
|
||||||
|
MessageTTL int
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put operation adds a new message to the back of the message queue.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Message
|
||||||
|
func (m *Message) Put(options *PutMessageOptions) error {
|
||||||
|
query := url.Values{}
|
||||||
|
headers := m.Queue.qsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
req := putMessageRequest{MessageText: m.Text}
|
||||||
|
body, nn, err := xmlMarshal(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
headers["Content-Length"] = strconv.Itoa(nn)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
if options.VisibilityTimeout != 0 {
|
||||||
|
query.Set("visibilitytimeout", strconv.Itoa(options.VisibilityTimeout))
|
||||||
|
}
|
||||||
|
if options.MessageTTL != 0 {
|
||||||
|
query.Set("messagettl", strconv.Itoa(options.MessageTTL))
|
||||||
|
}
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
|
||||||
|
uri := m.Queue.qsc.client.getEndpoint(queueServiceName, m.Queue.buildPathMessages(), query)
|
||||||
|
resp, err := m.Queue.qsc.client.exec(http.MethodPost, uri, headers, body, m.Queue.qsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
err = xmlUnmarshal(resp.body, m)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateMessageOptions is the set of options can be specified for Update Messsage
|
||||||
|
// operation. A zero struct does not use any preferences for the request.
|
||||||
|
type UpdateMessageOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
VisibilityTimeout int
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update operation updates the specified message.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Update-Message
|
||||||
|
func (m *Message) Update(options *UpdateMessageOptions) error {
|
||||||
|
query := url.Values{}
|
||||||
|
if m.PopReceipt != "" {
|
||||||
|
query.Set("popreceipt", m.PopReceipt)
|
||||||
|
}
|
||||||
|
|
||||||
|
headers := m.Queue.qsc.client.getStandardHeaders()
|
||||||
|
req := putMessageRequest{MessageText: m.Text}
|
||||||
|
body, nn, err := xmlMarshal(req)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
headers["Content-Length"] = strconv.Itoa(nn)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
if options.VisibilityTimeout != 0 {
|
||||||
|
query.Set("visibilitytimeout", strconv.Itoa(options.VisibilityTimeout))
|
||||||
|
}
|
||||||
|
query = addTimeout(query, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := m.Queue.qsc.client.getEndpoint(queueServiceName, m.buildPath(), query)
|
||||||
|
|
||||||
|
resp, err := m.Queue.qsc.client.exec(http.MethodPut, uri, headers, body, m.Queue.qsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
m.PopReceipt = resp.headers.Get("x-ms-popreceipt")
|
||||||
|
nextTimeStr := resp.headers.Get("x-ms-time-next-visible")
|
||||||
|
if nextTimeStr != "" {
|
||||||
|
nextTime, err := time.Parse(time.RFC1123, nextTimeStr)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
m.NextVisible = TimeRFC1123(nextTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusNoContent})
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete operation deletes the specified message.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/dd179347.aspx
|
||||||
|
func (m *Message) Delete(options *QueueServiceOptions) error {
|
||||||
|
params := url.Values{"popreceipt": {m.PopReceipt}}
|
||||||
|
headers := m.Queue.qsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := m.Queue.qsc.client.getEndpoint(queueServiceName, m.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := m.Queue.qsc.client.exec(http.MethodDelete, uri, headers, nil, m.Queue.qsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusNoContent})
|
||||||
|
}
|
||||||
|
|
||||||
|
type putMessageRequest struct {
|
||||||
|
XMLName xml.Name `xml:"QueueMessage"`
|
||||||
|
MessageText string `xml:"MessageText"`
|
||||||
|
}
|
||||||
33
vendor/github.com/Azure/azure-sdk-for-go/storage/odata.go
generated
vendored
Normal file
33
vendor/github.com/Azure/azure-sdk-for-go/storage/odata.go
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
// MetadataLevel determines if operations should return a paylod,
|
||||||
|
// and it level of detail.
|
||||||
|
type MetadataLevel string
|
||||||
|
|
||||||
|
// This consts are meant to help with Odata supported operations
|
||||||
|
const (
|
||||||
|
OdataTypeSuffix = "@odata.type"
|
||||||
|
|
||||||
|
// Types
|
||||||
|
|
||||||
|
OdataBinary = "Edm.Binary"
|
||||||
|
OdataDateTime = "Edm.DateTime"
|
||||||
|
OdataGUID = "Edm.Guid"
|
||||||
|
OdataInt64 = "Edm.Int64"
|
||||||
|
|
||||||
|
// Query options
|
||||||
|
|
||||||
|
OdataFilter = "$filter"
|
||||||
|
OdataOrderBy = "$orderby"
|
||||||
|
OdataTop = "$top"
|
||||||
|
OdataSkip = "$skip"
|
||||||
|
OdataCount = "$count"
|
||||||
|
OdataExpand = "$expand"
|
||||||
|
OdataSelect = "$select"
|
||||||
|
OdataSearch = "$search"
|
||||||
|
|
||||||
|
EmptyPayload MetadataLevel = ""
|
||||||
|
NoMetadata MetadataLevel = "application/json;odata=nometadata"
|
||||||
|
MinimalMetadata MetadataLevel = "application/json;odata=minimalmetadata"
|
||||||
|
FullMetadata MetadataLevel = "application/json;odata=fullmetadata"
|
||||||
|
)
|
||||||
189
vendor/github.com/Azure/azure-sdk-for-go/storage/pageblob.go
generated
vendored
Normal file
189
vendor/github.com/Azure/azure-sdk-for-go/storage/pageblob.go
generated
vendored
Normal file
@@ -0,0 +1,189 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/xml"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetPageRangesResponse contains the response fields from
|
||||||
|
// Get Page Ranges call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/ee691973.aspx
|
||||||
|
type GetPageRangesResponse struct {
|
||||||
|
XMLName xml.Name `xml:"PageList"`
|
||||||
|
PageList []PageRange `xml:"PageRange"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// PageRange contains information about a page of a page blob from
|
||||||
|
// Get Pages Range call.
|
||||||
|
//
|
||||||
|
// See https://msdn.microsoft.com/en-us/library/azure/ee691973.aspx
|
||||||
|
type PageRange struct {
|
||||||
|
Start int64 `xml:"Start"`
|
||||||
|
End int64 `xml:"End"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
errBlobCopyAborted = errors.New("storage: blob copy is aborted")
|
||||||
|
errBlobCopyIDMismatch = errors.New("storage: blob copy id is a mismatch")
|
||||||
|
)
|
||||||
|
|
||||||
|
// PutPageOptions includes the options for a put page operation
|
||||||
|
type PutPageOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
IfSequenceNumberLessThanOrEqualTo *int `header:"x-ms-if-sequence-number-le"`
|
||||||
|
IfSequenceNumberLessThan *int `header:"x-ms-if-sequence-number-lt"`
|
||||||
|
IfSequenceNumberEqualTo *int `header:"x-ms-if-sequence-number-eq"`
|
||||||
|
IfModifiedSince *time.Time `header:"If-Modified-Since"`
|
||||||
|
IfUnmodifiedSince *time.Time `header:"If-Unmodified-Since"`
|
||||||
|
IfMatch string `header:"If-Match"`
|
||||||
|
IfNoneMatch string `header:"If-None-Match"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// WriteRange writes a range of pages to a page blob.
|
||||||
|
// Ranges must be aligned with 512-byte boundaries and chunk must be of size
|
||||||
|
// multiplies by 512.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Page
|
||||||
|
func (b *Blob) WriteRange(blobRange BlobRange, bytes io.Reader, options *PutPageOptions) error {
|
||||||
|
if bytes == nil {
|
||||||
|
return errors.New("bytes cannot be nil")
|
||||||
|
}
|
||||||
|
return b.modifyRange(blobRange, bytes, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ClearRange clears the given range in a page blob.
|
||||||
|
// Ranges must be aligned with 512-byte boundaries and chunk must be of size
|
||||||
|
// multiplies by 512.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Page
|
||||||
|
func (b *Blob) ClearRange(blobRange BlobRange, options *PutPageOptions) error {
|
||||||
|
return b.modifyRange(blobRange, nil, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (b *Blob) modifyRange(blobRange BlobRange, bytes io.Reader, options *PutPageOptions) error {
|
||||||
|
if blobRange.End < blobRange.Start {
|
||||||
|
return errors.New("the value for rangeEnd must be greater than or equal to rangeStart")
|
||||||
|
}
|
||||||
|
if blobRange.Start%512 != 0 {
|
||||||
|
return errors.New("the value for rangeStart must be a modulus of 512")
|
||||||
|
}
|
||||||
|
if blobRange.End%512 != 511 {
|
||||||
|
return errors.New("the value for rangeEnd must be a modulus of 511")
|
||||||
|
}
|
||||||
|
|
||||||
|
params := url.Values{"comp": {"page"}}
|
||||||
|
|
||||||
|
// default to clear
|
||||||
|
write := "clear"
|
||||||
|
var cl uint64
|
||||||
|
|
||||||
|
// if bytes is not nil then this is an update operation
|
||||||
|
if bytes != nil {
|
||||||
|
write = "update"
|
||||||
|
cl = (blobRange.End - blobRange.Start) + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-blob-type"] = string(BlobTypePage)
|
||||||
|
headers["x-ms-page-write"] = write
|
||||||
|
headers["x-ms-range"] = blobRange.String()
|
||||||
|
headers["Content-Length"] = fmt.Sprintf("%v", cl)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, bytes, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPageRangesOptions includes the options for a get page ranges operation
|
||||||
|
type GetPageRangesOptions struct {
|
||||||
|
Timeout uint
|
||||||
|
Snapshot *time.Time
|
||||||
|
PreviousSnapshot *time.Time
|
||||||
|
Range *BlobRange
|
||||||
|
LeaseID string `header:"x-ms-lease-id"`
|
||||||
|
RequestID string `header:"x-ms-client-request-id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPageRanges returns the list of valid page ranges for a page blob.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Get-Page-Ranges
|
||||||
|
func (b *Blob) GetPageRanges(options *GetPageRangesOptions) (GetPageRangesResponse, error) {
|
||||||
|
params := url.Values{"comp": {"pagelist"}}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
params = addSnapshot(params, options.Snapshot)
|
||||||
|
if options.PreviousSnapshot != nil {
|
||||||
|
params.Add("prevsnapshot", timeRfc1123Formatted(*options.PreviousSnapshot))
|
||||||
|
}
|
||||||
|
if options.Range != nil {
|
||||||
|
headers["Range"] = options.Range.String()
|
||||||
|
}
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
var out GetPageRangesResponse
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodGet, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
return out, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// PutPageBlob initializes an empty page blob with specified name and maximum
|
||||||
|
// size in bytes (size must be aligned to a 512-byte boundary). A page blob must
|
||||||
|
// be created using this method before writing pages.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Put-Blob
|
||||||
|
func (b *Blob) PutPageBlob(options *PutBlobOptions) error {
|
||||||
|
if b.Properties.ContentLength%512 != 0 {
|
||||||
|
return errors.New("Content length must be aligned to a 512-byte boundary")
|
||||||
|
}
|
||||||
|
|
||||||
|
params := url.Values{}
|
||||||
|
headers := b.Container.bsc.client.getStandardHeaders()
|
||||||
|
headers["x-ms-blob-type"] = string(BlobTypePage)
|
||||||
|
headers["x-ms-blob-content-length"] = fmt.Sprintf("%v", b.Properties.ContentLength)
|
||||||
|
headers["x-ms-blob-sequence-number"] = fmt.Sprintf("%v", b.Properties.SequenceNumber)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(b.Properties))
|
||||||
|
headers = b.Container.bsc.client.addMetadataToHeaders(headers, b.Metadata)
|
||||||
|
|
||||||
|
if options != nil {
|
||||||
|
params = addTimeout(params, options.Timeout)
|
||||||
|
headers = mergeHeaders(headers, headersFromStruct(*options))
|
||||||
|
}
|
||||||
|
uri := b.Container.bsc.client.getEndpoint(blobServiceName, b.buildPath(), params)
|
||||||
|
|
||||||
|
resp, err := b.Container.bsc.client.exec(http.MethodPut, uri, headers, nil, b.Container.bsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusCreated})
|
||||||
|
}
|
||||||
28
vendor/github.com/Azure/azure-sdk-for-go/storage/queueserviceclient.go
generated
vendored
Normal file
28
vendor/github.com/Azure/azure-sdk-for-go/storage/queueserviceclient.go
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
// QueueServiceClient contains operations for Microsoft Azure Queue Storage
|
||||||
|
// Service.
|
||||||
|
type QueueServiceClient struct {
|
||||||
|
client Client
|
||||||
|
auth authentication
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServiceProperties gets the properties of your storage account's queue service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-queue-service-properties
|
||||||
|
func (q *QueueServiceClient) GetServiceProperties() (*ServiceProperties, error) {
|
||||||
|
return q.client.getServiceProperties(queueServiceName, q.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetServiceProperties sets the properties of your storage account's queue service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-queue-service-properties
|
||||||
|
func (q *QueueServiceClient) SetServiceProperties(props ServiceProperties) error {
|
||||||
|
return q.client.setServiceProperties(props, queueServiceName, q.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetQueueReference returns a Container object for the specified queue name.
|
||||||
|
func (q *QueueServiceClient) GetQueueReference(name string) *Queue {
|
||||||
|
return &Queue{
|
||||||
|
qsc: q,
|
||||||
|
Name: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
202
vendor/github.com/Azure/azure-sdk-for-go/storage/share.go
generated
vendored
Normal file
202
vendor/github.com/Azure/azure-sdk-for-go/storage/share.go
generated
vendored
Normal file
@@ -0,0 +1,202 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Share represents an Azure file share.
|
||||||
|
type Share struct {
|
||||||
|
fsc *FileServiceClient
|
||||||
|
Name string `xml:"Name"`
|
||||||
|
Properties ShareProperties `xml:"Properties"`
|
||||||
|
Metadata map[string]string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ShareProperties contains various properties of a share.
|
||||||
|
type ShareProperties struct {
|
||||||
|
LastModified string `xml:"Last-Modified"`
|
||||||
|
Etag string `xml:"Etag"`
|
||||||
|
Quota int `xml:"Quota"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// builds the complete path for this share object.
|
||||||
|
func (s *Share) buildPath() string {
|
||||||
|
return fmt.Sprintf("/%s", s.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create this share under the associated account.
|
||||||
|
// If a share with the same name already exists, the operation fails.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Share
|
||||||
|
func (s *Share) Create(options *FileRequestOptions) error {
|
||||||
|
extraheaders := map[string]string{}
|
||||||
|
if s.Properties.Quota > 0 {
|
||||||
|
extraheaders["x-ms-share-quota"] = strconv.Itoa(s.Properties.Quota)
|
||||||
|
}
|
||||||
|
|
||||||
|
params := prepareOptions(options)
|
||||||
|
headers, err := s.fsc.createResource(s.buildPath(), resourceShare, params, mergeMDIntoExtraHeaders(s.Metadata, extraheaders), []int{http.StatusCreated})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s.updateEtagAndLastModified(headers)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateIfNotExists creates this share under the associated account if
|
||||||
|
// it does not exist. Returns true if the share is newly created or false if
|
||||||
|
// the share already exists.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Share
|
||||||
|
func (s *Share) CreateIfNotExists(options *FileRequestOptions) (bool, error) {
|
||||||
|
extraheaders := map[string]string{}
|
||||||
|
if s.Properties.Quota > 0 {
|
||||||
|
extraheaders["x-ms-share-quota"] = strconv.Itoa(s.Properties.Quota)
|
||||||
|
}
|
||||||
|
|
||||||
|
params := prepareOptions(options)
|
||||||
|
resp, err := s.fsc.createResourceNoClose(s.buildPath(), resourceShare, params, extraheaders)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusCreated || resp.statusCode == http.StatusConflict {
|
||||||
|
if resp.statusCode == http.StatusCreated {
|
||||||
|
s.updateEtagAndLastModified(resp.headers)
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
return false, s.FetchAttributes(nil)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete marks this share for deletion. The share along with any files
|
||||||
|
// and directories contained within it are later deleted during garbage
|
||||||
|
// collection. If the share does not exist the operation fails
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Delete-Share
|
||||||
|
func (s *Share) Delete(options *FileRequestOptions) error {
|
||||||
|
return s.fsc.deleteResource(s.buildPath(), resourceShare, options)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteIfExists operation marks this share for deletion if it exists.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Delete-Share
|
||||||
|
func (s *Share) DeleteIfExists(options *FileRequestOptions) (bool, error) {
|
||||||
|
resp, err := s.fsc.deleteResourceNoClose(s.buildPath(), resourceShare, options)
|
||||||
|
if resp != nil {
|
||||||
|
defer readAndCloseBody(resp.body)
|
||||||
|
if resp.statusCode == http.StatusAccepted || resp.statusCode == http.StatusNotFound {
|
||||||
|
return resp.statusCode == http.StatusAccepted, nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Exists returns true if this share already exists
|
||||||
|
// on the storage account, otherwise returns false.
|
||||||
|
func (s *Share) Exists() (bool, error) {
|
||||||
|
exists, headers, err := s.fsc.resourceExists(s.buildPath(), resourceShare)
|
||||||
|
if exists {
|
||||||
|
s.updateEtagAndLastModified(headers)
|
||||||
|
s.updateQuota(headers)
|
||||||
|
}
|
||||||
|
return exists, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// FetchAttributes retrieves metadata and properties for this share.
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-share-properties
|
||||||
|
func (s *Share) FetchAttributes(options *FileRequestOptions) error {
|
||||||
|
params := prepareOptions(options)
|
||||||
|
headers, err := s.fsc.getResourceHeaders(s.buildPath(), compNone, resourceShare, params, http.MethodHead)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s.updateEtagAndLastModified(headers)
|
||||||
|
s.updateQuota(headers)
|
||||||
|
s.Metadata = getMetadataFromHeaders(headers)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRootDirectoryReference returns a Directory object at the root of this share.
|
||||||
|
func (s *Share) GetRootDirectoryReference() *Directory {
|
||||||
|
return &Directory{
|
||||||
|
fsc: s.fsc,
|
||||||
|
share: s,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServiceClient returns the FileServiceClient associated with this share.
|
||||||
|
func (s *Share) ServiceClient() *FileServiceClient {
|
||||||
|
return s.fsc
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMetadata replaces the metadata for this share.
|
||||||
|
//
|
||||||
|
// Some keys may be converted to Camel-Case before sending. All keys
|
||||||
|
// are returned in lower case by GetShareMetadata. HTTP header names
|
||||||
|
// are case-insensitive so case munging should not matter to other
|
||||||
|
// applications either.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-share-metadata
|
||||||
|
func (s *Share) SetMetadata(options *FileRequestOptions) error {
|
||||||
|
headers, err := s.fsc.setResourceHeaders(s.buildPath(), compMetadata, resourceShare, mergeMDIntoExtraHeaders(s.Metadata, nil), options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s.updateEtagAndLastModified(headers)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetProperties sets system properties for this share.
|
||||||
|
//
|
||||||
|
// Some keys may be converted to Camel-Case before sending. All keys
|
||||||
|
// are returned in lower case by SetShareProperties. HTTP header names
|
||||||
|
// are case-insensitive so case munging should not matter to other
|
||||||
|
// applications either.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Set-Share-Properties
|
||||||
|
func (s *Share) SetProperties(options *FileRequestOptions) error {
|
||||||
|
extraheaders := map[string]string{}
|
||||||
|
if s.Properties.Quota > 0 {
|
||||||
|
if s.Properties.Quota > 5120 {
|
||||||
|
return fmt.Errorf("invalid value %v for quota, valid values are [1, 5120]", s.Properties.Quota)
|
||||||
|
}
|
||||||
|
extraheaders["x-ms-share-quota"] = strconv.Itoa(s.Properties.Quota)
|
||||||
|
}
|
||||||
|
|
||||||
|
headers, err := s.fsc.setResourceHeaders(s.buildPath(), compProperties, resourceShare, extraheaders, options)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
s.updateEtagAndLastModified(headers)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// updates Etag and last modified date
|
||||||
|
func (s *Share) updateEtagAndLastModified(headers http.Header) {
|
||||||
|
s.Properties.Etag = headers.Get("Etag")
|
||||||
|
s.Properties.LastModified = headers.Get("Last-Modified")
|
||||||
|
}
|
||||||
|
|
||||||
|
// updates quota value
|
||||||
|
func (s *Share) updateQuota(headers http.Header) {
|
||||||
|
quota, err := strconv.Atoi(headers.Get("x-ms-share-quota"))
|
||||||
|
if err == nil {
|
||||||
|
s.Properties.Quota = quota
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// URL gets the canonical URL to this share. This method does not create a publicly accessible
|
||||||
|
// URL if the share is private and this method does not check if the share exists.
|
||||||
|
func (s *Share) URL() string {
|
||||||
|
return s.fsc.client.getEndpoint(fileServiceName, s.buildPath(), url.Values{})
|
||||||
|
}
|
||||||
47
vendor/github.com/Azure/azure-sdk-for-go/storage/storagepolicy.go
generated
vendored
Normal file
47
vendor/github.com/Azure/azure-sdk-for-go/storage/storagepolicy.go
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// AccessPolicyDetailsXML has specifics about an access policy
|
||||||
|
// annotated with XML details.
|
||||||
|
type AccessPolicyDetailsXML struct {
|
||||||
|
StartTime time.Time `xml:"Start"`
|
||||||
|
ExpiryTime time.Time `xml:"Expiry"`
|
||||||
|
Permission string `xml:"Permission"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignedIdentifier is a wrapper for a specific policy
|
||||||
|
type SignedIdentifier struct {
|
||||||
|
ID string `xml:"Id"`
|
||||||
|
AccessPolicy AccessPolicyDetailsXML `xml:"AccessPolicy"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignedIdentifiers part of the response from GetPermissions call.
|
||||||
|
type SignedIdentifiers struct {
|
||||||
|
SignedIdentifiers []SignedIdentifier `xml:"SignedIdentifier"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// AccessPolicy is the response type from the GetPermissions call.
|
||||||
|
type AccessPolicy struct {
|
||||||
|
SignedIdentifiersList SignedIdentifiers `xml:"SignedIdentifiers"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// convertAccessPolicyToXMLStructs converts between AccessPolicyDetails which is a struct better for API usage to the
|
||||||
|
// AccessPolicy struct which will get converted to XML.
|
||||||
|
func convertAccessPolicyToXMLStructs(id string, startTime time.Time, expiryTime time.Time, permissions string) SignedIdentifier {
|
||||||
|
return SignedIdentifier{
|
||||||
|
ID: id,
|
||||||
|
AccessPolicy: AccessPolicyDetailsXML{
|
||||||
|
StartTime: startTime.UTC().Round(time.Second),
|
||||||
|
ExpiryTime: expiryTime.UTC().Round(time.Second),
|
||||||
|
Permission: permissions,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func updatePermissions(permissions, permission string) bool {
|
||||||
|
return strings.Contains(permissions, permission)
|
||||||
|
}
|
||||||
117
vendor/github.com/Azure/azure-sdk-for-go/storage/storageservice.go
generated
vendored
Normal file
117
vendor/github.com/Azure/azure-sdk-for-go/storage/storageservice.go
generated
vendored
Normal file
@@ -0,0 +1,117 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ServiceProperties represents the storage account service properties
|
||||||
|
type ServiceProperties struct {
|
||||||
|
Logging *Logging
|
||||||
|
HourMetrics *Metrics
|
||||||
|
MinuteMetrics *Metrics
|
||||||
|
Cors *Cors
|
||||||
|
}
|
||||||
|
|
||||||
|
// Logging represents the Azure Analytics Logging settings
|
||||||
|
type Logging struct {
|
||||||
|
Version string
|
||||||
|
Delete bool
|
||||||
|
Read bool
|
||||||
|
Write bool
|
||||||
|
RetentionPolicy *RetentionPolicy
|
||||||
|
}
|
||||||
|
|
||||||
|
// RetentionPolicy indicates if retention is enabled and for how many days
|
||||||
|
type RetentionPolicy struct {
|
||||||
|
Enabled bool
|
||||||
|
Days *int
|
||||||
|
}
|
||||||
|
|
||||||
|
// Metrics provide request statistics.
|
||||||
|
type Metrics struct {
|
||||||
|
Version string
|
||||||
|
Enabled bool
|
||||||
|
IncludeAPIs *bool
|
||||||
|
RetentionPolicy *RetentionPolicy
|
||||||
|
}
|
||||||
|
|
||||||
|
// Cors includes all the CORS rules
|
||||||
|
type Cors struct {
|
||||||
|
CorsRule []CorsRule
|
||||||
|
}
|
||||||
|
|
||||||
|
// CorsRule includes all settings for a Cors rule
|
||||||
|
type CorsRule struct {
|
||||||
|
AllowedOrigins string
|
||||||
|
AllowedMethods string
|
||||||
|
MaxAgeInSeconds int
|
||||||
|
ExposedHeaders string
|
||||||
|
AllowedHeaders string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c Client) getServiceProperties(service string, auth authentication) (*ServiceProperties, error) {
|
||||||
|
query := url.Values{
|
||||||
|
"restype": {"service"},
|
||||||
|
"comp": {"properties"},
|
||||||
|
}
|
||||||
|
uri := c.getEndpoint(service, "", query)
|
||||||
|
headers := c.getStandardHeaders()
|
||||||
|
|
||||||
|
resp, err := c.exec(http.MethodGet, uri, headers, nil, auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var out ServiceProperties
|
||||||
|
err = xmlUnmarshal(resp.body, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c Client) setServiceProperties(props ServiceProperties, service string, auth authentication) error {
|
||||||
|
query := url.Values{
|
||||||
|
"restype": {"service"},
|
||||||
|
"comp": {"properties"},
|
||||||
|
}
|
||||||
|
uri := c.getEndpoint(service, "", query)
|
||||||
|
|
||||||
|
// Ideally, StorageServiceProperties would be the output struct
|
||||||
|
// This is to avoid golint stuttering, while generating the correct XML
|
||||||
|
type StorageServiceProperties struct {
|
||||||
|
Logging *Logging
|
||||||
|
HourMetrics *Metrics
|
||||||
|
MinuteMetrics *Metrics
|
||||||
|
Cors *Cors
|
||||||
|
}
|
||||||
|
input := StorageServiceProperties{
|
||||||
|
Logging: props.Logging,
|
||||||
|
HourMetrics: props.HourMetrics,
|
||||||
|
MinuteMetrics: props.MinuteMetrics,
|
||||||
|
Cors: props.Cors,
|
||||||
|
}
|
||||||
|
|
||||||
|
body, length, err := xmlMarshal(input)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
headers := c.getStandardHeaders()
|
||||||
|
headers["Content-Length"] = strconv.Itoa(length)
|
||||||
|
|
||||||
|
resp, err := c.exec(http.MethodPut, uri, headers, body, auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
readAndCloseBody(resp.body)
|
||||||
|
return checkRespCode(resp.statusCode, []int{http.StatusAccepted})
|
||||||
|
}
|
||||||
302
vendor/github.com/Azure/azure-sdk-for-go/storage/table_batch.go
generated
vendored
Normal file
302
vendor/github.com/Azure/azure-sdk-for-go/storage/table_batch.go
generated
vendored
Normal file
@@ -0,0 +1,302 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/json"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"mime/multipart"
|
||||||
|
"net/http"
|
||||||
|
"net/textproto"
|
||||||
|
"sort"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"github.com/satori/uuid"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Operation type. Insert, Delete, Replace etc.
|
||||||
|
type Operation int
|
||||||
|
|
||||||
|
// consts for batch operations.
|
||||||
|
const (
|
||||||
|
InsertOp = Operation(1)
|
||||||
|
DeleteOp = Operation(2)
|
||||||
|
ReplaceOp = Operation(3)
|
||||||
|
MergeOp = Operation(4)
|
||||||
|
InsertOrReplaceOp = Operation(5)
|
||||||
|
InsertOrMergeOp = Operation(6)
|
||||||
|
)
|
||||||
|
|
||||||
|
// BatchEntity used for tracking Entities to operate on and
|
||||||
|
// whether operations (replace/merge etc) should be forced.
|
||||||
|
// Wrapper for regular Entity with additional data specific for the entity.
|
||||||
|
type BatchEntity struct {
|
||||||
|
*Entity
|
||||||
|
Force bool
|
||||||
|
Op Operation
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableBatch stores all the entities that will be operated on during a batch process.
|
||||||
|
// Entities can be inserted, replaced or deleted.
|
||||||
|
type TableBatch struct {
|
||||||
|
BatchEntitySlice []BatchEntity
|
||||||
|
|
||||||
|
// reference to table we're operating on.
|
||||||
|
Table *Table
|
||||||
|
}
|
||||||
|
|
||||||
|
// defaultChangesetHeaders for changeSets
|
||||||
|
var defaultChangesetHeaders = map[string]string{
|
||||||
|
"Accept": "application/json;odata=minimalmetadata",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
"Prefer": "return-no-content",
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBatch return new TableBatch for populating.
|
||||||
|
func (t *Table) NewBatch() *TableBatch {
|
||||||
|
return &TableBatch{
|
||||||
|
Table: t,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertEntity adds an entity in preparation for a batch insert.
|
||||||
|
func (t *TableBatch) InsertEntity(entity *Entity) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: InsertOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrReplaceEntity adds an entity in preparation for a batch insert or replace.
|
||||||
|
func (t *TableBatch) InsertOrReplaceEntity(entity *Entity, force bool) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: InsertOrReplaceOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrReplaceEntityByForce adds an entity in preparation for a batch insert or replace. Forces regardless of ETag
|
||||||
|
func (t *TableBatch) InsertOrReplaceEntityByForce(entity *Entity) {
|
||||||
|
t.InsertOrReplaceEntity(entity, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrMergeEntity adds an entity in preparation for a batch insert or merge.
|
||||||
|
func (t *TableBatch) InsertOrMergeEntity(entity *Entity, force bool) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: InsertOrMergeOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// InsertOrMergeEntityByForce adds an entity in preparation for a batch insert or merge. Forces regardless of ETag
|
||||||
|
func (t *TableBatch) InsertOrMergeEntityByForce(entity *Entity) {
|
||||||
|
t.InsertOrMergeEntity(entity, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReplaceEntity adds an entity in preparation for a batch replace.
|
||||||
|
func (t *TableBatch) ReplaceEntity(entity *Entity) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: ReplaceOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteEntity adds an entity in preparation for a batch delete
|
||||||
|
func (t *TableBatch) DeleteEntity(entity *Entity, force bool) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: DeleteOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteEntityByForce adds an entity in preparation for a batch delete. Forces regardless of ETag
|
||||||
|
func (t *TableBatch) DeleteEntityByForce(entity *Entity, force bool) {
|
||||||
|
t.DeleteEntity(entity, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
// MergeEntity adds an entity in preparation for a batch merge
|
||||||
|
func (t *TableBatch) MergeEntity(entity *Entity) {
|
||||||
|
be := BatchEntity{Entity: entity, Force: false, Op: MergeOp}
|
||||||
|
t.BatchEntitySlice = append(t.BatchEntitySlice, be)
|
||||||
|
}
|
||||||
|
|
||||||
|
// ExecuteBatch executes many table operations in one request to Azure.
|
||||||
|
// The operations can be combinations of Insert, Delete, Replace and Merge
|
||||||
|
// Creates the inner changeset body (various operations, Insert, Delete etc) then creates the outer request packet that encompasses
|
||||||
|
// the changesets.
|
||||||
|
// As per document https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/performing-entity-group-transactions
|
||||||
|
func (t *TableBatch) ExecuteBatch() error {
|
||||||
|
changesetBoundary := fmt.Sprintf("changeset_%s", uuid.NewV1())
|
||||||
|
uri := t.Table.tsc.client.getEndpoint(tableServiceName, "$batch", nil)
|
||||||
|
changesetBody, err := t.generateChangesetBody(changesetBoundary)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
boundary := fmt.Sprintf("batch_%s", uuid.NewV1())
|
||||||
|
body, err := generateBody(changesetBody, changesetBoundary, boundary)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
headers := t.Table.tsc.client.getStandardHeaders()
|
||||||
|
headers[headerContentType] = fmt.Sprintf("multipart/mixed; boundary=%s", boundary)
|
||||||
|
|
||||||
|
resp, err := t.Table.tsc.client.execBatchOperationJSON(http.MethodPost, uri, headers, bytes.NewReader(body.Bytes()), t.Table.tsc.auth)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
if err = checkRespCode(resp.statusCode, []int{http.StatusAccepted}); err != nil {
|
||||||
|
|
||||||
|
// check which batch failed.
|
||||||
|
operationFailedMessage := t.getFailedOperation(resp.odata.Err.Message.Value)
|
||||||
|
requestID, date, version := getDebugHeaders(resp.headers)
|
||||||
|
return AzureStorageServiceError{
|
||||||
|
StatusCode: resp.statusCode,
|
||||||
|
Code: resp.odata.Err.Code,
|
||||||
|
RequestID: requestID,
|
||||||
|
Date: date,
|
||||||
|
APIVersion: version,
|
||||||
|
Message: operationFailedMessage,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// getFailedOperation parses the original Azure error string and determines which operation failed
|
||||||
|
// and generates appropriate message.
|
||||||
|
func (t *TableBatch) getFailedOperation(errorMessage string) string {
|
||||||
|
// errorMessage consists of "number:string" we just need the number.
|
||||||
|
sp := strings.Split(errorMessage, ":")
|
||||||
|
if len(sp) > 1 {
|
||||||
|
msg := fmt.Sprintf("Element %s in the batch returned an unexpected response code.\n%s", sp[0], errorMessage)
|
||||||
|
return msg
|
||||||
|
}
|
||||||
|
|
||||||
|
// cant parse the message, just return the original message to client
|
||||||
|
return errorMessage
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateBody generates the complete body for the batch request.
|
||||||
|
func generateBody(changeSetBody *bytes.Buffer, changesetBoundary string, boundary string) (*bytes.Buffer, error) {
|
||||||
|
|
||||||
|
body := new(bytes.Buffer)
|
||||||
|
writer := multipart.NewWriter(body)
|
||||||
|
writer.SetBoundary(boundary)
|
||||||
|
h := make(textproto.MIMEHeader)
|
||||||
|
h.Set(headerContentType, fmt.Sprintf("multipart/mixed; boundary=%s\r\n", changesetBoundary))
|
||||||
|
batchWriter, err := writer.CreatePart(h)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
batchWriter.Write(changeSetBody.Bytes())
|
||||||
|
writer.Close()
|
||||||
|
return body, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateChangesetBody generates the individual changesets for the various operations within the batch request.
|
||||||
|
// There is a changeset for Insert, Delete, Merge etc.
|
||||||
|
func (t *TableBatch) generateChangesetBody(changesetBoundary string) (*bytes.Buffer, error) {
|
||||||
|
|
||||||
|
body := new(bytes.Buffer)
|
||||||
|
writer := multipart.NewWriter(body)
|
||||||
|
writer.SetBoundary(changesetBoundary)
|
||||||
|
|
||||||
|
for _, be := range t.BatchEntitySlice {
|
||||||
|
t.generateEntitySubset(&be, writer)
|
||||||
|
}
|
||||||
|
|
||||||
|
writer.Close()
|
||||||
|
return body, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateVerb generates the HTTP request VERB required for each changeset.
|
||||||
|
func generateVerb(op Operation) (string, error) {
|
||||||
|
switch op {
|
||||||
|
case InsertOp:
|
||||||
|
return http.MethodPost, nil
|
||||||
|
case DeleteOp:
|
||||||
|
return http.MethodDelete, nil
|
||||||
|
case ReplaceOp, InsertOrReplaceOp:
|
||||||
|
return http.MethodPut, nil
|
||||||
|
case MergeOp, InsertOrMergeOp:
|
||||||
|
return "MERGE", nil
|
||||||
|
default:
|
||||||
|
return "", errors.New("Unable to detect operation")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateQueryPath generates the query path for within the changesets
|
||||||
|
// For inserts it will just be a table query path (table name)
|
||||||
|
// but for other operations (modifying an existing entity) then
|
||||||
|
// the partition/row keys need to be generated.
|
||||||
|
func (t *TableBatch) generateQueryPath(op Operation, entity *Entity) string {
|
||||||
|
if op == InsertOp {
|
||||||
|
return entity.Table.buildPath()
|
||||||
|
}
|
||||||
|
return entity.buildPath()
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateGenericOperationHeaders generates common headers for a given operation.
|
||||||
|
func generateGenericOperationHeaders(be *BatchEntity) map[string]string {
|
||||||
|
retval := map[string]string{}
|
||||||
|
|
||||||
|
for k, v := range defaultChangesetHeaders {
|
||||||
|
retval[k] = v
|
||||||
|
}
|
||||||
|
|
||||||
|
if be.Op == DeleteOp || be.Op == ReplaceOp || be.Op == MergeOp {
|
||||||
|
if be.Force || be.Entity.OdataEtag == "" {
|
||||||
|
retval["If-Match"] = "*"
|
||||||
|
} else {
|
||||||
|
retval["If-Match"] = be.Entity.OdataEtag
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return retval
|
||||||
|
}
|
||||||
|
|
||||||
|
// generateEntitySubset generates body payload for particular batch entity
|
||||||
|
func (t *TableBatch) generateEntitySubset(batchEntity *BatchEntity, writer *multipart.Writer) error {
|
||||||
|
|
||||||
|
h := make(textproto.MIMEHeader)
|
||||||
|
h.Set(headerContentType, "application/http")
|
||||||
|
h.Set(headerContentTransferEncoding, "binary")
|
||||||
|
|
||||||
|
verb, err := generateVerb(batchEntity.Op)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
genericOpHeadersMap := generateGenericOperationHeaders(batchEntity)
|
||||||
|
queryPath := t.generateQueryPath(batchEntity.Op, batchEntity.Entity)
|
||||||
|
uri := t.Table.tsc.client.getEndpoint(tableServiceName, queryPath, nil)
|
||||||
|
|
||||||
|
operationWriter, err := writer.CreatePart(h)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
urlAndVerb := fmt.Sprintf("%s %s HTTP/1.1\r\n", verb, uri)
|
||||||
|
operationWriter.Write([]byte(urlAndVerb))
|
||||||
|
writeHeaders(genericOpHeadersMap, &operationWriter)
|
||||||
|
operationWriter.Write([]byte("\r\n")) // additional \r\n is needed per changeset separating the "headers" and the body.
|
||||||
|
|
||||||
|
// delete operation doesn't need a body.
|
||||||
|
if batchEntity.Op != DeleteOp {
|
||||||
|
//var e Entity = batchEntity.Entity
|
||||||
|
body, err := json.Marshal(batchEntity.Entity)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
operationWriter.Write(body)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func writeHeaders(h map[string]string, writer *io.Writer) {
|
||||||
|
// This way it is guaranteed the headers will be written in a sorted order
|
||||||
|
var keys []string
|
||||||
|
for k := range h {
|
||||||
|
keys = append(keys, k)
|
||||||
|
}
|
||||||
|
sort.Strings(keys)
|
||||||
|
for _, k := range keys {
|
||||||
|
(*writer).Write([]byte(fmt.Sprintf("%s: %s\r\n", k, h[k])))
|
||||||
|
}
|
||||||
|
}
|
||||||
190
vendor/github.com/Azure/azure-sdk-for-go/storage/tableserviceclient.go
generated
vendored
Normal file
190
vendor/github.com/Azure/azure-sdk-for-go/storage/tableserviceclient.go
generated
vendored
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
headerAccept = "Accept"
|
||||||
|
headerEtag = "Etag"
|
||||||
|
headerPrefer = "Prefer"
|
||||||
|
headerXmsContinuation = "x-ms-Continuation-NextTableName"
|
||||||
|
)
|
||||||
|
|
||||||
|
// TableServiceClient contains operations for Microsoft Azure Table Storage
|
||||||
|
// Service.
|
||||||
|
type TableServiceClient struct {
|
||||||
|
client Client
|
||||||
|
auth authentication
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableOptions includes options for some table operations
|
||||||
|
type TableOptions struct {
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (options *TableOptions) addToHeaders(h map[string]string) map[string]string {
|
||||||
|
if options != nil {
|
||||||
|
h = addToHeaders(h, "x-ms-client-request-id", options.RequestID)
|
||||||
|
}
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryNextLink includes information for getting the next page of
|
||||||
|
// results in query operations
|
||||||
|
type QueryNextLink struct {
|
||||||
|
NextLink *string
|
||||||
|
ml MetadataLevel
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetServiceProperties gets the properties of your storage account's table service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/get-table-service-properties
|
||||||
|
func (t *TableServiceClient) GetServiceProperties() (*ServiceProperties, error) {
|
||||||
|
return t.client.getServiceProperties(tableServiceName, t.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetServiceProperties sets the properties of your storage account's table service.
|
||||||
|
// See: https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/set-table-service-properties
|
||||||
|
func (t *TableServiceClient) SetServiceProperties(props ServiceProperties) error {
|
||||||
|
return t.client.setServiceProperties(props, tableServiceName, t.auth)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetTableReference returns a Table object for the specified table name.
|
||||||
|
func (t *TableServiceClient) GetTableReference(name string) *Table {
|
||||||
|
return &Table{
|
||||||
|
tsc: t,
|
||||||
|
Name: name,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryTablesOptions includes options for some table operations
|
||||||
|
type QueryTablesOptions struct {
|
||||||
|
Top uint
|
||||||
|
Filter string
|
||||||
|
RequestID string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (options *QueryTablesOptions) getParameters() (url.Values, map[string]string) {
|
||||||
|
query := url.Values{}
|
||||||
|
headers := map[string]string{}
|
||||||
|
if options != nil {
|
||||||
|
if options.Top > 0 {
|
||||||
|
query.Add(OdataTop, strconv.FormatUint(uint64(options.Top), 10))
|
||||||
|
}
|
||||||
|
if options.Filter != "" {
|
||||||
|
query.Add(OdataFilter, options.Filter)
|
||||||
|
}
|
||||||
|
headers = addToHeaders(headers, "x-ms-client-request-id", options.RequestID)
|
||||||
|
}
|
||||||
|
return query, headers
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryTables returns the tables in the storage account.
|
||||||
|
// You can use query options defined by the OData Protocol specification.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/query-tables
|
||||||
|
func (t *TableServiceClient) QueryTables(ml MetadataLevel, options *QueryTablesOptions) (*TableQueryResult, error) {
|
||||||
|
query, headers := options.getParameters()
|
||||||
|
uri := t.client.getEndpoint(tableServiceName, tablesURIPath, query)
|
||||||
|
return t.queryTables(uri, headers, ml)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NextResults returns the next page of results
|
||||||
|
// from a QueryTables or a NextResults operation.
|
||||||
|
//
|
||||||
|
// See https://docs.microsoft.com/rest/api/storageservices/fileservices/query-tables
|
||||||
|
// See https://docs.microsoft.com/rest/api/storageservices/fileservices/query-timeout-and-pagination
|
||||||
|
func (tqr *TableQueryResult) NextResults(options *TableOptions) (*TableQueryResult, error) {
|
||||||
|
if tqr == nil {
|
||||||
|
return nil, errNilPreviousResult
|
||||||
|
}
|
||||||
|
if tqr.NextLink == nil {
|
||||||
|
return nil, errNilNextLink
|
||||||
|
}
|
||||||
|
headers := options.addToHeaders(map[string]string{})
|
||||||
|
|
||||||
|
return tqr.tsc.queryTables(*tqr.NextLink, headers, tqr.ml)
|
||||||
|
}
|
||||||
|
|
||||||
|
// TableQueryResult contains the response from
|
||||||
|
// QueryTables and QueryTablesNextResults functions.
|
||||||
|
type TableQueryResult struct {
|
||||||
|
OdataMetadata string `json:"odata.metadata"`
|
||||||
|
Tables []Table `json:"value"`
|
||||||
|
QueryNextLink
|
||||||
|
tsc *TableServiceClient
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *TableServiceClient) queryTables(uri string, headers map[string]string, ml MetadataLevel) (*TableQueryResult, error) {
|
||||||
|
if ml == EmptyPayload {
|
||||||
|
return nil, errEmptyPayload
|
||||||
|
}
|
||||||
|
headers = mergeHeaders(headers, t.client.getStandardHeaders())
|
||||||
|
headers[headerAccept] = string(ml)
|
||||||
|
|
||||||
|
resp, err := t.client.exec(http.MethodGet, uri, headers, nil, t.auth)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer resp.body.Close()
|
||||||
|
|
||||||
|
if err := checkRespCode(resp.statusCode, []int{http.StatusOK}); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
respBody, err := ioutil.ReadAll(resp.body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
var out TableQueryResult
|
||||||
|
err = json.Unmarshal(respBody, &out)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
for i := range out.Tables {
|
||||||
|
out.Tables[i].tsc = t
|
||||||
|
}
|
||||||
|
out.tsc = t
|
||||||
|
|
||||||
|
nextLink := resp.headers.Get(http.CanonicalHeaderKey(headerXmsContinuation))
|
||||||
|
if nextLink == "" {
|
||||||
|
out.NextLink = nil
|
||||||
|
} else {
|
||||||
|
originalURI, err := url.Parse(uri)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
v := originalURI.Query()
|
||||||
|
v.Set(nextTableQueryParameter, nextLink)
|
||||||
|
newURI := t.client.getEndpoint(tableServiceName, tablesURIPath, v)
|
||||||
|
out.NextLink = &newURI
|
||||||
|
out.ml = ml
|
||||||
|
}
|
||||||
|
|
||||||
|
return &out, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func addBodyRelatedHeaders(h map[string]string, length int) map[string]string {
|
||||||
|
h[headerContentType] = "application/json"
|
||||||
|
h[headerContentLength] = fmt.Sprintf("%v", length)
|
||||||
|
h[headerAcceptCharset] = "UTF-8"
|
||||||
|
return h
|
||||||
|
}
|
||||||
|
|
||||||
|
func addReturnContentHeaders(h map[string]string, ml MetadataLevel) map[string]string {
|
||||||
|
if ml != EmptyPayload {
|
||||||
|
h[headerPrefer] = "return-content"
|
||||||
|
h[headerAccept] = string(ml)
|
||||||
|
} else {
|
||||||
|
h[headerPrefer] = "return-no-content"
|
||||||
|
// From API version 2015-12-11 onwards, Accept header is required
|
||||||
|
h[headerAccept] = string(NoMetadata)
|
||||||
|
}
|
||||||
|
return h
|
||||||
|
}
|
||||||
5
vendor/github.com/Azure/azure-sdk-for-go/storage/version.go
generated
vendored
Normal file
5
vendor/github.com/Azure/azure-sdk-for-go/storage/version.go
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
var (
|
||||||
|
sdkVersion = "10.0.2"
|
||||||
|
)
|
||||||
43
vendor/github.com/Azure/go-ansiterm/BUILD
generated
vendored
Normal file
43
vendor/github.com/Azure/go-ansiterm/BUILD
generated
vendored
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"constants.go",
|
||||||
|
"context.go",
|
||||||
|
"csi_entry_state.go",
|
||||||
|
"csi_param_state.go",
|
||||||
|
"escape_intermediate_state.go",
|
||||||
|
"escape_state.go",
|
||||||
|
"event_handler.go",
|
||||||
|
"ground_state.go",
|
||||||
|
"osc_string_state.go",
|
||||||
|
"parser.go",
|
||||||
|
"parser_action_helpers.go",
|
||||||
|
"parser_actions.go",
|
||||||
|
"states.go",
|
||||||
|
"utilities.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/Sirupsen/logrus:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
45
vendor/github.com/Azure/go-autorest/autorest/BUILD
generated
vendored
Normal file
45
vendor/github.com/Azure/go-autorest/autorest/BUILD
generated
vendored
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"authorization.go",
|
||||||
|
"autorest.go",
|
||||||
|
"client.go",
|
||||||
|
"error.go",
|
||||||
|
"preparer.go",
|
||||||
|
"responder.go",
|
||||||
|
"sender.go",
|
||||||
|
"utility.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/adal:all-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/azure:all-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:all-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/to:all-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/validation:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
34
vendor/github.com/Azure/go-autorest/autorest/adal/BUILD
generated
vendored
Normal file
34
vendor/github.com/Azure/go-autorest/autorest/adal/BUILD
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"config.go",
|
||||||
|
"devicetoken.go",
|
||||||
|
"persist.go",
|
||||||
|
"sender.go",
|
||||||
|
"token.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/dgrijalva/jwt-go:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
253
vendor/github.com/Azure/go-autorest/autorest/adal/README.md
generated
vendored
Normal file
253
vendor/github.com/Azure/go-autorest/autorest/adal/README.md
generated
vendored
Normal file
@@ -0,0 +1,253 @@
|
|||||||
|
# Azure Active Directory library for Go
|
||||||
|
|
||||||
|
This project provides a stand alone Azure Active Directory library for Go. The code was extracted
|
||||||
|
from [go-autorest](https://github.com/Azure/go-autorest/) project, which is used as a base for
|
||||||
|
[azure-sdk-for-go](https://github.com/Azure/azure-sdk-for-go).
|
||||||
|
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
```
|
||||||
|
go get -u github.com/Azure/go-autorest/autorest/adal
|
||||||
|
```
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
An Active Directory application is required in order to use this library. An application can be registered in the [Azure Portal](https://portal.azure.com/) follow these [guidelines](https://docs.microsoft.com/en-us/azure/active-directory/develop/active-directory-integrating-applications) or using the [Azure CLI](https://github.com/Azure/azure-cli).
|
||||||
|
|
||||||
|
### Register an Azure AD Application with secret
|
||||||
|
|
||||||
|
|
||||||
|
1. Register a new application with a `secret` credential
|
||||||
|
|
||||||
|
```
|
||||||
|
az ad app create \
|
||||||
|
--display-name example-app \
|
||||||
|
--homepage https://example-app/home \
|
||||||
|
--identifier-uris https://example-app/app \
|
||||||
|
--password secret
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create a service principal using the `Application ID` from previous step
|
||||||
|
|
||||||
|
```
|
||||||
|
az ad sp create --id "Application ID"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Replace `Application ID` with `appId` from step 1.
|
||||||
|
|
||||||
|
### Register an Azure AD Application with certificate
|
||||||
|
|
||||||
|
1. Create a private key
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl genrsa -out "example-app.key" 2048
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Create the certificate
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl req -new -key "example-app.key" -subj "/CN=example-app" -out "example-app.csr"
|
||||||
|
openssl x509 -req -in "example-app.csr" -signkey "example-app.key" -out "example-app.crt" -days 10000
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Create the PKCS12 version of the certificate containing also the private key
|
||||||
|
|
||||||
|
```
|
||||||
|
openssl pkcs12 -export -out "example-app.pfx" -inkey "example-app.key" -in "example-app.crt" -passout pass:
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
4. Register a new application with the certificate content form `example-app.crt`
|
||||||
|
|
||||||
|
```
|
||||||
|
certificateContents="$(tail -n+2 "example-app.crt" | head -n-1)"
|
||||||
|
|
||||||
|
az ad app create \
|
||||||
|
--display-name example-app \
|
||||||
|
--homepage https://example-app/home \
|
||||||
|
--identifier-uris https://example-app/app \
|
||||||
|
--key-usage Verify --end-date 2018-01-01 \
|
||||||
|
--key-value "${certificateContents}"
|
||||||
|
```
|
||||||
|
|
||||||
|
5. Create a service principal using the `Application ID` from previous step
|
||||||
|
|
||||||
|
```
|
||||||
|
az ad sp create --id "APPLICATION_ID"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Replace `APPLICATION_ID` with `appId` from step 4.
|
||||||
|
|
||||||
|
|
||||||
|
### Grant the necessary permissions
|
||||||
|
|
||||||
|
Azure relies on a Role-Based Access Control (RBAC) model to manage the access to resources at a fine-grained
|
||||||
|
level. There is a set of [pre-defined roles](https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-built-in-roles)
|
||||||
|
which can be assigned to a service principal of an Azure AD application depending of your needs.
|
||||||
|
|
||||||
|
```
|
||||||
|
az role assignment create --assigner "SERVICE_PRINCIPAL_ID" --role "ROLE_NAME"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Replace the `SERVICE_PRINCIPAL_ID` with the `appId` from previous step.
|
||||||
|
* Replace the `ROLE_NAME` with a role name of your choice.
|
||||||
|
|
||||||
|
It is also possible to define custom role definitions.
|
||||||
|
|
||||||
|
```
|
||||||
|
az role definition create --role-definition role-definition.json
|
||||||
|
```
|
||||||
|
|
||||||
|
* Check [custom roles](https://docs.microsoft.com/en-us/azure/active-directory/role-based-access-control-custom-roles) for more details regarding the content of `role-definition.json` file.
|
||||||
|
|
||||||
|
|
||||||
|
### Acquire Access Token
|
||||||
|
|
||||||
|
The common configuration used by all flows:
|
||||||
|
|
||||||
|
```Go
|
||||||
|
const activeDirectoryEndpoint = "https://login.microsoftonline.com/"
|
||||||
|
tenantID := "TENANT_ID"
|
||||||
|
oauthConfig, err := adal.NewOAuthConfig(activeDirectoryEndpoint, tenantID)
|
||||||
|
|
||||||
|
applicationID := "APPLICATION_ID"
|
||||||
|
|
||||||
|
callback := func(token adal.Token) error {
|
||||||
|
// This is called after the token is acquired
|
||||||
|
}
|
||||||
|
|
||||||
|
// The resource for which the token is acquired
|
||||||
|
resource := "https://management.core.windows.net/"
|
||||||
|
```
|
||||||
|
|
||||||
|
* Replace the `TENANT_ID` with your tenant ID.
|
||||||
|
* Replace the `APPLICATION_ID` with the value from previous section.
|
||||||
|
|
||||||
|
#### Client Credentials
|
||||||
|
|
||||||
|
```Go
|
||||||
|
applicationSecret := "APPLICATION_SECRET"
|
||||||
|
|
||||||
|
spt, err := adal.NewServicePrincipalToken(
|
||||||
|
oauthConfig,
|
||||||
|
appliationID,
|
||||||
|
applicationSecret,
|
||||||
|
resource,
|
||||||
|
callbacks...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acquire a new access token
|
||||||
|
err = spt.Refresh()
|
||||||
|
if (err == nil) {
|
||||||
|
token := spt.Token
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Replace the `APPLICATION_SECRET` with the `password` value from previous section.
|
||||||
|
|
||||||
|
#### Client Certificate
|
||||||
|
|
||||||
|
```Go
|
||||||
|
certificatePath := "./example-app.pfx"
|
||||||
|
|
||||||
|
certData, err := ioutil.ReadFile(certificatePath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to read the certificate file (%s): %v", certificatePath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get the certificate and private key from pfx file
|
||||||
|
certificate, rsaPrivateKey, err := decodePkcs12(certData, "")
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to decode pkcs12 certificate while creating spt: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
spt, err := adal.NewServicePrincipalTokenFromCertificate(
|
||||||
|
oauthConfig,
|
||||||
|
applicationID,
|
||||||
|
certificate,
|
||||||
|
rsaPrivateKey,
|
||||||
|
resource,
|
||||||
|
callbacks...)
|
||||||
|
|
||||||
|
// Acquire a new access token
|
||||||
|
err = spt.Refresh()
|
||||||
|
if (err == nil) {
|
||||||
|
token := spt.Token
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
* Update the certificate path to point to the example-app.pfx file which was created in previous section.
|
||||||
|
|
||||||
|
|
||||||
|
#### Device Code
|
||||||
|
|
||||||
|
```Go
|
||||||
|
oauthClient := &http.Client{}
|
||||||
|
|
||||||
|
// Acquire the device code
|
||||||
|
deviceCode, err := adal.InitiateDeviceAuth(
|
||||||
|
oauthClient,
|
||||||
|
oauthConfig,
|
||||||
|
applicationID,
|
||||||
|
resource)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Failed to start device auth flow: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Display the authentication message
|
||||||
|
fmt.Println(*deviceCode.Message)
|
||||||
|
|
||||||
|
// Wait here until the user is authenticated
|
||||||
|
token, err := adal.WaitForUserCompletion(oauthClient, deviceCode)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("Failed to finish device auth flow: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
spt, err := adal.NewServicePrincipalTokenFromManualToken(
|
||||||
|
oauthConfig,
|
||||||
|
applicationID,
|
||||||
|
resource,
|
||||||
|
*token,
|
||||||
|
callbacks...)
|
||||||
|
|
||||||
|
if (err == nil) {
|
||||||
|
token := spt.Token
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Command Line Tool
|
||||||
|
|
||||||
|
A command line tool is available in `cmd/adal.go` that can acquire a token for a given resource. It supports all flows mentioned above.
|
||||||
|
|
||||||
|
```
|
||||||
|
adal -h
|
||||||
|
|
||||||
|
Usage of ./adal:
|
||||||
|
-applicationId string
|
||||||
|
application id
|
||||||
|
-certificatePath string
|
||||||
|
path to pk12/PFC application certificate
|
||||||
|
-mode string
|
||||||
|
authentication mode (device, secret, cert, refresh) (default "device")
|
||||||
|
-resource string
|
||||||
|
resource for which the token is requested
|
||||||
|
-secret string
|
||||||
|
application secret
|
||||||
|
-tenantId string
|
||||||
|
tenant id
|
||||||
|
-tokenCachePath string
|
||||||
|
location of oath token cache (default "/home/cgc/.adal/accessToken.json")
|
||||||
|
```
|
||||||
|
|
||||||
|
Example acquire a token for `https://management.core.windows.net/` using device code flow:
|
||||||
|
|
||||||
|
```
|
||||||
|
adal -mode device \
|
||||||
|
-applicationId "APPLICATION_ID" \
|
||||||
|
-tenantId "TENANT_ID" \
|
||||||
|
-resource https://management.core.windows.net/
|
||||||
|
|
||||||
|
```
|
||||||
51
vendor/github.com/Azure/go-autorest/autorest/adal/config.go
generated
vendored
Normal file
51
vendor/github.com/Azure/go-autorest/autorest/adal/config.go
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
package adal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/url"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
activeDirectoryAPIVersion = "1.0"
|
||||||
|
)
|
||||||
|
|
||||||
|
// OAuthConfig represents the endpoints needed
|
||||||
|
// in OAuth operations
|
||||||
|
type OAuthConfig struct {
|
||||||
|
AuthorityEndpoint url.URL
|
||||||
|
AuthorizeEndpoint url.URL
|
||||||
|
TokenEndpoint url.URL
|
||||||
|
DeviceCodeEndpoint url.URL
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewOAuthConfig returns an OAuthConfig with tenant specific urls
|
||||||
|
func NewOAuthConfig(activeDirectoryEndpoint, tenantID string) (*OAuthConfig, error) {
|
||||||
|
const activeDirectoryEndpointTemplate = "%s/oauth2/%s?api-version=%s"
|
||||||
|
u, err := url.Parse(activeDirectoryEndpoint)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
authorityURL, err := u.Parse(tenantID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
authorizeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "authorize", activeDirectoryAPIVersion))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
tokenURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "token", activeDirectoryAPIVersion))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
deviceCodeURL, err := u.Parse(fmt.Sprintf(activeDirectoryEndpointTemplate, tenantID, "devicecode", activeDirectoryAPIVersion))
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &OAuthConfig{
|
||||||
|
AuthorityEndpoint: *authorityURL,
|
||||||
|
AuthorizeEndpoint: *authorizeURL,
|
||||||
|
TokenEndpoint: *tokenURL,
|
||||||
|
DeviceCodeEndpoint: *deviceCodeURL,
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
228
vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go
generated
vendored
Normal file
228
vendor/github.com/Azure/go-autorest/autorest/adal/devicetoken.go
generated
vendored
Normal file
@@ -0,0 +1,228 @@
|
|||||||
|
package adal
|
||||||
|
|
||||||
|
/*
|
||||||
|
This file is largely based on rjw57/oauth2device's code, with the follow differences:
|
||||||
|
* scope -> resource, and only allow a single one
|
||||||
|
* receive "Message" in the DeviceCode struct and show it to users as the prompt
|
||||||
|
* azure-xplat-cli has the following behavior that this emulates:
|
||||||
|
- does not send client_secret during the token exchange
|
||||||
|
- sends resource again in the token exchange request
|
||||||
|
*/
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
logPrefix = "autorest/adal/devicetoken:"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
// ErrDeviceGeneric represents an unknown error from the token endpoint when using device flow
|
||||||
|
ErrDeviceGeneric = fmt.Errorf("%s Error while retrieving OAuth token: Unknown Error", logPrefix)
|
||||||
|
|
||||||
|
// ErrDeviceAccessDenied represents an access denied error from the token endpoint when using device flow
|
||||||
|
ErrDeviceAccessDenied = fmt.Errorf("%s Error while retrieving OAuth token: Access Denied", logPrefix)
|
||||||
|
|
||||||
|
// ErrDeviceAuthorizationPending represents the server waiting on the user to complete the device flow
|
||||||
|
ErrDeviceAuthorizationPending = fmt.Errorf("%s Error while retrieving OAuth token: Authorization Pending", logPrefix)
|
||||||
|
|
||||||
|
// ErrDeviceCodeExpired represents the server timing out and expiring the code during device flow
|
||||||
|
ErrDeviceCodeExpired = fmt.Errorf("%s Error while retrieving OAuth token: Code Expired", logPrefix)
|
||||||
|
|
||||||
|
// ErrDeviceSlowDown represents the service telling us we're polling too often during device flow
|
||||||
|
ErrDeviceSlowDown = fmt.Errorf("%s Error while retrieving OAuth token: Slow Down", logPrefix)
|
||||||
|
|
||||||
|
// ErrDeviceCodeEmpty represents an empty device code from the device endpoint while using device flow
|
||||||
|
ErrDeviceCodeEmpty = fmt.Errorf("%s Error while retrieving device code: Device Code Empty", logPrefix)
|
||||||
|
|
||||||
|
// ErrOAuthTokenEmpty represents an empty OAuth token from the token endpoint when using device flow
|
||||||
|
ErrOAuthTokenEmpty = fmt.Errorf("%s Error while retrieving OAuth token: Token Empty", logPrefix)
|
||||||
|
|
||||||
|
errCodeSendingFails = "Error occurred while sending request for Device Authorization Code"
|
||||||
|
errCodeHandlingFails = "Error occurred while handling response from the Device Endpoint"
|
||||||
|
errTokenSendingFails = "Error occurred while sending request with device code for a token"
|
||||||
|
errTokenHandlingFails = "Error occurred while handling response from the Token Endpoint (during device flow)"
|
||||||
|
errStatusNotOK = "Error HTTP status != 200"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DeviceCode is the object returned by the device auth endpoint
|
||||||
|
// It contains information to instruct the user to complete the auth flow
|
||||||
|
type DeviceCode struct {
|
||||||
|
DeviceCode *string `json:"device_code,omitempty"`
|
||||||
|
UserCode *string `json:"user_code,omitempty"`
|
||||||
|
VerificationURL *string `json:"verification_url,omitempty"`
|
||||||
|
ExpiresIn *int64 `json:"expires_in,string,omitempty"`
|
||||||
|
Interval *int64 `json:"interval,string,omitempty"`
|
||||||
|
|
||||||
|
Message *string `json:"message"` // Azure specific
|
||||||
|
Resource string // store the following, stored when initiating, used when exchanging
|
||||||
|
OAuthConfig OAuthConfig
|
||||||
|
ClientID string
|
||||||
|
}
|
||||||
|
|
||||||
|
// TokenError is the object returned by the token exchange endpoint
|
||||||
|
// when something is amiss
|
||||||
|
type TokenError struct {
|
||||||
|
Error *string `json:"error,omitempty"`
|
||||||
|
ErrorCodes []int `json:"error_codes,omitempty"`
|
||||||
|
ErrorDescription *string `json:"error_description,omitempty"`
|
||||||
|
Timestamp *string `json:"timestamp,omitempty"`
|
||||||
|
TraceID *string `json:"trace_id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeviceToken is the object return by the token exchange endpoint
|
||||||
|
// It can either look like a Token or an ErrorToken, so put both here
|
||||||
|
// and check for presence of "Error" to know if we are in error state
|
||||||
|
type deviceToken struct {
|
||||||
|
Token
|
||||||
|
TokenError
|
||||||
|
}
|
||||||
|
|
||||||
|
// InitiateDeviceAuth initiates a device auth flow. It returns a DeviceCode
|
||||||
|
// that can be used with CheckForUserCompletion or WaitForUserCompletion.
|
||||||
|
func InitiateDeviceAuth(sender Sender, oauthConfig OAuthConfig, clientID, resource string) (*DeviceCode, error) {
|
||||||
|
v := url.Values{
|
||||||
|
"client_id": []string{clientID},
|
||||||
|
"resource": []string{resource},
|
||||||
|
}
|
||||||
|
|
||||||
|
s := v.Encode()
|
||||||
|
body := ioutil.NopCloser(strings.NewReader(s))
|
||||||
|
|
||||||
|
req, err := http.NewRequest(http.MethodPost, oauthConfig.DeviceCodeEndpoint.String(), body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeSendingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req.ContentLength = int64(len(s))
|
||||||
|
req.Header.Set(contentType, mimeTypeFormPost)
|
||||||
|
resp, err := sender.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeSendingFails, err.Error())
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
rb, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeHandlingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeHandlingFails, errStatusNotOK)
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(strings.Trim(string(rb), " ")) == 0 {
|
||||||
|
return nil, ErrDeviceCodeEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
var code DeviceCode
|
||||||
|
err = json.Unmarshal(rb, &code)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errCodeHandlingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
code.ClientID = clientID
|
||||||
|
code.Resource = resource
|
||||||
|
code.OAuthConfig = oauthConfig
|
||||||
|
|
||||||
|
return &code, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// CheckForUserCompletion takes a DeviceCode and checks with the Azure AD OAuth endpoint
|
||||||
|
// to see if the device flow has: been completed, timed out, or otherwise failed
|
||||||
|
func CheckForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) {
|
||||||
|
v := url.Values{
|
||||||
|
"client_id": []string{code.ClientID},
|
||||||
|
"code": []string{*code.DeviceCode},
|
||||||
|
"grant_type": []string{OAuthGrantTypeDeviceCode},
|
||||||
|
"resource": []string{code.Resource},
|
||||||
|
}
|
||||||
|
|
||||||
|
s := v.Encode()
|
||||||
|
body := ioutil.NopCloser(strings.NewReader(s))
|
||||||
|
|
||||||
|
req, err := http.NewRequest(http.MethodPost, code.OAuthConfig.TokenEndpoint.String(), body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenSendingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req.ContentLength = int64(len(s))
|
||||||
|
req.Header.Set(contentType, mimeTypeFormPost)
|
||||||
|
resp, err := sender.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenSendingFails, err.Error())
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
|
||||||
|
rb, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenHandlingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if resp.StatusCode != http.StatusOK && len(strings.Trim(string(rb), " ")) == 0 {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenHandlingFails, errStatusNotOK)
|
||||||
|
}
|
||||||
|
if len(strings.Trim(string(rb), " ")) == 0 {
|
||||||
|
return nil, ErrOAuthTokenEmpty
|
||||||
|
}
|
||||||
|
|
||||||
|
var token deviceToken
|
||||||
|
err = json.Unmarshal(rb, &token)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("%s %s: %s", logPrefix, errTokenHandlingFails, err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
if token.Error == nil {
|
||||||
|
return &token.Token, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch *token.Error {
|
||||||
|
case "authorization_pending":
|
||||||
|
return nil, ErrDeviceAuthorizationPending
|
||||||
|
case "slow_down":
|
||||||
|
return nil, ErrDeviceSlowDown
|
||||||
|
case "access_denied":
|
||||||
|
return nil, ErrDeviceAccessDenied
|
||||||
|
case "code_expired":
|
||||||
|
return nil, ErrDeviceCodeExpired
|
||||||
|
default:
|
||||||
|
return nil, ErrDeviceGeneric
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// WaitForUserCompletion calls CheckForUserCompletion repeatedly until a token is granted or an error state occurs.
|
||||||
|
// This prevents the user from looping and checking against 'ErrDeviceAuthorizationPending'.
|
||||||
|
func WaitForUserCompletion(sender Sender, code *DeviceCode) (*Token, error) {
|
||||||
|
intervalDuration := time.Duration(*code.Interval) * time.Second
|
||||||
|
waitDuration := intervalDuration
|
||||||
|
|
||||||
|
for {
|
||||||
|
token, err := CheckForUserCompletion(sender, code)
|
||||||
|
|
||||||
|
if err == nil {
|
||||||
|
return token, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
switch err {
|
||||||
|
case ErrDeviceSlowDown:
|
||||||
|
waitDuration += waitDuration
|
||||||
|
case ErrDeviceAuthorizationPending:
|
||||||
|
// noop
|
||||||
|
default: // everything else is "fatal" to us
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if waitDuration > (intervalDuration * 3) {
|
||||||
|
return nil, fmt.Errorf("%s Error waiting for user to complete device flow. Server told us to slow_down too much", logPrefix)
|
||||||
|
}
|
||||||
|
|
||||||
|
time.Sleep(waitDuration)
|
||||||
|
}
|
||||||
|
}
|
||||||
59
vendor/github.com/Azure/go-autorest/autorest/adal/persist.go
generated
vendored
Normal file
59
vendor/github.com/Azure/go-autorest/autorest/adal/persist.go
generated
vendored
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
package adal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LoadToken restores a Token object from a file located at 'path'.
|
||||||
|
func LoadToken(path string) (*Token, error) {
|
||||||
|
file, err := os.Open(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to open file (%s) while loading token: %v", path, err)
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
var token Token
|
||||||
|
|
||||||
|
dec := json.NewDecoder(file)
|
||||||
|
if err = dec.Decode(&token); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to decode contents of file (%s) into Token representation: %v", path, err)
|
||||||
|
}
|
||||||
|
return &token, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SaveToken persists an oauth token at the given location on disk.
|
||||||
|
// It moves the new file into place so it can safely be used to replace an existing file
|
||||||
|
// that maybe accessed by multiple processes.
|
||||||
|
func SaveToken(path string, mode os.FileMode, token Token) error {
|
||||||
|
dir := filepath.Dir(path)
|
||||||
|
err := os.MkdirAll(dir, os.ModePerm)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create directory (%s) to store token in: %v", dir, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newFile, err := ioutil.TempFile(dir, "token")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create the temp file to write the token: %v", err)
|
||||||
|
}
|
||||||
|
tempPath := newFile.Name()
|
||||||
|
|
||||||
|
if err := json.NewEncoder(newFile).Encode(token); err != nil {
|
||||||
|
return fmt.Errorf("failed to encode token to file (%s) while saving token: %v", tempPath, err)
|
||||||
|
}
|
||||||
|
if err := newFile.Close(); err != nil {
|
||||||
|
return fmt.Errorf("failed to close temp file %s: %v", tempPath, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Atomic replace to avoid multi-writer file corruptions
|
||||||
|
if err := os.Rename(tempPath, path); err != nil {
|
||||||
|
return fmt.Errorf("failed to move temporary token to desired output location. src=%s dst=%s: %v", tempPath, path, err)
|
||||||
|
}
|
||||||
|
if err := os.Chmod(path, mode); err != nil {
|
||||||
|
return fmt.Errorf("failed to chmod the token file %s: %v", path, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
46
vendor/github.com/Azure/go-autorest/autorest/adal/sender.go
generated
vendored
Normal file
46
vendor/github.com/Azure/go-autorest/autorest/adal/sender.go
generated
vendored
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package adal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
contentType = "Content-Type"
|
||||||
|
mimeTypeFormPost = "application/x-www-form-urlencoded"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Sender is the interface that wraps the Do method to send HTTP requests.
|
||||||
|
//
|
||||||
|
// The standard http.Client conforms to this interface.
|
||||||
|
type Sender interface {
|
||||||
|
Do(*http.Request) (*http.Response, error)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SenderFunc is a method that implements the Sender interface.
|
||||||
|
type SenderFunc func(*http.Request) (*http.Response, error)
|
||||||
|
|
||||||
|
// Do implements the Sender interface on SenderFunc.
|
||||||
|
func (sf SenderFunc) Do(r *http.Request) (*http.Response, error) {
|
||||||
|
return sf(r)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SendDecorator takes and possibily decorates, by wrapping, a Sender. Decorators may affect the
|
||||||
|
// http.Request and pass it along or, first, pass the http.Request along then react to the
|
||||||
|
// http.Response result.
|
||||||
|
type SendDecorator func(Sender) Sender
|
||||||
|
|
||||||
|
// CreateSender creates, decorates, and returns, as a Sender, the default http.Client.
|
||||||
|
func CreateSender(decorators ...SendDecorator) Sender {
|
||||||
|
return DecorateSender(&http.Client{}, decorators...)
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecorateSender accepts a Sender and a, possibly empty, set of SendDecorators, which is applies to
|
||||||
|
// the Sender. Decorators are applied in the order received, but their affect upon the request
|
||||||
|
// depends on whether they are a pre-decorator (change the http.Request and then pass it along) or a
|
||||||
|
// post-decorator (pass the http.Request along and react to the results in http.Response).
|
||||||
|
func DecorateSender(s Sender, decorators ...SendDecorator) Sender {
|
||||||
|
for _, decorate := range decorators {
|
||||||
|
s = decorate(s)
|
||||||
|
}
|
||||||
|
return s
|
||||||
|
}
|
||||||
408
vendor/github.com/Azure/go-autorest/autorest/adal/token.go
generated
vendored
Normal file
408
vendor/github.com/Azure/go-autorest/autorest/adal/token.go
generated
vendored
Normal file
@@ -0,0 +1,408 @@
|
|||||||
|
package adal
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/rand"
|
||||||
|
"crypto/rsa"
|
||||||
|
"crypto/sha1"
|
||||||
|
"crypto/x509"
|
||||||
|
"encoding/base64"
|
||||||
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/dgrijalva/jwt-go"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
defaultRefresh = 5 * time.Minute
|
||||||
|
tokenBaseDate = "1970-01-01T00:00:00Z"
|
||||||
|
|
||||||
|
// OAuthGrantTypeDeviceCode is the "grant_type" identifier used in device flow
|
||||||
|
OAuthGrantTypeDeviceCode = "device_code"
|
||||||
|
|
||||||
|
// OAuthGrantTypeClientCredentials is the "grant_type" identifier used in credential flows
|
||||||
|
OAuthGrantTypeClientCredentials = "client_credentials"
|
||||||
|
|
||||||
|
// OAuthGrantTypeRefreshToken is the "grant_type" identifier used in refresh token flows
|
||||||
|
OAuthGrantTypeRefreshToken = "refresh_token"
|
||||||
|
|
||||||
|
// managedIdentitySettingsPath is the path to the MSI Extension settings file (to discover the endpoint)
|
||||||
|
managedIdentitySettingsPath = "/var/lib/waagent/ManagedIdentity-Settings"
|
||||||
|
)
|
||||||
|
|
||||||
|
var expirationBase time.Time
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
expirationBase, _ = time.Parse(time.RFC3339, tokenBaseDate)
|
||||||
|
}
|
||||||
|
|
||||||
|
// OAuthTokenProvider is an interface which should be implemented by an access token retriever
|
||||||
|
type OAuthTokenProvider interface {
|
||||||
|
OAuthToken() string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresher is an interface for token refresh functionality
|
||||||
|
type Refresher interface {
|
||||||
|
Refresh() error
|
||||||
|
RefreshExchange(resource string) error
|
||||||
|
EnsureFresh() error
|
||||||
|
}
|
||||||
|
|
||||||
|
// TokenRefreshCallback is the type representing callbacks that will be called after
|
||||||
|
// a successful token refresh
|
||||||
|
type TokenRefreshCallback func(Token) error
|
||||||
|
|
||||||
|
// Token encapsulates the access token used to authorize Azure requests.
|
||||||
|
type Token struct {
|
||||||
|
AccessToken string `json:"access_token"`
|
||||||
|
RefreshToken string `json:"refresh_token"`
|
||||||
|
|
||||||
|
ExpiresIn string `json:"expires_in"`
|
||||||
|
ExpiresOn string `json:"expires_on"`
|
||||||
|
NotBefore string `json:"not_before"`
|
||||||
|
|
||||||
|
Resource string `json:"resource"`
|
||||||
|
Type string `json:"token_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Expires returns the time.Time when the Token expires.
|
||||||
|
func (t Token) Expires() time.Time {
|
||||||
|
s, err := strconv.Atoi(t.ExpiresOn)
|
||||||
|
if err != nil {
|
||||||
|
s = -3600
|
||||||
|
}
|
||||||
|
return expirationBase.Add(time.Duration(s) * time.Second).UTC()
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsExpired returns true if the Token is expired, false otherwise.
|
||||||
|
func (t Token) IsExpired() bool {
|
||||||
|
return t.WillExpireIn(0)
|
||||||
|
}
|
||||||
|
|
||||||
|
// WillExpireIn returns true if the Token will expire after the passed time.Duration interval
|
||||||
|
// from now, false otherwise.
|
||||||
|
func (t Token) WillExpireIn(d time.Duration) bool {
|
||||||
|
return !t.Expires().After(time.Now().Add(d))
|
||||||
|
}
|
||||||
|
|
||||||
|
//OAuthToken return the current access token
|
||||||
|
func (t *Token) OAuthToken() string {
|
||||||
|
return t.AccessToken
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalNoSecret represents a secret type that contains no secret
|
||||||
|
// meaning it is not valid for fetching a fresh token. This is used by Manual
|
||||||
|
type ServicePrincipalNoSecret struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuthenticationValues is a method of the interface ServicePrincipalSecret
|
||||||
|
// It only returns an error for the ServicePrincipalNoSecret type
|
||||||
|
func (noSecret *ServicePrincipalNoSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error {
|
||||||
|
return fmt.Errorf("Manually created ServicePrincipalToken does not contain secret material to retrieve a new access token")
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalSecret is an interface that allows various secret mechanism to fill the form
|
||||||
|
// that is submitted when acquiring an oAuth token.
|
||||||
|
type ServicePrincipalSecret interface {
|
||||||
|
SetAuthenticationValues(spt *ServicePrincipalToken, values *url.Values) error
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalTokenSecret implements ServicePrincipalSecret for client_secret type authorization.
|
||||||
|
type ServicePrincipalTokenSecret struct {
|
||||||
|
ClientSecret string
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuthenticationValues is a method of the interface ServicePrincipalSecret.
|
||||||
|
// It will populate the form submitted during oAuth Token Acquisition using the client_secret.
|
||||||
|
func (tokenSecret *ServicePrincipalTokenSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error {
|
||||||
|
v.Set("client_secret", tokenSecret.ClientSecret)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalCertificateSecret implements ServicePrincipalSecret for generic RSA cert auth with signed JWTs.
|
||||||
|
type ServicePrincipalCertificateSecret struct {
|
||||||
|
Certificate *x509.Certificate
|
||||||
|
PrivateKey *rsa.PrivateKey
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalMSISecret implements ServicePrincipalSecret for machines running the MSI Extension.
|
||||||
|
type ServicePrincipalMSISecret struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuthenticationValues is a method of the interface ServicePrincipalSecret.
|
||||||
|
// MSI extension requires the authority field to be set to the real tenant authority endpoint
|
||||||
|
func (msiSecret *ServicePrincipalMSISecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error {
|
||||||
|
v.Set("authority", spt.oauthConfig.AuthorityEndpoint.String())
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SignJwt returns the JWT signed with the certificate's private key.
|
||||||
|
func (secret *ServicePrincipalCertificateSecret) SignJwt(spt *ServicePrincipalToken) (string, error) {
|
||||||
|
hasher := sha1.New()
|
||||||
|
_, err := hasher.Write(secret.Certificate.Raw)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
thumbprint := base64.URLEncoding.EncodeToString(hasher.Sum(nil))
|
||||||
|
|
||||||
|
// The jti (JWT ID) claim provides a unique identifier for the JWT.
|
||||||
|
jti := make([]byte, 20)
|
||||||
|
_, err = rand.Read(jti)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
token := jwt.New(jwt.SigningMethodRS256)
|
||||||
|
token.Header["x5t"] = thumbprint
|
||||||
|
token.Claims = jwt.MapClaims{
|
||||||
|
"aud": spt.oauthConfig.TokenEndpoint.String(),
|
||||||
|
"iss": spt.clientID,
|
||||||
|
"sub": spt.clientID,
|
||||||
|
"jti": base64.URLEncoding.EncodeToString(jti),
|
||||||
|
"nbf": time.Now().Unix(),
|
||||||
|
"exp": time.Now().Add(time.Hour * 24).Unix(),
|
||||||
|
}
|
||||||
|
|
||||||
|
signedString, err := token.SignedString(secret.PrivateKey)
|
||||||
|
return signedString, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAuthenticationValues is a method of the interface ServicePrincipalSecret.
|
||||||
|
// It will populate the form submitted during oAuth Token Acquisition using a JWT signed with a certificate.
|
||||||
|
func (secret *ServicePrincipalCertificateSecret) SetAuthenticationValues(spt *ServicePrincipalToken, v *url.Values) error {
|
||||||
|
jwt, err := secret.SignJwt(spt)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
v.Set("client_assertion", jwt)
|
||||||
|
v.Set("client_assertion_type", "urn:ietf:params:oauth:client-assertion-type:jwt-bearer")
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ServicePrincipalToken encapsulates a Token created for a Service Principal.
|
||||||
|
type ServicePrincipalToken struct {
|
||||||
|
Token
|
||||||
|
|
||||||
|
secret ServicePrincipalSecret
|
||||||
|
oauthConfig OAuthConfig
|
||||||
|
clientID string
|
||||||
|
resource string
|
||||||
|
autoRefresh bool
|
||||||
|
refreshWithin time.Duration
|
||||||
|
sender Sender
|
||||||
|
|
||||||
|
refreshCallbacks []TokenRefreshCallback
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewServicePrincipalTokenWithSecret create a ServicePrincipalToken using the supplied ServicePrincipalSecret implementation.
|
||||||
|
func NewServicePrincipalTokenWithSecret(oauthConfig OAuthConfig, id string, resource string, secret ServicePrincipalSecret, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
spt := &ServicePrincipalToken{
|
||||||
|
oauthConfig: oauthConfig,
|
||||||
|
secret: secret,
|
||||||
|
clientID: id,
|
||||||
|
resource: resource,
|
||||||
|
autoRefresh: true,
|
||||||
|
refreshWithin: defaultRefresh,
|
||||||
|
sender: &http.Client{},
|
||||||
|
refreshCallbacks: callbacks,
|
||||||
|
}
|
||||||
|
return spt, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewServicePrincipalTokenFromManualToken creates a ServicePrincipalToken using the supplied token
|
||||||
|
func NewServicePrincipalTokenFromManualToken(oauthConfig OAuthConfig, clientID string, resource string, token Token, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
spt, err := NewServicePrincipalTokenWithSecret(
|
||||||
|
oauthConfig,
|
||||||
|
clientID,
|
||||||
|
resource,
|
||||||
|
&ServicePrincipalNoSecret{},
|
||||||
|
callbacks...)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
spt.Token = token
|
||||||
|
|
||||||
|
return spt, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewServicePrincipalToken creates a ServicePrincipalToken from the supplied Service Principal
|
||||||
|
// credentials scoped to the named resource.
|
||||||
|
func NewServicePrincipalToken(oauthConfig OAuthConfig, clientID string, secret string, resource string, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
return NewServicePrincipalTokenWithSecret(
|
||||||
|
oauthConfig,
|
||||||
|
clientID,
|
||||||
|
resource,
|
||||||
|
&ServicePrincipalTokenSecret{
|
||||||
|
ClientSecret: secret,
|
||||||
|
},
|
||||||
|
callbacks...,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewServicePrincipalTokenFromCertificate create a ServicePrincipalToken from the supplied pkcs12 bytes.
|
||||||
|
func NewServicePrincipalTokenFromCertificate(oauthConfig OAuthConfig, clientID string, certificate *x509.Certificate, privateKey *rsa.PrivateKey, resource string, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
return NewServicePrincipalTokenWithSecret(
|
||||||
|
oauthConfig,
|
||||||
|
clientID,
|
||||||
|
resource,
|
||||||
|
&ServicePrincipalCertificateSecret{
|
||||||
|
PrivateKey: privateKey,
|
||||||
|
Certificate: certificate,
|
||||||
|
},
|
||||||
|
callbacks...,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewServicePrincipalTokenFromMSI creates a ServicePrincipalToken via the MSI VM Extension.
|
||||||
|
func NewServicePrincipalTokenFromMSI(oauthConfig OAuthConfig, resource string, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
return newServicePrincipalTokenFromMSI(oauthConfig, resource, managedIdentitySettingsPath, callbacks...)
|
||||||
|
}
|
||||||
|
|
||||||
|
func newServicePrincipalTokenFromMSI(oauthConfig OAuthConfig, resource, settingsPath string, callbacks ...TokenRefreshCallback) (*ServicePrincipalToken, error) {
|
||||||
|
// Read MSI settings
|
||||||
|
bytes, err := ioutil.ReadFile(settingsPath)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
msiSettings := struct {
|
||||||
|
URL string `json:"url"`
|
||||||
|
}{}
|
||||||
|
err = json.Unmarshal(bytes, &msiSettings)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// We set the oauth config token endpoint to be MSI's endpoint
|
||||||
|
// We leave the authority as-is so MSI can POST it with the token request
|
||||||
|
msiEndpointURL, err := url.Parse(msiSettings.URL)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
msiTokenEndpointURL, err := msiEndpointURL.Parse("/oauth2/token")
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
oauthConfig.TokenEndpoint = *msiTokenEndpointURL
|
||||||
|
|
||||||
|
spt := &ServicePrincipalToken{
|
||||||
|
oauthConfig: oauthConfig,
|
||||||
|
secret: &ServicePrincipalMSISecret{},
|
||||||
|
resource: resource,
|
||||||
|
autoRefresh: true,
|
||||||
|
refreshWithin: defaultRefresh,
|
||||||
|
sender: &http.Client{},
|
||||||
|
refreshCallbacks: callbacks,
|
||||||
|
}
|
||||||
|
|
||||||
|
return spt, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EnsureFresh will refresh the token if it will expire within the refresh window (as set by
|
||||||
|
// RefreshWithin) and autoRefresh flag is on.
|
||||||
|
func (spt *ServicePrincipalToken) EnsureFresh() error {
|
||||||
|
if spt.autoRefresh && spt.WillExpireIn(spt.refreshWithin) {
|
||||||
|
return spt.Refresh()
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// InvokeRefreshCallbacks calls any TokenRefreshCallbacks that were added to the SPT during initialization
|
||||||
|
func (spt *ServicePrincipalToken) InvokeRefreshCallbacks(token Token) error {
|
||||||
|
if spt.refreshCallbacks != nil {
|
||||||
|
for _, callback := range spt.refreshCallbacks {
|
||||||
|
err := callback(spt.Token)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("adal: TokenRefreshCallback handler failed. Error = '%v'", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Refresh obtains a fresh token for the Service Principal.
|
||||||
|
func (spt *ServicePrincipalToken) Refresh() error {
|
||||||
|
return spt.refreshInternal(spt.resource)
|
||||||
|
}
|
||||||
|
|
||||||
|
// RefreshExchange refreshes the token, but for a different resource.
|
||||||
|
func (spt *ServicePrincipalToken) RefreshExchange(resource string) error {
|
||||||
|
return spt.refreshInternal(resource)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (spt *ServicePrincipalToken) refreshInternal(resource string) error {
|
||||||
|
v := url.Values{}
|
||||||
|
v.Set("client_id", spt.clientID)
|
||||||
|
v.Set("resource", resource)
|
||||||
|
|
||||||
|
if spt.RefreshToken != "" {
|
||||||
|
v.Set("grant_type", OAuthGrantTypeRefreshToken)
|
||||||
|
v.Set("refresh_token", spt.RefreshToken)
|
||||||
|
} else {
|
||||||
|
v.Set("grant_type", OAuthGrantTypeClientCredentials)
|
||||||
|
err := spt.secret.SetAuthenticationValues(spt, &v)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
s := v.Encode()
|
||||||
|
body := ioutil.NopCloser(strings.NewReader(s))
|
||||||
|
req, err := http.NewRequest(http.MethodPost, spt.oauthConfig.TokenEndpoint.String(), body)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("adal: Failed to build the refresh request. Error = '%v'", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
req.ContentLength = int64(len(s))
|
||||||
|
req.Header.Set(contentType, mimeTypeFormPost)
|
||||||
|
resp, err := spt.sender.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("adal: Failed to execute the refresh request. Error = '%v'", err)
|
||||||
|
}
|
||||||
|
defer resp.Body.Close()
|
||||||
|
if resp.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("adal: Refresh request failed. Status Code = '%d'", resp.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
rb, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("adal: Failed to read a new service principal token during refresh. Error = '%v'", err)
|
||||||
|
}
|
||||||
|
if len(strings.Trim(string(rb), " ")) == 0 {
|
||||||
|
return fmt.Errorf("adal: Empty service principal token received during refresh")
|
||||||
|
}
|
||||||
|
var token Token
|
||||||
|
err = json.Unmarshal(rb, &token)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("adal: Failed to unmarshal the service principal token during refresh. Error = '%v' JSON = '%s'", err, string(rb))
|
||||||
|
}
|
||||||
|
|
||||||
|
spt.Token = token
|
||||||
|
|
||||||
|
return spt.InvokeRefreshCallbacks(token)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetAutoRefresh enables or disables automatic refreshing of stale tokens.
|
||||||
|
func (spt *ServicePrincipalToken) SetAutoRefresh(autoRefresh bool) {
|
||||||
|
spt.autoRefresh = autoRefresh
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetRefreshWithin sets the interval within which if the token will expire, EnsureFresh will
|
||||||
|
// refresh the token.
|
||||||
|
func (spt *ServicePrincipalToken) SetRefreshWithin(d time.Duration) {
|
||||||
|
spt.refreshWithin = d
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetSender sets the http.Client used when obtaining the Service Principal token. An
|
||||||
|
// undecorated http.Client is used by default.
|
||||||
|
func (spt *ServicePrincipalToken) SetSender(s Sender) { spt.sender = s }
|
||||||
57
vendor/github.com/Azure/go-autorest/autorest/authorization.go
generated
vendored
Normal file
57
vendor/github.com/Azure/go-autorest/autorest/authorization.go
generated
vendored
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
package autorest
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/Azure/go-autorest/autorest/adal"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Authorizer is the interface that provides a PrepareDecorator used to supply request
|
||||||
|
// authorization. Most often, the Authorizer decorator runs last so it has access to the full
|
||||||
|
// state of the formed HTTP request.
|
||||||
|
type Authorizer interface {
|
||||||
|
WithAuthorization() PrepareDecorator
|
||||||
|
}
|
||||||
|
|
||||||
|
// NullAuthorizer implements a default, "do nothing" Authorizer.
|
||||||
|
type NullAuthorizer struct{}
|
||||||
|
|
||||||
|
// WithAuthorization returns a PrepareDecorator that does nothing.
|
||||||
|
func (na NullAuthorizer) WithAuthorization() PrepareDecorator {
|
||||||
|
return WithNothing()
|
||||||
|
}
|
||||||
|
|
||||||
|
// BearerAuthorizer implements the bearer authorization
|
||||||
|
type BearerAuthorizer struct {
|
||||||
|
tokenProvider adal.OAuthTokenProvider
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewBearerAuthorizer crates a BearerAuthorizer using the given token provider
|
||||||
|
func NewBearerAuthorizer(tp adal.OAuthTokenProvider) *BearerAuthorizer {
|
||||||
|
return &BearerAuthorizer{tokenProvider: tp}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ba *BearerAuthorizer) withBearerAuthorization() PrepareDecorator {
|
||||||
|
return WithHeader(headerAuthorization, fmt.Sprintf("Bearer %s", ba.tokenProvider.OAuthToken()))
|
||||||
|
}
|
||||||
|
|
||||||
|
// WithAuthorization returns a PrepareDecorator that adds an HTTP Authorization header whose
|
||||||
|
// value is "Bearer " followed by the token.
|
||||||
|
//
|
||||||
|
// By default, the token will be automatically refreshed through the Refresher interface.
|
||||||
|
func (ba *BearerAuthorizer) WithAuthorization() PrepareDecorator {
|
||||||
|
return func(p Preparer) Preparer {
|
||||||
|
return PreparerFunc(func(r *http.Request) (*http.Request, error) {
|
||||||
|
refresher, ok := ba.tokenProvider.(adal.Refresher)
|
||||||
|
if ok {
|
||||||
|
err := refresher.EnsureFresh()
|
||||||
|
if err != nil {
|
||||||
|
return r, NewErrorWithError(err, "azure.BearerAuthorizer", "WithAuthorization", nil,
|
||||||
|
"Failed to refresh the Token for request to %s", r.URL)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return (ba.withBearerAuthorization()(p)).Prepare(r)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
35
vendor/github.com/Azure/go-autorest/autorest/azure/BUILD
generated
vendored
Normal file
35
vendor/github.com/Azure/go-autorest/autorest/azure/BUILD
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"async.go",
|
||||||
|
"azure.go",
|
||||||
|
"environments.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/autorest/date:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/Azure/go-autorest/autorest/date/BUILD
generated
vendored
Normal file
33
vendor/github.com/Azure/go-autorest/autorest/date/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"date.go",
|
||||||
|
"time.go",
|
||||||
|
"timerfc1123.go",
|
||||||
|
"unixtime.go",
|
||||||
|
"utility.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
109
vendor/github.com/Azure/go-autorest/autorest/date/unixtime.go
generated
vendored
Normal file
109
vendor/github.com/Azure/go-autorest/autorest/date/unixtime.go
generated
vendored
Normal file
@@ -0,0 +1,109 @@
|
|||||||
|
package date
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"encoding/binary"
|
||||||
|
"encoding/json"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// unixEpoch is the moment in time that should be treated as timestamp 0.
|
||||||
|
var unixEpoch = time.Date(1970, time.January, 1, 0, 0, 0, 0, time.UTC)
|
||||||
|
|
||||||
|
// UnixTime marshals and unmarshals a time that is represented as the number
|
||||||
|
// of seconds (ignoring skip-seconds) since the Unix Epoch.
|
||||||
|
type UnixTime time.Time
|
||||||
|
|
||||||
|
// Duration returns the time as a Duration since the UnixEpoch.
|
||||||
|
func (t UnixTime) Duration() time.Duration {
|
||||||
|
return time.Time(t).Sub(unixEpoch)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUnixTimeFromSeconds creates a UnixTime as a number of seconds from the UnixEpoch.
|
||||||
|
func NewUnixTimeFromSeconds(seconds float64) UnixTime {
|
||||||
|
return NewUnixTimeFromDuration(time.Duration(seconds * float64(time.Second)))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUnixTimeFromNanoseconds creates a UnixTime as a number of nanoseconds from the UnixEpoch.
|
||||||
|
func NewUnixTimeFromNanoseconds(nanoseconds int64) UnixTime {
|
||||||
|
return NewUnixTimeFromDuration(time.Duration(nanoseconds))
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUnixTimeFromDuration creates a UnixTime as a duration of time since the UnixEpoch.
|
||||||
|
func NewUnixTimeFromDuration(dur time.Duration) UnixTime {
|
||||||
|
return UnixTime(unixEpoch.Add(dur))
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnixEpoch retreives the moment considered the Unix Epoch. I.e. The time represented by '0'
|
||||||
|
func UnixEpoch() time.Time {
|
||||||
|
return unixEpoch
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalJSON preserves the UnixTime as a JSON number conforming to Unix Timestamp requirements.
|
||||||
|
// (i.e. the number of seconds since midnight January 1st, 1970 not considering leap seconds.)
|
||||||
|
func (t UnixTime) MarshalJSON() ([]byte, error) {
|
||||||
|
buffer := &bytes.Buffer{}
|
||||||
|
enc := json.NewEncoder(buffer)
|
||||||
|
err := enc.Encode(float64(time.Time(t).UnixNano()) / 1e9)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return buffer.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalJSON reconstitures a UnixTime saved as a JSON number of the number of seconds since
|
||||||
|
// midnight January 1st, 1970.
|
||||||
|
func (t *UnixTime) UnmarshalJSON(text []byte) error {
|
||||||
|
dec := json.NewDecoder(bytes.NewReader(text))
|
||||||
|
|
||||||
|
var secondsSinceEpoch float64
|
||||||
|
if err := dec.Decode(&secondsSinceEpoch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*t = NewUnixTimeFromSeconds(secondsSinceEpoch)
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalText stores the number of seconds since the Unix Epoch as a textual floating point number.
|
||||||
|
func (t UnixTime) MarshalText() ([]byte, error) {
|
||||||
|
cast := time.Time(t)
|
||||||
|
return cast.MarshalText()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalText populates a UnixTime with a value stored textually as a floating point number of seconds since the Unix Epoch.
|
||||||
|
func (t *UnixTime) UnmarshalText(raw []byte) error {
|
||||||
|
var unmarshaled time.Time
|
||||||
|
|
||||||
|
if err := unmarshaled.UnmarshalText(raw); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
*t = UnixTime(unmarshaled)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// MarshalBinary converts a UnixTime into a binary.LittleEndian float64 of nanoseconds since the epoch.
|
||||||
|
func (t UnixTime) MarshalBinary() ([]byte, error) {
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
|
||||||
|
payload := int64(t.Duration())
|
||||||
|
|
||||||
|
if err := binary.Write(buf, binary.LittleEndian, &payload); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.Bytes(), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// UnmarshalBinary converts a from a binary.LittleEndian float64 of nanoseconds since the epoch into a UnixTime.
|
||||||
|
func (t *UnixTime) UnmarshalBinary(raw []byte) error {
|
||||||
|
var nanosecondsSinceEpoch int64
|
||||||
|
|
||||||
|
if err := binary.Read(bytes.NewReader(raw), binary.LittleEndian, &nanosecondsSinceEpoch); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
*t = NewUnixTimeFromNanoseconds(nanosecondsSinceEpoch)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
27
vendor/github.com/Azure/go-autorest/autorest/to/BUILD
generated
vendored
Normal file
27
vendor/github.com/Azure/go-autorest/autorest/to/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["convert.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/Azure/go-autorest/autorest/validation/BUILD
generated
vendored
Normal file
27
vendor/github.com/Azure/go-autorest/autorest/validation/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["validation.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/MakeNowJust/heredoc/BUILD
generated
vendored
Normal file
27
vendor/github.com/MakeNowJust/heredoc/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["heredoc.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/PuerkitoBio/purell/BUILD
generated
vendored
Normal file
33
vendor/github.com/PuerkitoBio/purell/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["purell.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/PuerkitoBio/urlesc:go_default_library",
|
||||||
|
"//vendor/golang.org/x/net/idna:go_default_library",
|
||||||
|
"//vendor/golang.org/x/text/secure/precis:go_default_library",
|
||||||
|
"//vendor/golang.org/x/text/unicode/norm:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/PuerkitoBio/urlesc/BUILD
generated
vendored
Normal file
27
vendor/github.com/PuerkitoBio/urlesc/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["urlesc.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
38
vendor/github.com/Sirupsen/logrus/BUILD
generated
vendored
Normal file
38
vendor/github.com/Sirupsen/logrus/BUILD
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"entry.go",
|
||||||
|
"exported.go",
|
||||||
|
"formatter.go",
|
||||||
|
"hooks.go",
|
||||||
|
"json_formatter.go",
|
||||||
|
"logger.go",
|
||||||
|
"logrus.go",
|
||||||
|
"terminal_linux.go",
|
||||||
|
"terminal_notwindows.go",
|
||||||
|
"text_formatter.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
34
vendor/github.com/abbot/go-http-auth/BUILD
generated
vendored
Normal file
34
vendor/github.com/abbot/go-http-auth/BUILD
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"auth.go",
|
||||||
|
"basic.go",
|
||||||
|
"digest.go",
|
||||||
|
"md5crypt.go",
|
||||||
|
"misc.go",
|
||||||
|
"users.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
41
vendor/github.com/appc/spec/schema/BUILD
generated
vendored
Normal file
41
vendor/github.com/appc/spec/schema/BUILD
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"doc.go",
|
||||||
|
"image.go",
|
||||||
|
"kind.go",
|
||||||
|
"pod.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/appc/spec/schema/types:go_default_library",
|
||||||
|
"//vendor/go4.org/errorutil:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/appc/spec/schema/common:all-srcs",
|
||||||
|
"//vendor/github.com/appc/spec/schema/types:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/appc/spec/schema/common/BUILD
generated
vendored
Normal file
27
vendor/github.com/appc/spec/schema/common/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["common.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
62
vendor/github.com/appc/spec/schema/types/BUILD
generated
vendored
Normal file
62
vendor/github.com/appc/spec/schema/types/BUILD
generated
vendored
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"acidentifier.go",
|
||||||
|
"ackind.go",
|
||||||
|
"acname.go",
|
||||||
|
"annotations.go",
|
||||||
|
"app.go",
|
||||||
|
"date.go",
|
||||||
|
"dependencies.go",
|
||||||
|
"doc.go",
|
||||||
|
"environment.go",
|
||||||
|
"errors.go",
|
||||||
|
"event_handler.go",
|
||||||
|
"exec.go",
|
||||||
|
"hash.go",
|
||||||
|
"isolator.go",
|
||||||
|
"isolator_linux_specific.go",
|
||||||
|
"isolator_resources.go",
|
||||||
|
"isolator_unix.go",
|
||||||
|
"labels.go",
|
||||||
|
"mountpoint.go",
|
||||||
|
"port.go",
|
||||||
|
"semver.go",
|
||||||
|
"url.go",
|
||||||
|
"user_annotations.go",
|
||||||
|
"user_labels.go",
|
||||||
|
"uuid.go",
|
||||||
|
"volume.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/appc/spec/schema/common:go_default_library",
|
||||||
|
"//vendor/github.com/appc/spec/schema/types/resource:go_default_library",
|
||||||
|
"//vendor/github.com/coreos/go-semver/semver:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/appc/spec/schema/types/resource:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
37
vendor/github.com/appc/spec/schema/types/resource/BUILD
generated
vendored
Normal file
37
vendor/github.com/appc/spec/schema/types/resource/BUILD
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"amount.go",
|
||||||
|
"math.go",
|
||||||
|
"quantity.go",
|
||||||
|
"scale_int.go",
|
||||||
|
"suffix.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/spf13/pflag:go_default_library",
|
||||||
|
"//vendor/gopkg.in/inf.v0:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/armon/circbuf/BUILD
generated
vendored
Normal file
27
vendor/github.com/armon/circbuf/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["circbuf.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
36
vendor/github.com/asaskevich/govalidator/BUILD
generated
vendored
Normal file
36
vendor/github.com/asaskevich/govalidator/BUILD
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"arrays.go",
|
||||||
|
"converter.go",
|
||||||
|
"error.go",
|
||||||
|
"numerics.go",
|
||||||
|
"patterns.go",
|
||||||
|
"types.go",
|
||||||
|
"utils.go",
|
||||||
|
"validator.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
52
vendor/github.com/aws/aws-sdk-go/aws/BUILD
generated
vendored
Normal file
52
vendor/github.com/aws/aws-sdk-go/aws/BUILD
generated
vendored
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"config.go",
|
||||||
|
"convert_types.go",
|
||||||
|
"errors.go",
|
||||||
|
"logger.go",
|
||||||
|
"types.go",
|
||||||
|
"version.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/defaults:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/endpoints:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/session:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
30
vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD
generated
vendored
Normal file
30
vendor/github.com/aws/aws-sdk-go/aws/awserr/BUILD
generated
vendored
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"error.go",
|
||||||
|
"types.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
34
vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD
generated
vendored
Normal file
34
vendor/github.com/aws/aws-sdk-go/aws/awsutil/BUILD
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"copy.go",
|
||||||
|
"equal.go",
|
||||||
|
"path_value.go",
|
||||||
|
"prettify.go",
|
||||||
|
"string_value.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/jmespath/go-jmespath:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
38
vendor/github.com/aws/aws-sdk-go/aws/client/BUILD
generated
vendored
Normal file
38
vendor/github.com/aws/aws-sdk-go/aws/client/BUILD
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"client.go",
|
||||||
|
"default_retryer.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD
generated
vendored
Normal file
27
vendor/github.com/aws/aws-sdk-go/aws/client/metadata/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["client_info.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
36
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD
generated
vendored
Normal file
36
vendor/github.com/aws/aws-sdk-go/aws/corehandlers/BUILD
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"handlers.go",
|
||||||
|
"param_validator.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
42
vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD
generated
vendored
Normal file
42
vendor/github.com/aws/aws-sdk-go/aws/credentials/BUILD
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"chain_provider.go",
|
||||||
|
"credentials.go",
|
||||||
|
"env_provider.go",
|
||||||
|
"shared_credentials_provider.go",
|
||||||
|
"static_provider.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/go-ini/ini:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD
generated
vendored
Normal file
33
vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["ec2_role_provider.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
35
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD
generated
vendored
Normal file
35
vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds/BUILD
generated
vendored
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["provider.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD
generated
vendored
Normal file
33
vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["assume_role_provider.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/service/sts:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
37
vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD
generated
vendored
Normal file
37
vendor/github.com/aws/aws-sdk-go/aws/defaults/BUILD
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["defaults.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/ec2rolecreds:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/endpointcreds:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/ec2metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
37
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD
generated
vendored
Normal file
37
vendor/github.com/aws/aws-sdk-go/aws/ec2metadata/BUILD
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"service.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
34
vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD
generated
vendored
Normal file
34
vendor/github.com/aws/aws-sdk-go/aws/endpoints/BUILD
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"decode.go",
|
||||||
|
"defaults.go",
|
||||||
|
"doc.go",
|
||||||
|
"endpoints.go",
|
||||||
|
"v3model.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
42
vendor/github.com/aws/aws-sdk-go/aws/request/BUILD
generated
vendored
Normal file
42
vendor/github.com/aws/aws-sdk-go/aws/request/BUILD
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"handlers.go",
|
||||||
|
"http_request.go",
|
||||||
|
"offset_reader.go",
|
||||||
|
"request.go",
|
||||||
|
"request_1_8.go",
|
||||||
|
"request_pagination.go",
|
||||||
|
"retryer.go",
|
||||||
|
"validation.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
44
vendor/github.com/aws/aws-sdk-go/aws/session/BUILD
generated
vendored
Normal file
44
vendor/github.com/aws/aws-sdk-go/aws/session/BUILD
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"doc.go",
|
||||||
|
"env_config.go",
|
||||||
|
"session.go",
|
||||||
|
"shared_config.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/corehandlers:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials/stscreds:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/defaults:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/go-ini/ini:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
37
vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD
generated
vendored
Normal file
37
vendor/github.com/aws/aws-sdk-go/aws/signer/v4/BUILD
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"header_rules.go",
|
||||||
|
"uri_path.go",
|
||||||
|
"v4.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/credentials:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
40
vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD
generated
vendored
Normal file
40
vendor/github.com/aws/aws-sdk-go/private/protocol/BUILD
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"idempotency.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/restxml:all-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
36
vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD
generated
vendored
Normal file
36
vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query/BUILD
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"build.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
31
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD
generated
vendored
Normal file
31
vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil/BUILD
generated
vendored
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"build.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD
generated
vendored
Normal file
33
vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["jsonrpc.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/json/jsonutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
40
vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD
generated
vendored
Normal file
40
vendor/github.com/aws/aws-sdk-go/private/protocol/query/BUILD
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"build.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
"unmarshal_error.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [
|
||||||
|
":package-srcs",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil:all-srcs",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
28
vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD
generated
vendored
Normal file
28
vendor/github.com/aws/aws-sdk-go/private/protocol/query/queryutil/BUILD
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["queryutil.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
36
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD
generated
vendored
Normal file
36
vendor/github.com/aws/aws-sdk-go/private/protocol/rest/BUILD
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"build.go",
|
||||||
|
"payload.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
34
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/BUILD
generated
vendored
Normal file
34
vendor/github.com/aws/aws-sdk-go/private/protocol/restxml/BUILD
generated
vendored
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["restxml.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/rest:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
32
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD
generated
vendored
Normal file
32
vendor/github.com/aws/aws-sdk-go/private/protocol/xml/xmlutil/BUILD
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"build.go",
|
||||||
|
"unmarshal.go",
|
||||||
|
"xml_to_struct.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = ["//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/aws/aws-sdk-go/private/waiter/BUILD
generated
vendored
Normal file
33
vendor/github.com/aws/aws-sdk-go/private/waiter/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["waiter.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
42
vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD
generated
vendored
Normal file
42
vendor/github.com/aws/aws-sdk-go/service/autoscaling/BUILD
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"service.go",
|
||||||
|
"waiters.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/waiter:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
44
vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD
generated
vendored
Normal file
44
vendor/github.com/aws/aws-sdk-go/service/ec2/BUILD
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"customizations.go",
|
||||||
|
"service.go",
|
||||||
|
"waiters.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/endpoints:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/ec2query:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/waiter:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
39
vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD
generated
vendored
Normal file
39
vendor/github.com/aws/aws-sdk-go/service/ecr/BUILD
generated
vendored
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"service.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/jsonrpc:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
41
vendor/github.com/aws/aws-sdk-go/service/elb/BUILD
generated
vendored
Normal file
41
vendor/github.com/aws/aws-sdk-go/service/elb/BUILD
generated
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"service.go",
|
||||||
|
"waiters.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/waiter:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
44
vendor/github.com/aws/aws-sdk-go/service/route53/BUILD
generated
vendored
Normal file
44
vendor/github.com/aws/aws-sdk-go/service/route53/BUILD
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"customizations.go",
|
||||||
|
"service.go",
|
||||||
|
"unmarshal_error.go",
|
||||||
|
"waiters.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awserr:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/restxml:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/waiter:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
40
vendor/github.com/aws/aws-sdk-go/service/sts/BUILD
generated
vendored
Normal file
40
vendor/github.com/aws/aws-sdk-go/service/sts/BUILD
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"api.go",
|
||||||
|
"customizations.go",
|
||||||
|
"service.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
deps = [
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/awsutil:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/client/metadata:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/request:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/aws/signer/v4:go_default_library",
|
||||||
|
"//vendor/github.com/aws/aws-sdk-go/private/protocol/query:go_default_library",
|
||||||
|
],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
27
vendor/github.com/beorn7/perks/quantile/BUILD
generated
vendored
Normal file
27
vendor/github.com/beorn7/perks/quantile/BUILD
generated
vendored
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["stream.go"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
33
vendor/github.com/blang/semver/BUILD
generated
vendored
Normal file
33
vendor/github.com/blang/semver/BUILD
generated
vendored
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"json.go",
|
||||||
|
"range.go",
|
||||||
|
"semver.go",
|
||||||
|
"sort.go",
|
||||||
|
"sql.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
40
vendor/github.com/boltdb/bolt/BUILD
generated
vendored
Normal file
40
vendor/github.com/boltdb/bolt/BUILD
generated
vendored
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package(default_visibility = ["//visibility:public"])
|
||||||
|
|
||||||
|
licenses(["notice"])
|
||||||
|
|
||||||
|
load(
|
||||||
|
"@io_bazel_rules_go//go:def.bzl",
|
||||||
|
"go_library",
|
||||||
|
)
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = [
|
||||||
|
"bolt_amd64.go",
|
||||||
|
"bolt_linux.go",
|
||||||
|
"bolt_unix.go",
|
||||||
|
"bucket.go",
|
||||||
|
"cursor.go",
|
||||||
|
"db.go",
|
||||||
|
"doc.go",
|
||||||
|
"errors.go",
|
||||||
|
"freelist.go",
|
||||||
|
"node.go",
|
||||||
|
"page.go",
|
||||||
|
"tx.go",
|
||||||
|
],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
)
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user