diff --git a/cmd/osbuild-upload-azure/main.go b/cmd/osbuild-upload-azure/main.go index 330e1d802..2c25adf62 100644 --- a/cmd/osbuild-upload-azure/main.go +++ b/cmd/osbuild-upload-azure/main.go @@ -1,10 +1,12 @@ package main import ( + "context" "flag" "fmt" "os" "path" + "strings" "github.com/osbuild/osbuild-composer/internal/upload/azure" ) @@ -17,17 +19,37 @@ func checkStringNotEmpty(variable string, errorMessage string) { } } +type tags map[string]string + +func (t *tags) String() string { + return "" +} + +func (t *tags) Set(value string) error { + splitValue := strings.SplitN(value, ":", 2) + if len(splitValue) < 2 { + return fmt.Errorf(`-tag must be in format key:value, "%s" is not valid`, value) + } + key := splitValue[0] + val := splitValue[1] + (*t)[key] = val + + return nil +} + func main() { var storageAccount string var storageAccessKey string var fileName string var containerName string var threads int + tagsArg := tags(make(map[string]string)) flag.StringVar(&storageAccount, "storage-account", "", "Azure storage account (mandatory)") flag.StringVar(&storageAccessKey, "storage-access-key", "", "Azure storage access key (mandatory)") flag.StringVar(&fileName, "image", "", "image to upload (mandatory)") flag.StringVar(&containerName, "container", "", "name of storage container (see Azure docs for explanation, mandatory)") flag.IntVar(&threads, "threads", 16, "number of threads for parallel upload") + flag.Var(&tagsArg, "tag", "blob tag formatted as key:value (first colon found is considered to be the delimiter), can be specified multiple times") flag.Parse() checkStringNotEmpty(storageAccount, "You need to specify storage account") @@ -44,18 +66,24 @@ func main() { } blobName := azure.EnsureVHDExtension(path.Base(fileName)) - + blobMetadata := azure.BlobMetadata{ + StorageAccount: storageAccount, + BlobName: blobName, + ContainerName: containerName, + } err = c.UploadPageBlob( - azure.BlobMetadata{ - StorageAccount: storageAccount, - BlobName: blobName, - ContainerName: containerName, - }, + blobMetadata, fileName, threads, ) - if err != nil { - fmt.Println("Error: ", err) + fmt.Println("Uploading error: ", err) + os.Exit(1) + } + + err = c.TagBlob(context.Background(), blobMetadata, tagsArg) + if err != nil { + fmt.Println("Tagging error: ", err) + os.Exit(1) } } diff --git a/go.mod b/go.mod index 751f8a216..32b3714c8 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( cloud.google.com/go/storage v1.22.0 github.com/Azure/azure-pipeline-go v0.2.3 github.com/Azure/azure-sdk-for-go v63.4.0+incompatible - github.com/Azure/azure-storage-blob-go v0.14.0 + github.com/Azure/azure-storage-blob-go v0.13.0 github.com/Azure/go-autorest/autorest v0.11.27 github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect @@ -47,5 +47,6 @@ require ( golang.org/x/sys v0.0.0-20220412211240-33da011f77ad google.golang.org/api v0.75.0 google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3 + gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/ini.v1 v1.66.4 ) diff --git a/go.sum b/go.sum index 5272cdf29..c5a17fae8 100644 --- a/go.sum +++ b/go.sum @@ -62,14 +62,14 @@ github.com/Azure/azure-pipeline-go v0.2.3 h1:7U9HBg1JFK3jHl5qmo4CTZKFTVgMwdFHMVt github.com/Azure/azure-pipeline-go v0.2.3/go.mod h1:x841ezTBIMG6O3lAcl8ATHnsOPVl2bqk7S3ta6S6u4k= github.com/Azure/azure-sdk-for-go v63.4.0+incompatible h1:fle3M5Q7vr8auaiPffKyUQmLbvYeqpw30bKU6PrWJFo= github.com/Azure/azure-sdk-for-go v63.4.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/azure-storage-blob-go v0.14.0 h1:1BCg74AmVdYwO3dlKwtFU1V0wU2PZdREkXvAmZJRUlM= -github.com/Azure/azure-storage-blob-go v0.14.0/go.mod h1:SMqIBi+SuiQH32bvyjngEewEeXoPfKMgWlBDaYf6fck= +github.com/Azure/azure-storage-blob-go v0.13.0 h1:lgWHvFh+UYBNVQLFHXkvul2f6yOPA9PIH82RTG2cSwc= +github.com/Azure/azure-storage-blob-go v0.13.0/go.mod h1:pA9kNqtjUeQF2zOSu4s//nUdBD+e64lEuc4sVnuOfNs= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= github.com/Azure/go-autorest/autorest v0.11.24/go.mod h1:G6kyRlFnTuSbEYkQGawPfsCswgme4iYf6rfSKUDzbCc= github.com/Azure/go-autorest/autorest v0.11.27 h1:F3R3q42aWytozkV8ihzcgMO4OA4cuqr3bNlsEuF6//A= github.com/Azure/go-autorest/autorest v0.11.27/go.mod h1:7l8ybrIdUmGqZMTD0sRtAr8NvbHjfofbf8RSP2q7w7U= -github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= +github.com/Azure/go-autorest/autorest/adal v0.9.2/go.mod h1:/3SMAM86bP6wC9Ev35peQDUeqFZBMH07vvUOmg4z/fE= github.com/Azure/go-autorest/autorest/adal v0.9.18 h1:kLnPsRjzZZUF3K5REu/Kc+qMQrvuza2bwSnNdhmzLfQ= github.com/Azure/go-autorest/autorest/adal v0.9.18/go.mod h1:XVVeme+LZwABT8K5Lc3hA4nAe8LDBVle26gTrguhhPQ= github.com/Azure/go-autorest/autorest/azure/auth v0.5.11 h1:P6bYXFoao05z5uhOQzbC3Qd8JqF3jUoocoTeIxkp2cA= @@ -162,7 +162,6 @@ github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/getkin/kin-openapi v0.61.0/go.mod h1:7Yn5whZr5kJi6t+kShccXS8ae1APpYTW6yheSwk8Yi4= @@ -276,8 +275,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= @@ -579,7 +578,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= diff --git a/internal/upload/azure/azurestorage.go b/internal/upload/azure/azurestorage.go index 99553c70d..28bab380d 100644 --- a/internal/upload/azure/azurestorage.go +++ b/internal/upload/azure/azurestorage.go @@ -12,6 +12,7 @@ import ( "io" "net/url" "os" + "regexp" "strings" "sync" @@ -194,6 +195,33 @@ func (c StorageClient) CreateStorageContainerIfNotExist(ctx context.Context, sto return nil } +// Taken from https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tags#request-body +var tagKeyRegexp = regexp.MustCompile(`^[a-zA-Z0-9 +-./:=_]{1,256}$`) +var tagValueRegexp = regexp.MustCompile(`^[a-zA-Z0-9 +-./:=_]{0,256}$`) + +func (c StorageClient) TagBlob(ctx context.Context, metadata BlobMetadata, tags map[string]string) error { + for key, value := range tags { + if !tagKeyRegexp.MatchString(key) { + return fmt.Errorf("tag key `%s` doesn't match the format accepted by Azure", key) + } + if !tagValueRegexp.MatchString(key) { + return fmt.Errorf("tag value `%s` of key `%s` doesn't match the format accepted by Azure", value, key) + } + } + + URL, _ := url.Parse(fmt.Sprintf("https://%s.blob.core.windows.net/%s", metadata.StorageAccount, metadata.ContainerName)) + containerURL := azblob.NewContainerURL(*URL, c.pipeline) + + blobURL := containerURL.NewPageBlobURL(metadata.BlobName) + + _, err := blobURL.SetTags(ctx, nil, nil, nil, nil, nil, nil, tags) + if err != nil { + return fmt.Errorf("cannot tag the blob: %v", err) + } + + return nil +} + // RandomStorageAccountName returns a randomly generated name that can be used // for a storage account. This means that it must use only alphanumeric // characters and its length must be 24 or lower. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/chunkwriting.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/chunkwriting.go index e6bdeebcf..b7dc0d739 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/chunkwriting.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/chunkwriting.go @@ -56,7 +56,6 @@ func copyFromReader(ctx context.Context, from io.Reader, to blockWriter, o Uploa } // If the error is not EOF, then we have a problem. if err != nil && !errors.Is(err, io.EOF) { - cp.wg.Wait() return nil, err } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go index 008f0822f..6f453e669 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_blob.go @@ -139,22 +139,22 @@ func (b BlobURL) Delete(ctx context.Context, deleteOptions DeleteSnapshotsOption return b.blobClient.Delete(ctx, nil, nil, nil, ac.LeaseAccessConditions.pointers(), deleteOptions, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil, // Blob ifTags - nil, BlobDeleteNone) + nil) } // SetTags operation enables users to set tags on a blob or specific blob version, but not snapshot. // Each call to this operation replaces all existing tags attached to the blob. // To remove all tags from the blob, call this operation with no tags set. // https://docs.microsoft.com/en-us/rest/api/storageservices/set-blob-tags -func (b BlobURL) SetTags(ctx context.Context, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, ifTags *string, blobTagsMap BlobTagsMap) (*BlobSetTagsResponse, error) { +func (b BlobURL) SetTags(ctx context.Context, timeout *int32, versionID *string, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, requestID *string, ifTags *string, blobTagsMap BlobTagsMap) (*BlobSetTagsResponse, error) { tags := SerializeBlobTags(blobTagsMap) - return b.blobClient.SetTags(ctx, nil, nil, transactionalContentMD5, transactionalContentCrc64, nil, ifTags, nil, &tags) + return b.blobClient.SetTags(ctx, timeout, versionID, transactionalContentMD5, transactionalContentCrc64, requestID, ifTags, &tags) } // GetTags operation enables users to get tags on a blob or specific blob version, or snapshot. // https://docs.microsoft.com/en-us/rest/api/storageservices/get-blob-tags -func (b BlobURL) GetTags(ctx context.Context, ifTags *string) (*BlobTags, error) { - return b.blobClient.GetTags(ctx, nil, nil, nil, nil, ifTags, nil) +func (b BlobURL) GetTags(ctx context.Context, timeout *int32, requestID *string, snapshot *string, versionID *string, ifTags *string) (*BlobTags, error) { + return b.blobClient.GetTags(ctx, timeout, requestID, snapshot, versionID, ifTags) } // Undelete restores the contents and metadata of a soft-deleted blob and any associated soft-deleted snapshots. @@ -173,8 +173,7 @@ func (b BlobURL) Undelete(ctx context.Context) (*BlobUndeleteResponse, error) { func (b BlobURL) SetTier(ctx context.Context, tier AccessTierType, lac LeaseAccessConditions) (*BlobSetTierResponse, error) { return b.blobClient.SetTier(ctx, tier, nil, nil, // Blob versioning - nil, RehydratePriorityNone, nil, lac.pointers(), - nil) // Blob ifTags + nil, RehydratePriorityNone, nil, lac.pointers()) } // GetProperties returns the blob's properties. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go index 7775559cc..c47ed81b9 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_block_blob.go @@ -154,22 +154,6 @@ func (bb BlockBlobURL) CopyFromURL(ctx context.Context, source url.URL, metadata nil, // Blob ifTags dstLeaseID, nil, srcContentMD5, blobTagsString, // Blob tags + nil, // seal Blob ) } - -// PutBlobFromURL synchronously creates a new Block Blob with data from the source URL up to a max length of 256MB. -// For more information, see https://docs.microsoft.com/en-us/rest/api/storageservices/put-blob-from-url. -func (bb BlockBlobURL) PutBlobFromURL(ctx context.Context, h BlobHTTPHeaders, source url.URL, metadata Metadata, srcac ModifiedAccessConditions, dstac BlobAccessConditions, srcContentMD5 []byte, dstContentMD5 []byte, tier AccessTierType, blobTagsMap BlobTagsMap, cpk ClientProvidedKeyOptions) (*BlockBlobPutBlobFromURLResponse, error) { - - srcIfModifiedSince, srcIfUnmodifiedSince, srcIfMatchETag, srcIfNoneMatchETag := srcac.pointers() - dstIfModifiedSince, dstIfUnmodifiedSince, dstIfMatchETag, dstIfNoneMatchETag := dstac.ModifiedAccessConditions.pointers() - dstLeaseID := dstac.LeaseAccessConditions.pointers() - blobTagsString := SerializeBlobTagsHeader(blobTagsMap) - - return bb.bbClient.PutBlobFromURL(ctx, 0, source.String(), nil, nil, - &h.ContentType, &h.ContentEncoding, &h.ContentLanguage, dstContentMD5, &h.CacheControl, - metadata, dstLeaseID, &h.ContentDisposition, cpk.EncryptionKey, cpk.EncryptionKeySha256, - cpk.EncryptionAlgorithm, cpk.EncryptionScope, tier, dstIfModifiedSince, dstIfUnmodifiedSince, - dstIfMatchETag, dstIfNoneMatchETag, nil, srcIfModifiedSince, srcIfUnmodifiedSince, - srcIfMatchETag, srcIfNoneMatchETag, nil, nil, srcContentMD5, blobTagsString, nil) -} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go index 624b144b7..d02eff48d 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/url_page_blob.go @@ -126,7 +126,7 @@ func (pb PageBlobURL) ClearPages(ctx context.Context, offset int64, count int64, cpk.EncryptionKey, cpk.EncryptionKeySha256, cpk.EncryptionAlgorithm, // CPK cpk.EncryptionScope, // CPK-N ifSequenceNumberLessThanOrEqual, ifSequenceNumberLessThan, - ifSequenceNumberEqual, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil, nil) + ifSequenceNumberEqual, ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } // GetPageRanges returns the list of valid page ranges for a page blob or snapshot of a page blob. @@ -175,7 +175,7 @@ func (pb PageBlobURL) Resize(ctx context.Context, size int64, ac BlobAccessCondi return pb.pbClient.Resize(ctx, size, nil, ac.LeaseAccessConditions.pointers(), cpk.EncryptionKey, cpk.EncryptionKeySha256, cpk.EncryptionAlgorithm, // CPK cpk.EncryptionScope, // CPK-N - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil, nil) + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } // UpdateSequenceNumber sets the page blob's sequence number. @@ -188,7 +188,7 @@ func (pb PageBlobURL) UpdateSequenceNumber(ctx context.Context, action SequenceN ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch := ac.ModifiedAccessConditions.pointers() return pb.pbClient.UpdateSequenceNumber(ctx, action, nil, ac.LeaseAccessConditions.pointers(), ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, - nil, sn, nil) + sn, nil) } // StartCopyIncremental begins an operation to start an incremental copy from one page blob's snapshot to this page blob. @@ -202,7 +202,7 @@ func (pb PageBlobURL) StartCopyIncremental(ctx context.Context, source url.URL, qp.Set("snapshot", snapshot) source.RawQuery = qp.Encode() return pb.pbClient.CopyIncremental(ctx, source.String(), nil, - ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil, nil) + ifModifiedSince, ifUnmodifiedSince, ifMatchETag, ifNoneMatchETag, nil) } func (pr PageRange) pointers() *string { diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go index 1df7e096a..287e1e4b8 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/version.go @@ -1,3 +1,3 @@ package azblob -const serviceLibVersion = "0.14" +const serviceLibVersion = "0.13" diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go index ddc83cc78..29a99a844 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_request_log.go @@ -18,11 +18,6 @@ type RequestLogOptions struct { // LogWarningIfTryOverThreshold logs a warning if a tried operation takes longer than the specified // duration (-1=no logging; 0=default threshold). LogWarningIfTryOverThreshold time.Duration - - // SyslogDisabled is a flag to check if logging to Syslog/Windows-Event-Logger is enabled or not - // We by default print to Syslog/Windows-Event-Logger. - // If SyslogDisabled is not provided explicitly, the default value will be false. - SyslogDisabled bool } func (o RequestLogOptions) defaults() RequestLogOptions { @@ -64,7 +59,7 @@ func NewRequestLogPolicyFactory(o RequestLogOptions) pipeline.Factory { // If the response took too long, we'll upgrade to warning. if o.LogWarningIfTryOverThreshold > 0 && tryDuration > o.LogWarningIfTryOverThreshold { // Log a warning if the try duration exceeded the specified threshold - logLevel, forceLog = pipeline.LogWarning, !o.SyslogDisabled + logLevel, forceLog = pipeline.LogWarning, true } var sc int @@ -78,9 +73,8 @@ func NewRequestLogPolicyFactory(o RequestLogOptions) pipeline.Factory { } } - if sc == 0 || ((sc >= 400 && sc <= 499) && sc != http.StatusNotFound && sc != http.StatusConflict && - sc != http.StatusPreconditionFailed && sc != http.StatusRequestedRangeNotSatisfiable) || (sc >= 500 && sc <= 599) { - logLevel, forceLog = pipeline.LogError, !o.SyslogDisabled // Promote to Error any 4xx (except those listed is an error) or any 5xx + if sc == 0 || ((sc >= 400 && sc <= 499) && sc != http.StatusNotFound && sc != http.StatusConflict && sc != http.StatusPreconditionFailed && sc != http.StatusRequestedRangeNotSatisfiable) || (sc >= 500 && sc <= 599) { + logLevel, forceLog = pipeline.LogError, true // Promote to Error any 4xx (except those listed is an error) or any 5xx } else { // For other status codes, we leave the level as is. } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go index 1f7817d2d..db8cee7b4 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zc_policy_unique_request_id.go @@ -3,7 +3,6 @@ package azblob import ( "context" "errors" - "github.com/Azure/azure-pipeline-go/pipeline" ) @@ -22,9 +21,11 @@ func NewUniqueRequestIDPolicyFactory() pipeline.Factory { resp, err := next.Do(ctx, request) if err == nil && resp != nil { - crId := resp.Response().Header.Get(xMsClientRequestID) - if crId != "" && crId != id { - err = errors.New("client Request ID from request and response does not match") + val := resp.Response().Header.Values(xMsClientRequestID) + if len(val) > 0 { + if val[0] != id { + err = errors.New("client Request ID from request and response does not match") + } } } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go index 1b222b6b1..036bbfcfa 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_blob.go @@ -366,15 +366,16 @@ func (client blobClient) changeLeaseResponder(resp pipeline.Response) (pipeline. // only succeeds if the resource's lease is active and matches this ID. requestID is provides a client-generated, // opaque value with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is // enabled. sourceContentMD5 is specify the md5 calculated for the range of bytes that must be read from the copy -// source. blobTagsString is optional. Used to set blob tags in various blob operations. -func (client blobClient) CopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, tier AccessTierType, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, leaseID *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string) (*BlobCopyFromURLResponse, error) { +// source. blobTagsString is optional. Used to set blob tags in various blob operations. sealBlob is overrides the +// sealed state of the destination blob. Service version 2019-12-12 and newer. +func (client blobClient) CopyFromURL(ctx context.Context, copySource string, timeout *int32, metadata map[string]string, tier AccessTierType, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, leaseID *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string, sealBlob *bool) (*BlobCopyFromURLResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.copyFromURLPreparer(copySource, timeout, metadata, tier, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, leaseID, requestID, sourceContentMD5, blobTagsString) + req, err := client.copyFromURLPreparer(copySource, timeout, metadata, tier, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, leaseID, requestID, sourceContentMD5, blobTagsString, sealBlob) if err != nil { return nil, err } @@ -386,7 +387,7 @@ func (client blobClient) CopyFromURL(ctx context.Context, copySource string, tim } // copyFromURLPreparer prepares the CopyFromURL request. -func (client blobClient) copyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, tier AccessTierType, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, leaseID *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string) (pipeline.Request, error) { +func (client blobClient) copyFromURLPreparer(copySource string, timeout *int32, metadata map[string]string, tier AccessTierType, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, leaseID *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string, sealBlob *bool) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -445,6 +446,9 @@ func (client blobClient) copyFromURLPreparer(copySource string, timeout *int32, if blobTagsString != nil { req.Header.Set("x-ms-tags", *blobTagsString) } + if sealBlob != nil { + req.Header.Set("x-ms-seal-blob", strconv.FormatBool(*sealBlob)) + } req.Header.Set("x-ms-requires-sync", "true") return req, nil } @@ -595,16 +599,15 @@ func (client blobClient) createSnapshotResponder(resp pipeline.Response) (pipeli // blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. // ifTags is specify a SQL where clause on blob tags to operate only on blobs with a matching value. requestID is // provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when -// storage analytics logging is enabled. blobDeleteType is optional. Only possible value is 'permanent', which -// specifies to permanently delete a blob if blob soft delete is enabled. -func (client blobClient) Delete(ctx context.Context, snapshot *string, versionID *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string, blobDeleteType BlobDeleteType) (*BlobDeleteResponse, error) { +// storage analytics logging is enabled. +func (client blobClient) Delete(ctx context.Context, snapshot *string, versionID *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (*BlobDeleteResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.deletePreparer(snapshot, versionID, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID, blobDeleteType) + req, err := client.deletePreparer(snapshot, versionID, timeout, leaseID, deleteSnapshots, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID) if err != nil { return nil, err } @@ -616,7 +619,7 @@ func (client blobClient) Delete(ctx context.Context, snapshot *string, versionID } // deletePreparer prepares the Delete request. -func (client blobClient) deletePreparer(snapshot *string, versionID *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string, blobDeleteType BlobDeleteType) (pipeline.Request, error) { +func (client blobClient) deletePreparer(snapshot *string, versionID *string, timeout *int32, leaseID *string, deleteSnapshots DeleteSnapshotsOptionType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("DELETE", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -631,9 +634,6 @@ func (client blobClient) deletePreparer(snapshot *string, versionID *string, tim if timeout != nil { params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) } - if blobDeleteType != BlobDeleteNone { - params.Set("deletetype", string(blobDeleteType)) - } req.URL.RawQuery = params.Encode() if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) @@ -1020,16 +1020,15 @@ func (client blobClient) getPropertiesResponder(resp pipeline.Response) (pipelin // href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/creating-a-snapshot-of-a-blob">Creating // a Snapshot of a Blob. versionID is the version id parameter is an opaque DateTime value that, when present, // specifies the version of the blob to operate on. It's for service version 2019-10-10 and newer. ifTags is specify a -// SQL where clause on blob tags to operate only on blobs with a matching value. leaseID is if specified, the operation -// only succeeds if the resource's lease is active and matches this ID. -func (client blobClient) GetTags(ctx context.Context, timeout *int32, requestID *string, snapshot *string, versionID *string, ifTags *string, leaseID *string) (*BlobTags, error) { +// SQL where clause on blob tags to operate only on blobs with a matching value. +func (client blobClient) GetTags(ctx context.Context, timeout *int32, requestID *string, snapshot *string, versionID *string, ifTags *string) (*BlobTags, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.getTagsPreparer(timeout, requestID, snapshot, versionID, ifTags, leaseID) + req, err := client.getTagsPreparer(timeout, requestID, snapshot, versionID, ifTags) if err != nil { return nil, err } @@ -1041,7 +1040,7 @@ func (client blobClient) GetTags(ctx context.Context, timeout *int32, requestID } // getTagsPreparer prepares the GetTags request. -func (client blobClient) getTagsPreparer(timeout *int32, requestID *string, snapshot *string, versionID *string, ifTags *string, leaseID *string) (pipeline.Request, error) { +func (client blobClient) getTagsPreparer(timeout *int32, requestID *string, snapshot *string, versionID *string, ifTags *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("GET", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -1065,9 +1064,6 @@ func (client blobClient) getTagsPreparer(timeout *int32, requestID *string, snap if ifTags != nil { req.Header.Set("x-ms-if-tags", *ifTags) } - if leaseID != nil { - req.Header.Set("x-ms-lease-id", *leaseID) - } return req, nil } @@ -1096,111 +1092,107 @@ func (client blobClient) getTagsResponder(resp pipeline.Response) (pipeline.Resp return result, nil } -// todo funky quick query code -// // Query the Query operation enables users to select/project on blob data by providing simple query expressions. -// // -// // snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to -// // retrieve. For more information on working with blob snapshots, see Creating -// // a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// // Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's -// // lease is active and matches this ID. encryptionKey is optional. Specifies the encryption key to use to encrypt the -// // data provided in the request. If not specified, encryption is performed with the root account encryption key. For -// // more information, see Encryption at Rest for Azure Storage Services. encryptionKeySha256 is the SHA-256 hash of the -// // provided encryption key. Must be provided if the x-ms-encryption-key header is provided. encryptionAlgorithm is the -// // algorithm used to produce the encryption key hash. Currently, the only accepted value is "AES256". Must be provided -// // if the x-ms-encryption-key header is provided. ifModifiedSince is specify this header value to operate only on a -// // blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to -// // operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value -// // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs -// // without a matching value. ifTags is specify a SQL where clause on blob tags to operate only on blobs with a matching -// // value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// // analytics logs when storage analytics logging is enabled. -// func (client blobClient) Query(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (*QueryResponse, error) { -// if err := validate([]validation{ -// {targetValue: timeout, -// constraints: []constraint{{target: "timeout", name: null, rule: false, -// chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { -// return nil, err -// } -// req, err := client.queryPreparer(snapshot, timeout, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID) -// if err != nil { -// return nil, err -// } -// resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.queryResponder}, req) -// if err != nil { -// return nil, err -// } -// return resp.(*QueryResponse), err -// } +// TODO funky quick query code +//// Query the Query operation enables users to select/project on blob data by providing simple query expressions. +//// +//// snapshot is the snapshot parameter is an opaque DateTime value that, when present, specifies the blob snapshot to +//// retrieve. For more information on working with blob snapshots, see Creating +//// a Snapshot of a Blob. timeout is the timeout parameter is expressed in seconds. For more information, see Setting +//// Timeouts for Blob Service Operations. leaseID is if specified, the operation only succeeds if the resource's +//// lease is active and matches this ID. encryptionKey is optional. Specifies the encryption key to use to encrypt the +//// data provided in the request. If not specified, encryption is performed with the root account encryption key. For +//// more information, see Encryption at Rest for Azure Storage Services. encryptionKeySha256 is the SHA-256 hash of the +//// provided encryption key. Must be provided if the x-ms-encryption-key header is provided. encryptionAlgorithm is the +//// algorithm used to produce the encryption key hash. Currently, the only accepted value is "AES256". Must be provided +//// if the x-ms-encryption-key header is provided. ifModifiedSince is specify this header value to operate only on a +//// blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to +//// operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value +//// to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs +//// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +//// recorded in the analytics logs when storage analytics logging is enabled. +//func (client blobClient) Query(ctx context.Context, snapshot *string, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*QueryResponse, error) { +// if err := validate([]validation{ +// {targetValue: timeout, +// constraints: []constraint{{target: "timeout", name: null, rule: false, +// chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { +// return nil, err +// } +// req, err := client.queryPreparer(snapshot, timeout, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) +// if err != nil { +// return nil, err +// } +// resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.queryResponder}, req) +// if err != nil { +// return nil, err +// } +// return resp.(*QueryResponse), err +//} // -// // queryPreparer prepares the Query request. -// func (client blobClient) queryPreparer(snapshot *string, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (pipeline.Request, error) { -// req, err := pipeline.NewRequest("POST", client.url, nil) -// if err != nil { -// return req, pipeline.NewError(err, "failed to create request") -// } -// params := req.URL.Query() -// if snapshot != nil && len(*snapshot) > 0 { -// params.Set("snapshot", *snapshot) -// } -// if timeout != nil { -// params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) -// } -// params.Set("comp", "query") -// req.URL.RawQuery = params.Encode() -// if leaseID != nil { -// req.Header.Set("x-ms-lease-id", *leaseID) -// } -// if encryptionKey != nil { -// req.Header.Set("x-ms-encryption-key", *encryptionKey) -// } -// if encryptionKeySha256 != nil { -// req.Header.Set("x-ms-encryption-key-sha256", *encryptionKeySha256) -// } -// if encryptionAlgorithm != EncryptionAlgorithmNone { -// req.Header.Set("x-ms-encryption-algorithm", string(encryptionAlgorithm)) -// } -// if ifModifiedSince != nil { -// req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) -// } -// if ifUnmodifiedSince != nil { -// req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) -// } -// if ifMatch != nil { -// req.Header.Set("If-Match", string(*ifMatch)) -// } -// if ifNoneMatch != nil { -// req.Header.Set("If-None-Match", string(*ifNoneMatch)) -// } -// if ifTags != nil { -// req.Header.Set("x-ms-if-tags", *ifTags) -// } -// req.Header.Set("x-ms-version", ServiceVersion) -// if requestID != nil { -// req.Header.Set("x-ms-client-request-id", *requestID) -// } -// b, err := xml.Marshal(queryRequest) -// if err != nil { -// return req, pipeline.NewError(err, "failed to marshal request body") -// } -// req.Header.Set("Content-Type", "application/xml") -// err = req.SetBody(bytes.NewReader(b)) -// if err != nil { -// return req, pipeline.NewError(err, "failed to set request body") -// } -// return req, nil -// } +//// queryPreparer prepares the Query request. +//func (client blobClient) queryPreparer(snapshot *string, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +// req, err := pipeline.NewRequest("POST", client.url, nil) +// if err != nil { +// return req, pipeline.NewError(err, "failed to create request") +// } +// params := req.URL.Query() +// if snapshot != nil && len(*snapshot) > 0 { +// params.Set("snapshot", *snapshot) +// } +// if timeout != nil { +// params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) +// } +// params.Set("comp", "query") +// req.URL.RawQuery = params.Encode() +// if leaseID != nil { +// req.Header.Set("x-ms-lease-id", *leaseID) +// } +// if encryptionKey != nil { +// req.Header.Set("x-ms-encryption-key", *encryptionKey) +// } +// if encryptionKeySha256 != nil { +// req.Header.Set("x-ms-encryption-key-sha256", *encryptionKeySha256) +// } +// if encryptionAlgorithm != EncryptionAlgorithmNone { +// req.Header.Set("x-ms-encryption-algorithm", string(encryptionAlgorithm)) +// } +// if ifModifiedSince != nil { +// req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if ifUnmodifiedSince != nil { +// req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if ifMatch != nil { +// req.Header.Set("If-Match", string(*ifMatch)) +// } +// if ifNoneMatch != nil { +// req.Header.Set("If-None-Match", string(*ifNoneMatch)) +// } +// req.Header.Set("x-ms-version", ServiceVersion) +// if requestID != nil { +// req.Header.Set("x-ms-client-request-id", *requestID) +// } +// b, err := xml.Marshal(queryRequest) +// if err != nil { +// return req, pipeline.NewError(err, "failed to marshal request body") +// } +// req.Header.Set("Content-Type", "application/xml") +// err = req.SetBody(bytes.NewReader(b)) +// if err != nil { +// return req, pipeline.NewError(err, "failed to set request body") +// } +// return req, nil +//} // -// // queryResponder handles the response to the Query request. -// func (client blobClient) queryResponder(resp pipeline.Response) (pipeline.Response, error) { -// err := validateResponse(resp, http.StatusOK, http.StatusPartialContent) -// if resp == nil { -// return nil, err -// } -// return &QueryResponse{rawResponse: resp.Response()}, err -// } +//// queryResponder handles the response to the Query request. +//func (client blobClient) queryResponder(resp pipeline.Response) (pipeline.Response, error) { +// err := validateResponse(resp, http.StatusOK, http.StatusPartialContent) +// if resp == nil { +// return nil, err +// } +// return &QueryResponse{rawResponse: resp.Response()}, err +//} // ReleaseLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete // operations @@ -1280,145 +1272,146 @@ func (client blobClient) releaseLeaseResponder(resp pipeline.Response) (pipeline return &BlobReleaseLeaseResponse{rawResponse: resp.Response()}, err } -// Rename rename a blob/file. By default, the destination is overwritten and if the destination already exists and has -// a lease the lease is broken. This operation supports conditional HTTP requests. For more information, see -// [Specifying Conditional Headers for Blob Service -// Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations). -// To fail if the destination already exists, use a conditional request with If-None-Match: "*". +// TODO funky rename API +//// Rename rename a blob/file. By default, the destination is overwritten and if the destination already exists and has +//// a lease the lease is broken. This operation supports conditional HTTP requests. For more information, see +//// [Specifying Conditional Headers for Blob Service +//// Operations](https://docs.microsoft.com/en-us/rest/api/storageservices/specifying-conditional-headers-for-blob-service-operations). +//// To fail if the destination already exists, use a conditional request with If-None-Match: "*". +//// +//// renameSource is the file or directory to be renamed. The value must have the following format: +//// "/{filesysystem}/{path}". If "x-ms-properties" is specified, the properties will overwrite the existing properties; +//// otherwise, the existing properties will be preserved. timeout is the timeout parameter is expressed in seconds. For +//// more information, see Setting +//// Timeouts for Blob Service Operations. directoryProperties is optional. User-defined properties to be stored +//// with the file or directory, in the format of a comma-separated list of name and value pairs "n1=v1, n2=v2, ...", +//// where each value is base64 encoded. posixPermissions is optional and only valid if Hierarchical Namespace is enabled +//// for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may +//// be granted read, write, or execute permission. The sticky bit is also supported. Both symbolic (rwxrw-rw-) and +//// 4-digit octal notation (e.g. 0766) are supported. posixUmask is only valid if Hierarchical Namespace is enabled for +//// the account. This umask restricts permission settings for file and directory, and will only be applied when default +//// Acl does not exist in parent directory. If the umask bit has set, it means that the corresponding permission will be +//// disabled. Otherwise the corresponding permission will be determined by the permission. A 4-digit octal notation +//// (e.g. 0022) is supported here. If no umask was specified, a default umask - 0027 will be used. cacheControl is cache +//// control for given resource contentType is content type for given resource contentEncoding is content encoding for +//// given resource contentLanguage is content language for given resource contentDisposition is content disposition for +//// given resource leaseID is if specified, the operation only succeeds if the resource's lease is active and matches +//// this ID. sourceLeaseID is a lease ID for the source path. If specified, the source path must have an active lease +//// and the lease ID must match. ifModifiedSince is specify this header value to operate only on a blob if it has been +//// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if +//// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs +//// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. +//// sourceIfModifiedSince is specify this header value to operate only on a blob if it has been modified since the +//// specified date/time. sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it has not +//// been modified since the specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs with a +//// matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. +//// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics +//// logs when storage analytics logging is enabled. +//func (client blobClient) Rename(ctx context.Context, renameSource string, timeout *int32, directoryProperties *string, posixPermissions *string, posixUmask *string, cacheControl *string, contentType *string, contentEncoding *string, contentLanguage *string, contentDisposition *string, leaseID *string, sourceLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*BlobRenameResponse, error) { +// if err := validate([]validation{ +// {targetValue: timeout, +// constraints: []constraint{{target: "timeout", name: null, rule: false, +// chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { +// return nil, err +// } +// req, err := client.renamePreparer(renameSource, timeout, directoryProperties, posixPermissions, posixUmask, cacheControl, contentType, contentEncoding, contentLanguage, contentDisposition, leaseID, sourceLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) +// if err != nil { +// return nil, err +// } +// resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.renameResponder}, req) +// if err != nil { +// return nil, err +// } +// return resp.(*BlobRenameResponse), err +//} // -// renameSource is the file or directory to be renamed. The value must have the following format: -// "/{filesysystem}/{path}". If "x-ms-properties" is specified, the properties will overwrite the existing properties; -// otherwise, the existing properties will be preserved. timeout is the timeout parameter is expressed in seconds. For -// more information, see Setting -// Timeouts for Blob Service Operations. directoryProperties is optional. User-defined properties to be stored -// with the file or directory, in the format of a comma-separated list of name and value pairs "n1=v1, n2=v2, ...", -// where each value is base64 encoded. posixPermissions is optional and only valid if Hierarchical Namespace is enabled -// for the account. Sets POSIX access permissions for the file owner, the file owning group, and others. Each class may -// be granted read, write, or execute permission. The sticky bit is also supported. Both symbolic (rwxrw-rw-) and -// 4-digit octal notation (e.g. 0766) are supported. posixUmask is only valid if Hierarchical Namespace is enabled for -// the account. This umask restricts permission settings for file and directory, and will only be applied when default -// Acl does not exist in parent directory. If the umask bit has set, it means that the corresponding permission will be -// disabled. Otherwise the corresponding permission will be determined by the permission. A 4-digit octal notation -// (e.g. 0022) is supported here. If no umask was specified, a default umask - 0027 will be used. cacheControl is cache -// control for given resource contentType is content type for given resource contentEncoding is content encoding for -// given resource contentLanguage is content language for given resource contentDisposition is content disposition for -// given resource leaseID is if specified, the operation only succeeds if the resource's lease is active and matches -// this ID. sourceLeaseID is a lease ID for the source path. If specified, the source path must have an active lease -// and the lease ID must match. ifModifiedSince is specify this header value to operate only on a blob if it has been -// modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if -// it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs -// with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. -// sourceIfModifiedSince is specify this header value to operate only on a blob if it has been modified since the -// specified date/time. sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it has not -// been modified since the specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs with a -// matching value. sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. -// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics -// logs when storage analytics logging is enabled. -func (client blobClient) Rename(ctx context.Context, renameSource string, timeout *int32, directoryProperties *string, posixPermissions *string, posixUmask *string, cacheControl *string, contentType *string, contentEncoding *string, contentLanguage *string, contentDisposition *string, leaseID *string, sourceLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (*BlobRenameResponse, error) { - if err := validate([]validation{ - {targetValue: timeout, - constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { - return nil, err - } - req, err := client.renamePreparer(renameSource, timeout, directoryProperties, posixPermissions, posixUmask, cacheControl, contentType, contentEncoding, contentLanguage, contentDisposition, leaseID, sourceLeaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, requestID) - if err != nil { - return nil, err - } - resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.renameResponder}, req) - if err != nil { - return nil, err - } - return resp.(*BlobRenameResponse), err -} - -// renamePreparer prepares the Rename request. -func (client blobClient) renamePreparer(renameSource string, timeout *int32, directoryProperties *string, posixPermissions *string, posixUmask *string, cacheControl *string, contentType *string, contentEncoding *string, contentLanguage *string, contentDisposition *string, leaseID *string, sourceLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { - req, err := pipeline.NewRequest("PUT", client.url, nil) - if err != nil { - return req, pipeline.NewError(err, "failed to create request") - } - params := req.URL.Query() - if timeout != nil { - params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) - } - // if pathRenameMode != PathRenameModeNone { - // params.Set("mode", string(client.PathRenameMode)) - // } - req.URL.RawQuery = params.Encode() - req.Header.Set("x-ms-rename-source", renameSource) - if directoryProperties != nil { - req.Header.Set("x-ms-properties", *directoryProperties) - } - if posixPermissions != nil { - req.Header.Set("x-ms-permissions", *posixPermissions) - } - if posixUmask != nil { - req.Header.Set("x-ms-umask", *posixUmask) - } - if cacheControl != nil { - req.Header.Set("x-ms-cache-control", *cacheControl) - } - if contentType != nil { - req.Header.Set("x-ms-content-type", *contentType) - } - if contentEncoding != nil { - req.Header.Set("x-ms-content-encoding", *contentEncoding) - } - if contentLanguage != nil { - req.Header.Set("x-ms-content-language", *contentLanguage) - } - if contentDisposition != nil { - req.Header.Set("x-ms-content-disposition", *contentDisposition) - } - if leaseID != nil { - req.Header.Set("x-ms-lease-id", *leaseID) - } - if sourceLeaseID != nil { - req.Header.Set("x-ms-source-lease-id", *sourceLeaseID) - } - if ifModifiedSince != nil { - req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) - } - if ifUnmodifiedSince != nil { - req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) - } - if ifMatch != nil { - req.Header.Set("If-Match", string(*ifMatch)) - } - if ifNoneMatch != nil { - req.Header.Set("If-None-Match", string(*ifNoneMatch)) - } - if sourceIfModifiedSince != nil { - req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) - } - if sourceIfUnmodifiedSince != nil { - req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) - } - if sourceIfMatch != nil { - req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) - } - if sourceIfNoneMatch != nil { - req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) - } - req.Header.Set("x-ms-version", ServiceVersion) - if requestID != nil { - req.Header.Set("x-ms-client-request-id", *requestID) - } - return req, nil -} - -// renameResponder handles the response to the Rename request. -func (client blobClient) renameResponder(resp pipeline.Response) (pipeline.Response, error) { - err := validateResponse(resp, http.StatusOK, http.StatusCreated) - if resp == nil { - return nil, err - } - io.Copy(ioutil.Discard, resp.Response().Body) - resp.Response().Body.Close() - return &BlobRenameResponse{rawResponse: resp.Response()}, err -} +//// renamePreparer prepares the Rename request. +//func (client blobClient) renamePreparer(renameSource string, timeout *int32, directoryProperties *string, posixPermissions *string, posixUmask *string, cacheControl *string, contentType *string, contentEncoding *string, contentLanguage *string, contentDisposition *string, leaseID *string, sourceLeaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, requestID *string) (pipeline.Request, error) { +// req, err := pipeline.NewRequest("PUT", client.url, nil) +// if err != nil { +// return req, pipeline.NewError(err, "failed to create request") +// } +// params := req.URL.Query() +// if timeout != nil { +// params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) +// } +// if pathRenameMode != PathRenameModeNone { +// params.Set("mode", string(client.PathRenameMode)) +// } +// req.URL.RawQuery = params.Encode() +// req.Header.Set("x-ms-rename-source", renameSource) +// if directoryProperties != nil { +// req.Header.Set("x-ms-properties", *directoryProperties) +// } +// if posixPermissions != nil { +// req.Header.Set("x-ms-permissions", *posixPermissions) +// } +// if posixUmask != nil { +// req.Header.Set("x-ms-umask", *posixUmask) +// } +// if cacheControl != nil { +// req.Header.Set("x-ms-cache-control", *cacheControl) +// } +// if contentType != nil { +// req.Header.Set("x-ms-content-type", *contentType) +// } +// if contentEncoding != nil { +// req.Header.Set("x-ms-content-encoding", *contentEncoding) +// } +// if contentLanguage != nil { +// req.Header.Set("x-ms-content-language", *contentLanguage) +// } +// if contentDisposition != nil { +// req.Header.Set("x-ms-content-disposition", *contentDisposition) +// } +// if leaseID != nil { +// req.Header.Set("x-ms-lease-id", *leaseID) +// } +// if sourceLeaseID != nil { +// req.Header.Set("x-ms-source-lease-id", *sourceLeaseID) +// } +// if ifModifiedSince != nil { +// req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if ifUnmodifiedSince != nil { +// req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if ifMatch != nil { +// req.Header.Set("If-Match", string(*ifMatch)) +// } +// if ifNoneMatch != nil { +// req.Header.Set("If-None-Match", string(*ifNoneMatch)) +// } +// if sourceIfModifiedSince != nil { +// req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if sourceIfUnmodifiedSince != nil { +// req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) +// } +// if sourceIfMatch != nil { +// req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) +// } +// if sourceIfNoneMatch != nil { +// req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) +// } +// req.Header.Set("x-ms-version", ServiceVersion) +// if requestID != nil { +// req.Header.Set("x-ms-client-request-id", *requestID) +// } +// return req, nil +//} +// +//// renameResponder handles the response to the Rename request. +//func (client blobClient) renameResponder(resp pipeline.Response) (pipeline.Response, error) { +// err := validateResponse(resp, http.StatusOK, http.StatusCreated) +// if resp == nil { +// return nil, err +// } +// io.Copy(ioutil.Discard, resp.Response().Body) +// resp.Response().Body.Close() +// return &BlobRenameResponse{rawResponse: resp.Response()}, err +//} // RenewLease [Update] The Lease Blob operation establishes and manages a lock on a blob for write and delete // operations @@ -1873,16 +1866,15 @@ func (client blobClient) setMetadataResponder(resp pipeline.Response) (pipeline. // transactionalContentCrc64 is specify the transactional crc64 for the body, to be validated by the service. requestID // is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when // storage analytics logging is enabled. ifTags is specify a SQL where clause on blob tags to operate only on blobs -// with a matching value. leaseID is if specified, the operation only succeeds if the resource's lease is active and -// matches this ID. tags is blob tags -func (client blobClient) SetTags(ctx context.Context, timeout *int32, versionID *string, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, requestID *string, ifTags *string, leaseID *string, tags *BlobTags) (*BlobSetTagsResponse, error) { +// with a matching value. tags is blob tags +func (client blobClient) SetTags(ctx context.Context, timeout *int32, versionID *string, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, requestID *string, ifTags *string, tags *BlobTags) (*BlobSetTagsResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.setTagsPreparer(timeout, versionID, transactionalContentMD5, transactionalContentCrc64, requestID, ifTags, leaseID, tags) + req, err := client.setTagsPreparer(timeout, versionID, transactionalContentMD5, transactionalContentCrc64, requestID, ifTags, tags) if err != nil { return nil, err } @@ -1894,7 +1886,7 @@ func (client blobClient) SetTags(ctx context.Context, timeout *int32, versionID } // setTagsPreparer prepares the SetTags request. -func (client blobClient) setTagsPreparer(timeout *int32, versionID *string, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, requestID *string, ifTags *string, leaseID *string, tags *BlobTags) (pipeline.Request, error) { +func (client blobClient) setTagsPreparer(timeout *int32, versionID *string, transactionalContentMD5 []byte, transactionalContentCrc64 []byte, requestID *string, ifTags *string, tags *BlobTags) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -1921,9 +1913,6 @@ func (client blobClient) setTagsPreparer(timeout *int32, versionID *string, tran if ifTags != nil { req.Header.Set("x-ms-if-tags", *ifTags) } - if leaseID != nil { - req.Header.Set("x-ms-lease-id", *leaseID) - } b, err := xml.Marshal(tags) if err != nil { return req, pipeline.NewError(err, "failed to marshal request body") @@ -1963,16 +1952,15 @@ func (client blobClient) setTagsResponder(resp pipeline.Response) (pipeline.Resp // Timeouts for Blob Service Operations. rehydratePriority is optional: Indicates the priority with which to // rehydrate an archived blob. requestID is provides a client-generated, opaque value with a 1 KB character limit that // is recorded in the analytics logs when storage analytics logging is enabled. leaseID is if specified, the operation -// only succeeds if the resource's lease is active and matches this ID. ifTags is specify a SQL where clause on blob -// tags to operate only on blobs with a matching value. -func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, snapshot *string, versionID *string, timeout *int32, rehydratePriority RehydratePriorityType, requestID *string, leaseID *string, ifTags *string) (*BlobSetTierResponse, error) { +// only succeeds if the resource's lease is active and matches this ID. +func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, snapshot *string, versionID *string, timeout *int32, rehydratePriority RehydratePriorityType, requestID *string, leaseID *string) (*BlobSetTierResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.setTierPreparer(tier, snapshot, versionID, timeout, rehydratePriority, requestID, leaseID, ifTags) + req, err := client.setTierPreparer(tier, snapshot, versionID, timeout, rehydratePriority, requestID, leaseID) if err != nil { return nil, err } @@ -1984,7 +1972,7 @@ func (client blobClient) SetTier(ctx context.Context, tier AccessTierType, snaps } // setTierPreparer prepares the SetTier request. -func (client blobClient) setTierPreparer(tier AccessTierType, snapshot *string, versionID *string, timeout *int32, rehydratePriority RehydratePriorityType, requestID *string, leaseID *string, ifTags *string) (pipeline.Request, error) { +func (client blobClient) setTierPreparer(tier AccessTierType, snapshot *string, versionID *string, timeout *int32, rehydratePriority RehydratePriorityType, requestID *string, leaseID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -2012,9 +2000,6 @@ func (client blobClient) setTierPreparer(tier AccessTierType, snapshot *string, if leaseID != nil { req.Header.Set("x-ms-lease-id", *leaseID) } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } return req, nil } diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go index d350440ac..0008273ab 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_block_blob.go @@ -275,188 +275,6 @@ func (client blockBlobClient) getBlockListResponder(resp pipeline.Response) (pip return result, nil } -// PutBlobFromURL the Put Blob from URL operation creates a new Block Blob where the contents of the blob are read from -// a given URL. This API is supported beginning with the 2020-04-08 version. Partial updates are not supported with -// Put Blob from URL; the content of an existing blob is overwritten with the content of the new blob. To perform -// partial updates to a block blob’s contents using a source URL, use the Put Block from URL API in conjunction with -// Put Block List. -// -// contentLength is the length of the request. copySource is specifies the name of the source page blob snapshot. This -// value is a URL of up to 2 KB in length that specifies a page blob snapshot. The value should be URL-encoded as it -// would appear in a request URI. The source blob must either be public or must be authenticated via a shared access -// signature. timeout is the timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. transactionalContentMD5 is specify the transactional md5 for the body, to -// be validated by the service. blobContentType is optional. Sets the blob's content type. If specified, this property -// is stored with the blob and returned with a read request. blobContentEncoding is optional. Sets the blob's content -// encoding. If specified, this property is stored with the blob and returned with a read request. blobContentLanguage -// is optional. Set the blob's content language. If specified, this property is stored with the blob and returned with -// a read request. blobContentMD5 is optional. An MD5 hash of the blob content. Note that this hash is not validated, -// as the hashes for the individual blocks were validated when each was uploaded. blobCacheControl is optional. Sets -// the blob's cache control. If specified, this property is stored with the blob and returned with a read request. -// metadata is optional. Specifies a user-defined name-value pair associated with the blob. If no name-value pairs are -// specified, the operation will copy the metadata from the source blob or file to the destination blob. If one or more -// name-value pairs are specified, the destination blob is created with the specified metadata, and metadata is not -// copied from the source blob or file. Note that beginning with version 2009-09-19, metadata names must adhere to the -// naming rules for C# identifiers. See Naming and Referencing Containers, Blobs, and Metadata for more information. -// leaseID is if specified, the operation only succeeds if the resource's lease is active and matches this ID. -// blobContentDisposition is optional. Sets the blob's Content-Disposition header. encryptionKey is optional. Specifies -// the encryption key to use to encrypt the data provided in the request. If not specified, encryption is performed -// with the root account encryption key. For more information, see Encryption at Rest for Azure Storage Services. -// encryptionKeySha256 is the SHA-256 hash of the provided encryption key. Must be provided if the x-ms-encryption-key -// header is provided. encryptionAlgorithm is the algorithm used to produce the encryption key hash. Currently, the -// only accepted value is "AES256". Must be provided if the x-ms-encryption-key header is provided. encryptionScope is -// optional. Version 2019-07-07 and later. Specifies the name of the encryption scope to use to encrypt the data -// provided in the request. If not specified, encryption is performed with the default account encryption scope. For -// more information, see Encryption at Rest for Azure Storage Services. tier is optional. Indicates the tier to be set -// on the blob. ifModifiedSince is specify this header value to operate only on a blob if it has been modified since -// the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been -// modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching -// value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. ifTags is specify a -// SQL where clause on blob tags to operate only on blobs with a matching value. sourceIfModifiedSince is specify this -// header value to operate only on a blob if it has been modified since the specified date/time. -// sourceIfUnmodifiedSince is specify this header value to operate only on a blob if it has not been modified since the -// specified date/time. sourceIfMatch is specify an ETag value to operate only on blobs with a matching value. -// sourceIfNoneMatch is specify an ETag value to operate only on blobs without a matching value. sourceIfTags is -// specify a SQL where clause on blob tags to operate only on blobs with a matching value. requestID is provides a -// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage -// analytics logging is enabled. sourceContentMD5 is specify the md5 calculated for the range of bytes that must be -// read from the copy source. blobTagsString is optional. Used to set blob tags in various blob operations. -// copySourceBlobProperties is optional, default is true. Indicates if properties from the source blob should be -// copied. -func (client blockBlobClient) PutBlobFromURL(ctx context.Context, contentLength int64, copySource string, timeout *int32, transactionalContentMD5 []byte, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, tier AccessTierType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, sourceIfTags *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string, copySourceBlobProperties *bool) (*BlockBlobPutBlobFromURLResponse, error) { - if err := validate([]validation{ - {targetValue: timeout, - constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { - return nil, err - } - req, err := client.putBlobFromURLPreparer(contentLength, copySource, timeout, transactionalContentMD5, blobContentType, blobContentEncoding, blobContentLanguage, blobContentMD5, blobCacheControl, metadata, leaseID, blobContentDisposition, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, tier, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, sourceIfModifiedSince, sourceIfUnmodifiedSince, sourceIfMatch, sourceIfNoneMatch, sourceIfTags, requestID, sourceContentMD5, blobTagsString, copySourceBlobProperties) - if err != nil { - return nil, err - } - resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.putBlobFromURLResponder}, req) - if err != nil { - return nil, err - } - return resp.(*BlockBlobPutBlobFromURLResponse), err -} - -// putBlobFromURLPreparer prepares the PutBlobFromURL request. -func (client blockBlobClient) putBlobFromURLPreparer(contentLength int64, copySource string, timeout *int32, transactionalContentMD5 []byte, blobContentType *string, blobContentEncoding *string, blobContentLanguage *string, blobContentMD5 []byte, blobCacheControl *string, metadata map[string]string, leaseID *string, blobContentDisposition *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, tier AccessTierType, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, sourceIfModifiedSince *time.Time, sourceIfUnmodifiedSince *time.Time, sourceIfMatch *ETag, sourceIfNoneMatch *ETag, sourceIfTags *string, requestID *string, sourceContentMD5 []byte, blobTagsString *string, copySourceBlobProperties *bool) (pipeline.Request, error) { - req, err := pipeline.NewRequest("PUT", client.url, nil) - if err != nil { - return req, pipeline.NewError(err, "failed to create request") - } - params := req.URL.Query() - if timeout != nil { - params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) - } - req.URL.RawQuery = params.Encode() - if transactionalContentMD5 != nil { - req.Header.Set("Content-MD5", base64.StdEncoding.EncodeToString(transactionalContentMD5)) - } - req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - if blobContentType != nil { - req.Header.Set("x-ms-blob-content-type", *blobContentType) - } - if blobContentEncoding != nil { - req.Header.Set("x-ms-blob-content-encoding", *blobContentEncoding) - } - if blobContentLanguage != nil { - req.Header.Set("x-ms-blob-content-language", *blobContentLanguage) - } - if blobContentMD5 != nil { - req.Header.Set("x-ms-blob-content-md5", base64.StdEncoding.EncodeToString(blobContentMD5)) - } - if blobCacheControl != nil { - req.Header.Set("x-ms-blob-cache-control", *blobCacheControl) - } - if metadata != nil { - for k, v := range metadata { - req.Header.Set("x-ms-meta-"+k, v) - } - } - if leaseID != nil { - req.Header.Set("x-ms-lease-id", *leaseID) - } - if blobContentDisposition != nil { - req.Header.Set("x-ms-blob-content-disposition", *blobContentDisposition) - } - if encryptionKey != nil { - req.Header.Set("x-ms-encryption-key", *encryptionKey) - } - if encryptionKeySha256 != nil { - req.Header.Set("x-ms-encryption-key-sha256", *encryptionKeySha256) - } - if encryptionAlgorithm != EncryptionAlgorithmNone { - req.Header.Set("x-ms-encryption-algorithm", string(encryptionAlgorithm)) - } - if encryptionScope != nil { - req.Header.Set("x-ms-encryption-scope", *encryptionScope) - } - if tier != AccessTierNone { - req.Header.Set("x-ms-access-tier", string(tier)) - } - if ifModifiedSince != nil { - req.Header.Set("If-Modified-Since", (*ifModifiedSince).In(gmt).Format(time.RFC1123)) - } - if ifUnmodifiedSince != nil { - req.Header.Set("If-Unmodified-Since", (*ifUnmodifiedSince).In(gmt).Format(time.RFC1123)) - } - if ifMatch != nil { - req.Header.Set("If-Match", string(*ifMatch)) - } - if ifNoneMatch != nil { - req.Header.Set("If-None-Match", string(*ifNoneMatch)) - } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } - if sourceIfModifiedSince != nil { - req.Header.Set("x-ms-source-if-modified-since", (*sourceIfModifiedSince).In(gmt).Format(time.RFC1123)) - } - if sourceIfUnmodifiedSince != nil { - req.Header.Set("x-ms-source-if-unmodified-since", (*sourceIfUnmodifiedSince).In(gmt).Format(time.RFC1123)) - } - if sourceIfMatch != nil { - req.Header.Set("x-ms-source-if-match", string(*sourceIfMatch)) - } - if sourceIfNoneMatch != nil { - req.Header.Set("x-ms-source-if-none-match", string(*sourceIfNoneMatch)) - } - if sourceIfTags != nil { - req.Header.Set("x-ms-source-if-tags", *sourceIfTags) - } - req.Header.Set("x-ms-version", ServiceVersion) - if requestID != nil { - req.Header.Set("x-ms-client-request-id", *requestID) - } - if sourceContentMD5 != nil { - req.Header.Set("x-ms-source-content-md5", base64.StdEncoding.EncodeToString(sourceContentMD5)) - } - if blobTagsString != nil { - req.Header.Set("x-ms-tags", *blobTagsString) - } - req.Header.Set("x-ms-copy-source", copySource) - if copySourceBlobProperties != nil { - req.Header.Set("x-ms-copy-source-blob-properties", strconv.FormatBool(*copySourceBlobProperties)) - } - req.Header.Set("x-ms-blob-type", "BlockBlob") - return req, nil -} - -// putBlobFromURLResponder handles the response to the PutBlobFromURL request. -func (client blockBlobClient) putBlobFromURLResponder(resp pipeline.Response) (pipeline.Response, error) { - err := validateResponse(resp, http.StatusOK, http.StatusCreated) - if resp == nil { - return nil, err - } - io.Copy(ioutil.Discard, resp.Response().Body) - resp.Response().Body.Close() - return &BlockBlobPutBlobFromURLResponse{rawResponse: resp.Response()}, err -} - // StageBlock the Stage Block operation creates a new block to be committed as part of a blob // // blockID is a valid Base64 string value that identifies the block. Prior to encoding, the string must be less than or diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go index 24b9f1dd5..d697e37d7 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_client.go @@ -10,7 +10,7 @@ import ( const ( // ServiceVersion specifies the version of the operations used in this package. - ServiceVersion = "2020-04-08" + ServiceVersion = "2019-12-12" ) // managementClient is the base client for Azblob. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go index 2e2f176e5..88ff7df31 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_container.go @@ -823,67 +823,6 @@ func (client containerClient) releaseLeaseResponder(resp pipeline.Response) (pip return &ContainerReleaseLeaseResponse{rawResponse: resp.Response()}, err } -// Rename renames an existing container. -// -// sourceContainerName is required. Specifies the name of the container to rename. timeout is the timeout parameter is -// expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB -// character limit that is recorded in the analytics logs when storage analytics logging is enabled. sourceLeaseID is a -// lease ID for the source path. If specified, the source path must have an active lease and the lease ID must match. -func (client containerClient) Rename(ctx context.Context, sourceContainerName string, timeout *int32, requestID *string, sourceLeaseID *string) (*ContainerRenameResponse, error) { - if err := validate([]validation{ - {targetValue: timeout, - constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { - return nil, err - } - req, err := client.renamePreparer(sourceContainerName, timeout, requestID, sourceLeaseID) - if err != nil { - return nil, err - } - resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.renameResponder}, req) - if err != nil { - return nil, err - } - return resp.(*ContainerRenameResponse), err -} - -// renamePreparer prepares the Rename request. -func (client containerClient) renamePreparer(sourceContainerName string, timeout *int32, requestID *string, sourceLeaseID *string) (pipeline.Request, error) { - req, err := pipeline.NewRequest("PUT", client.url, nil) - if err != nil { - return req, pipeline.NewError(err, "failed to create request") - } - params := req.URL.Query() - if timeout != nil { - params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) - } - params.Set("restype", "container") - params.Set("comp", "rename") - req.URL.RawQuery = params.Encode() - req.Header.Set("x-ms-version", ServiceVersion) - if requestID != nil { - req.Header.Set("x-ms-client-request-id", *requestID) - } - req.Header.Set("x-ms-source-container-name", sourceContainerName) - if sourceLeaseID != nil { - req.Header.Set("x-ms-source-lease-id", *sourceLeaseID) - } - return req, nil -} - -// renameResponder handles the response to the Rename request. -func (client containerClient) renameResponder(resp pipeline.Response) (pipeline.Response, error) { - err := validateResponse(resp, http.StatusOK) - if resp == nil { - return nil, err - } - io.Copy(ioutil.Discard, resp.Response().Body) - resp.Response().Body.Close() - return &ContainerRenameResponse{rawResponse: resp.Response()}, err -} - // RenewLease [Update] establishes and manages a lock on a container for delete operations. The lock duration can be 15 // to 60 seconds, or can be infinite // @@ -958,8 +897,8 @@ func (client containerClient) renewLeaseResponder(resp pipeline.Response) (pipel // href="https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/setting-timeouts-for-blob-service-operations">Setting // Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB // character limit that is recorded in the analytics logs when storage analytics logging is enabled. -// deletedContainerName is optional. Version 2019-12-12 and later. Specifies the name of the deleted container to -// restore. deletedContainerVersion is optional. Version 2019-12-12 and later. Specifies the version of the deleted +// deletedContainerName is optional. Version 2019-12-12 and laster. Specifies the name of the deleted container to +// restore. deletedContainerVersion is optional. Version 2019-12-12 and laster. Specifies the version of the deleted // container to restore. func (client containerClient) Restore(ctx context.Context, timeout *int32, requestID *string, deletedContainerName *string, deletedContainerVersion *string) (*ContainerRestoreResponse, error) { if err := validate([]validation{ @@ -1170,63 +1109,3 @@ func (client containerClient) setMetadataResponder(resp pipeline.Response) (pipe resp.Response().Body.Close() return &ContainerSetMetadataResponse{rawResponse: resp.Response()}, err } - -// SubmitBatch the Batch operation allows multiple API calls to be embedded into a single HTTP request. -// -// body is initial data body will be closed upon successful return. Callers should ensure closure when receiving an -// error.contentLength is the length of the request. multipartContentType is required. The value of this header must be -// multipart/mixed with a batch boundary. Example header value: multipart/mixed; boundary=batch_ timeout is the -// timeout parameter is expressed in seconds. For more information, see Setting -// Timeouts for Blob Service Operations. requestID is provides a client-generated, opaque value with a 1 KB -// character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client containerClient) SubmitBatch(ctx context.Context, body io.ReadSeeker, contentLength int64, multipartContentType string, timeout *int32, requestID *string) (*SubmitBatchResponse, error) { - if err := validate([]validation{ - {targetValue: body, - constraints: []constraint{{target: "body", name: null, rule: true, chain: nil}}}, - {targetValue: timeout, - constraints: []constraint{{target: "timeout", name: null, rule: false, - chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { - return nil, err - } - req, err := client.submitBatchPreparer(body, contentLength, multipartContentType, timeout, requestID) - if err != nil { - return nil, err - } - resp, err := client.Pipeline().Do(ctx, responderPolicyFactory{responder: client.submitBatchResponder}, req) - if err != nil { - return nil, err - } - return resp.(*SubmitBatchResponse), err -} - -// submitBatchPreparer prepares the SubmitBatch request. -func (client containerClient) submitBatchPreparer(body io.ReadSeeker, contentLength int64, multipartContentType string, timeout *int32, requestID *string) (pipeline.Request, error) { - req, err := pipeline.NewRequest("POST", client.url, body) - if err != nil { - return req, pipeline.NewError(err, "failed to create request") - } - params := req.URL.Query() - if timeout != nil { - params.Set("timeout", strconv.FormatInt(int64(*timeout), 10)) - } - params.Set("restype", "container") - params.Set("comp", "batch") - req.URL.RawQuery = params.Encode() - req.Header.Set("Content-Length", strconv.FormatInt(contentLength, 10)) - req.Header.Set("Content-Type", multipartContentType) - req.Header.Set("x-ms-version", ServiceVersion) - if requestID != nil { - req.Header.Set("x-ms-client-request-id", *requestID) - } - return req, nil -} - -// submitBatchResponder handles the response to the SubmitBatch request. -func (client containerClient) submitBatchResponder(resp pipeline.Response) (pipeline.Response, error) { - err := validateResponse(resp, http.StatusOK, http.StatusAccepted) - if resp == nil { - return nil, err - } - return &SubmitBatchResponse{rawResponse: resp.Response()}, err -} diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go index d3a9084cc..78f467c40 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_models.go @@ -174,21 +174,6 @@ func PossibleArchiveStatusTypeValues() []ArchiveStatusType { return []ArchiveStatusType{ArchiveStatusNone, ArchiveStatusRehydratePendingToCool, ArchiveStatusRehydratePendingToHot} } -// BlobDeleteType enumerates the values for blob delete type. -type BlobDeleteType string - -const ( - // BlobDeleteNone represents an empty BlobDeleteType. - BlobDeleteNone BlobDeleteType = "" - // BlobDeletePermanent ... - BlobDeletePermanent BlobDeleteType = "Permanent" -) - -// PossibleBlobDeleteTypeValues returns an array of possible values for the BlobDeleteType const type. -func PossibleBlobDeleteTypeValues() []BlobDeleteType { - return []BlobDeleteType{BlobDeleteNone, BlobDeletePermanent} -} - // BlobExpiryOptionsType enumerates the values for blob expiry options type. type BlobExpiryOptionsType string @@ -494,8 +479,6 @@ func PossiblePublicAccessTypeValues() []PublicAccessType { type QueryFormatType string const ( - // QueryFormatArrow ... - QueryFormatArrow QueryFormatType = "arrow" // QueryFormatDelimited ... QueryFormatDelimited QueryFormatType = "delimited" // QueryFormatJSON ... @@ -506,7 +489,7 @@ const ( // PossibleQueryFormatTypeValues returns an array of possible values for the QueryFormatType const type. func PossibleQueryFormatTypeValues() []QueryFormatType { - return []QueryFormatType{QueryFormatArrow, QueryFormatDelimited, QueryFormatJSON, QueryFormatNone} + return []QueryFormatType{QueryFormatDelimited, QueryFormatJSON, QueryFormatNone} } // RehydratePriorityType enumerates the values for rehydrate priority type. @@ -600,8 +583,6 @@ const ( StorageErrorCodeBlobArchived StorageErrorCodeType = "BlobArchived" // StorageErrorCodeBlobBeingRehydrated ... StorageErrorCodeBlobBeingRehydrated StorageErrorCodeType = "BlobBeingRehydrated" - // StorageErrorCodeBlobImmutableDueToPolicy ... - StorageErrorCodeBlobImmutableDueToPolicy StorageErrorCodeType = "BlobImmutableDueToPolicy" // StorageErrorCodeBlobNotArchived ... StorageErrorCodeBlobNotArchived StorageErrorCodeType = "BlobNotArchived" // StorageErrorCodeBlobNotFound ... @@ -802,7 +783,7 @@ const ( // PossibleStorageErrorCodeTypeValues returns an array of possible values for the StorageErrorCodeType const type. func PossibleStorageErrorCodeTypeValues() []StorageErrorCodeType { - return []StorageErrorCodeType{StorageErrorCodeAccountAlreadyExists, StorageErrorCodeAccountBeingCreated, StorageErrorCodeAccountIsDisabled, StorageErrorCodeAppendPositionConditionNotMet, StorageErrorCodeAuthenticationFailed, StorageErrorCodeAuthorizationFailure, StorageErrorCodeAuthorizationPermissionMismatch, StorageErrorCodeAuthorizationProtocolMismatch, StorageErrorCodeAuthorizationResourceTypeMismatch, StorageErrorCodeAuthorizationServiceMismatch, StorageErrorCodeAuthorizationSourceIPMismatch, StorageErrorCodeBlobAlreadyExists, StorageErrorCodeBlobArchived, StorageErrorCodeBlobBeingRehydrated, StorageErrorCodeBlobImmutableDueToPolicy, StorageErrorCodeBlobNotArchived, StorageErrorCodeBlobNotFound, StorageErrorCodeBlobOverwritten, StorageErrorCodeBlobTierInadequateForContentLength, StorageErrorCodeBlockCountExceedsLimit, StorageErrorCodeBlockListTooLong, StorageErrorCodeCannotChangeToLowerTier, StorageErrorCodeCannotVerifyCopySource, StorageErrorCodeConditionHeadersNotSupported, StorageErrorCodeConditionNotMet, StorageErrorCodeContainerAlreadyExists, StorageErrorCodeContainerBeingDeleted, StorageErrorCodeContainerDisabled, StorageErrorCodeContainerNotFound, StorageErrorCodeContentLengthLargerThanTierLimit, StorageErrorCodeCopyAcrossAccountsNotSupported, StorageErrorCodeCopyIDMismatch, StorageErrorCodeEmptyMetadataKey, StorageErrorCodeFeatureVersionMismatch, StorageErrorCodeIncrementalCopyBlobMismatch, StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, StorageErrorCodeIncrementalCopySourceMustBeSnapshot, StorageErrorCodeInfiniteLeaseDurationRequired, StorageErrorCodeInsufficientAccountPermissions, StorageErrorCodeInternalError, StorageErrorCodeInvalidAuthenticationInfo, StorageErrorCodeInvalidBlobOrBlock, StorageErrorCodeInvalidBlobTier, StorageErrorCodeInvalidBlobType, StorageErrorCodeInvalidBlockID, StorageErrorCodeInvalidBlockList, StorageErrorCodeInvalidHeaderValue, StorageErrorCodeInvalidHTTPVerb, StorageErrorCodeInvalidInput, StorageErrorCodeInvalidMd5, StorageErrorCodeInvalidMetadata, StorageErrorCodeInvalidOperation, StorageErrorCodeInvalidPageRange, StorageErrorCodeInvalidQueryParameterValue, StorageErrorCodeInvalidRange, StorageErrorCodeInvalidResourceName, StorageErrorCodeInvalidSourceBlobType, StorageErrorCodeInvalidSourceBlobURL, StorageErrorCodeInvalidURI, StorageErrorCodeInvalidVersionForPageBlobOperation, StorageErrorCodeInvalidXMLDocument, StorageErrorCodeInvalidXMLNodeValue, StorageErrorCodeLeaseAlreadyBroken, StorageErrorCodeLeaseAlreadyPresent, StorageErrorCodeLeaseIDMismatchWithBlobOperation, StorageErrorCodeLeaseIDMismatchWithContainerOperation, StorageErrorCodeLeaseIDMismatchWithLeaseOperation, StorageErrorCodeLeaseIDMissing, StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, StorageErrorCodeLeaseLost, StorageErrorCodeLeaseNotPresentWithBlobOperation, StorageErrorCodeLeaseNotPresentWithContainerOperation, StorageErrorCodeLeaseNotPresentWithLeaseOperation, StorageErrorCodeMaxBlobSizeConditionNotMet, StorageErrorCodeMd5Mismatch, StorageErrorCodeMetadataTooLarge, StorageErrorCodeMissingContentLengthHeader, StorageErrorCodeMissingRequiredHeader, StorageErrorCodeMissingRequiredQueryParameter, StorageErrorCodeMissingRequiredXMLNode, StorageErrorCodeMultipleConditionHeadersNotSupported, StorageErrorCodeNoAuthenticationInformation, StorageErrorCodeNone, StorageErrorCodeNoPendingCopyOperation, StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, StorageErrorCodeOperationTimedOut, StorageErrorCodeOutOfRangeInput, StorageErrorCodeOutOfRangeQueryParameterValue, StorageErrorCodePendingCopyOperation, StorageErrorCodePreviousSnapshotCannotBeNewer, StorageErrorCodePreviousSnapshotNotFound, StorageErrorCodePreviousSnapshotOperationNotSupported, StorageErrorCodeRequestBodyTooLarge, StorageErrorCodeRequestURLFailedToParse, StorageErrorCodeResourceAlreadyExists, StorageErrorCodeResourceNotFound, StorageErrorCodeResourceTypeMismatch, StorageErrorCodeSequenceNumberConditionNotMet, StorageErrorCodeSequenceNumberIncrementTooLarge, StorageErrorCodeServerBusy, StorageErrorCodeSnaphotOperationRateExceeded, StorageErrorCodeSnapshotCountExceeded, StorageErrorCodeSnapshotsPresent, StorageErrorCodeSourceConditionNotMet, StorageErrorCodeSystemInUse, StorageErrorCodeTargetConditionNotMet, StorageErrorCodeUnauthorizedBlobOverwrite, StorageErrorCodeUnsupportedHeader, StorageErrorCodeUnsupportedHTTPVerb, StorageErrorCodeUnsupportedQueryParameter, StorageErrorCodeUnsupportedXMLNode} + return []StorageErrorCodeType{StorageErrorCodeAccountAlreadyExists, StorageErrorCodeAccountBeingCreated, StorageErrorCodeAccountIsDisabled, StorageErrorCodeAppendPositionConditionNotMet, StorageErrorCodeAuthenticationFailed, StorageErrorCodeAuthorizationFailure, StorageErrorCodeAuthorizationPermissionMismatch, StorageErrorCodeAuthorizationProtocolMismatch, StorageErrorCodeAuthorizationResourceTypeMismatch, StorageErrorCodeAuthorizationServiceMismatch, StorageErrorCodeAuthorizationSourceIPMismatch, StorageErrorCodeBlobAlreadyExists, StorageErrorCodeBlobArchived, StorageErrorCodeBlobBeingRehydrated, StorageErrorCodeBlobNotArchived, StorageErrorCodeBlobNotFound, StorageErrorCodeBlobOverwritten, StorageErrorCodeBlobTierInadequateForContentLength, StorageErrorCodeBlockCountExceedsLimit, StorageErrorCodeBlockListTooLong, StorageErrorCodeCannotChangeToLowerTier, StorageErrorCodeCannotVerifyCopySource, StorageErrorCodeConditionHeadersNotSupported, StorageErrorCodeConditionNotMet, StorageErrorCodeContainerAlreadyExists, StorageErrorCodeContainerBeingDeleted, StorageErrorCodeContainerDisabled, StorageErrorCodeContainerNotFound, StorageErrorCodeContentLengthLargerThanTierLimit, StorageErrorCodeCopyAcrossAccountsNotSupported, StorageErrorCodeCopyIDMismatch, StorageErrorCodeEmptyMetadataKey, StorageErrorCodeFeatureVersionMismatch, StorageErrorCodeIncrementalCopyBlobMismatch, StorageErrorCodeIncrementalCopyOfEralierVersionSnapshotNotAllowed, StorageErrorCodeIncrementalCopySourceMustBeSnapshot, StorageErrorCodeInfiniteLeaseDurationRequired, StorageErrorCodeInsufficientAccountPermissions, StorageErrorCodeInternalError, StorageErrorCodeInvalidAuthenticationInfo, StorageErrorCodeInvalidBlobOrBlock, StorageErrorCodeInvalidBlobTier, StorageErrorCodeInvalidBlobType, StorageErrorCodeInvalidBlockID, StorageErrorCodeInvalidBlockList, StorageErrorCodeInvalidHeaderValue, StorageErrorCodeInvalidHTTPVerb, StorageErrorCodeInvalidInput, StorageErrorCodeInvalidMd5, StorageErrorCodeInvalidMetadata, StorageErrorCodeInvalidOperation, StorageErrorCodeInvalidPageRange, StorageErrorCodeInvalidQueryParameterValue, StorageErrorCodeInvalidRange, StorageErrorCodeInvalidResourceName, StorageErrorCodeInvalidSourceBlobType, StorageErrorCodeInvalidSourceBlobURL, StorageErrorCodeInvalidURI, StorageErrorCodeInvalidVersionForPageBlobOperation, StorageErrorCodeInvalidXMLDocument, StorageErrorCodeInvalidXMLNodeValue, StorageErrorCodeLeaseAlreadyBroken, StorageErrorCodeLeaseAlreadyPresent, StorageErrorCodeLeaseIDMismatchWithBlobOperation, StorageErrorCodeLeaseIDMismatchWithContainerOperation, StorageErrorCodeLeaseIDMismatchWithLeaseOperation, StorageErrorCodeLeaseIDMissing, StorageErrorCodeLeaseIsBreakingAndCannotBeAcquired, StorageErrorCodeLeaseIsBreakingAndCannotBeChanged, StorageErrorCodeLeaseIsBrokenAndCannotBeRenewed, StorageErrorCodeLeaseLost, StorageErrorCodeLeaseNotPresentWithBlobOperation, StorageErrorCodeLeaseNotPresentWithContainerOperation, StorageErrorCodeLeaseNotPresentWithLeaseOperation, StorageErrorCodeMaxBlobSizeConditionNotMet, StorageErrorCodeMd5Mismatch, StorageErrorCodeMetadataTooLarge, StorageErrorCodeMissingContentLengthHeader, StorageErrorCodeMissingRequiredHeader, StorageErrorCodeMissingRequiredQueryParameter, StorageErrorCodeMissingRequiredXMLNode, StorageErrorCodeMultipleConditionHeadersNotSupported, StorageErrorCodeNoAuthenticationInformation, StorageErrorCodeNone, StorageErrorCodeNoPendingCopyOperation, StorageErrorCodeOperationNotAllowedOnIncrementalCopyBlob, StorageErrorCodeOperationTimedOut, StorageErrorCodeOutOfRangeInput, StorageErrorCodeOutOfRangeQueryParameterValue, StorageErrorCodePendingCopyOperation, StorageErrorCodePreviousSnapshotCannotBeNewer, StorageErrorCodePreviousSnapshotNotFound, StorageErrorCodePreviousSnapshotOperationNotSupported, StorageErrorCodeRequestBodyTooLarge, StorageErrorCodeRequestURLFailedToParse, StorageErrorCodeResourceAlreadyExists, StorageErrorCodeResourceNotFound, StorageErrorCodeResourceTypeMismatch, StorageErrorCodeSequenceNumberConditionNotMet, StorageErrorCodeSequenceNumberIncrementTooLarge, StorageErrorCodeServerBusy, StorageErrorCodeSnaphotOperationRateExceeded, StorageErrorCodeSnapshotCountExceeded, StorageErrorCodeSnapshotsPresent, StorageErrorCodeSourceConditionNotMet, StorageErrorCodeSystemInUse, StorageErrorCodeTargetConditionNotMet, StorageErrorCodeUnauthorizedBlobOverwrite, StorageErrorCodeUnsupportedHeader, StorageErrorCodeUnsupportedHTTPVerb, StorageErrorCodeUnsupportedQueryParameter, StorageErrorCodeUnsupportedXMLNode} } // SyncCopyStatusType enumerates the values for sync copy status type. @@ -1277,21 +1258,6 @@ func (absr AppendBlobSealResponse) Version() string { return absr.rawResponse.Header.Get("x-ms-version") } -// ArrowConfiguration - arrow configuration -type ArrowConfiguration struct { - Schema []ArrowField `xml:"Schema>Field"` -} - -// ArrowField - field of an arrow schema -type ArrowField struct { - // XMLName is used for marshalling and is subject to removal in a future release. - XMLName xml.Name `xml:"Field"` - Type string `xml:"Type"` - Name *string `xml:"Name"` - Precision *int32 `xml:"Precision"` - Scale *int32 `xml:"Scale"` -} - // BlobAbortCopyFromURLResponse ... type BlobAbortCopyFromURLResponse struct { rawResponse *http.Response @@ -2263,19 +2229,6 @@ func (bgpr BlobGetPropertiesResponse) IsServerEncrypted() string { return bgpr.rawResponse.Header.Get("x-ms-server-encrypted") } -// LastAccessed returns the value for header x-ms-last-access-time. -func (bgpr BlobGetPropertiesResponse) LastAccessed() time.Time { - s := bgpr.rawResponse.Header.Get("x-ms-last-access-time") - if s == "" { - return time.Time{} - } - t, err := time.Parse(time.RFC1123, s) - if err != nil { - t = time.Time{} - } - return t -} - // LastModified returns the value for header Last-Modified. func (bgpr BlobGetPropertiesResponse) LastModified() time.Time { s := bgpr.rawResponse.Header.Get("Last-Modified") @@ -2358,13 +2311,15 @@ type BlobHierarchyListSegment struct { // BlobItemInternal - An Azure Storage blob type BlobItemInternal struct { // XMLName is used for marshalling and is subject to removal in a future release. - XMLName xml.Name `xml:"Blob"` - Name string `xml:"Name"` - Deleted bool `xml:"Deleted"` - Snapshot string `xml:"Snapshot"` - VersionID *string `xml:"VersionId"` - IsCurrentVersion *bool `xml:"IsCurrentVersion"` - Properties BlobProperties `xml:"Properties"` + XMLName xml.Name `xml:"Blob"` + Name string `xml:"Name"` + Deleted bool `xml:"Deleted"` + Snapshot string `xml:"Snapshot"` + VersionID *string `xml:"VersionId"` + IsCurrentVersion *bool `xml:"IsCurrentVersion"` + Properties BlobProperties `xml:"Properties"` + + // TODO funky generator type -> *BlobMetadata Metadata Metadata `xml:"Metadata"` BlobTags *BlobTags `xml:"Tags"` ObjectReplicationMetadata map[string]string `xml:"ObjectReplicationMetadata"` @@ -2431,19 +2386,18 @@ type BlobProperties struct { AccessTierChangeTime *time.Time `xml:"AccessTierChangeTime"` TagCount *int32 `xml:"TagCount"` ExpiresOn *time.Time `xml:"Expiry-Time"` - IsSealed *bool `xml:"Sealed"` + IsSealed *bool `xml:"IsSealed"` // RehydratePriority - Possible values include: 'RehydratePriorityHigh', 'RehydratePriorityStandard', 'RehydratePriorityNone' RehydratePriority RehydratePriorityType `xml:"RehydratePriority"` - LastAccessedOn *time.Time `xml:"LastAccessTime"` } -// MarshalXML implements the xml.Marshaler interface for BlobPropertiesInternal. +// MarshalXML implements the xml.Marshaler interface for BlobProperties. func (bpi BlobProperties) MarshalXML(e *xml.Encoder, start xml.StartElement) error { bpi2 := (*blobProperties)(unsafe.Pointer(&bpi)) return e.EncodeElement(*bpi2, start) } -// UnmarshalXML implements the xml.Unmarshaler interface for BlobPropertiesInternal. +// UnmarshalXML implements the xml.Unmarshaler interface for BlobProperties. func (bpi *BlobProperties) UnmarshalXML(d *xml.Decoder, start xml.StartElement) error { bpi2 := (*blobProperties)(unsafe.Pointer(bpi)) return d.DecodeElement(bpi2, &start) @@ -3288,7 +3242,7 @@ type Block struct { // Name - The base64 encoded block ID. Name string `xml:"Name"` // Size - The block size in bytes. - Size int32 `xml:"Size"` + Size int64 `xml:"Size"` } // BlockBlobCommitBlockListResponse ... @@ -3408,110 +3362,6 @@ func (bbcblr BlockBlobCommitBlockListResponse) XMsContentCrc64() []byte { return b } -// BlockBlobPutBlobFromURLResponse ... -type BlockBlobPutBlobFromURLResponse struct { - rawResponse *http.Response -} - -// Response returns the raw HTTP response object. -func (bbpbfur BlockBlobPutBlobFromURLResponse) Response() *http.Response { - return bbpbfur.rawResponse -} - -// StatusCode returns the HTTP status code of the response, e.g. 200. -func (bbpbfur BlockBlobPutBlobFromURLResponse) StatusCode() int { - return bbpbfur.rawResponse.StatusCode -} - -// Status returns the HTTP status message of the response, e.g. "200 OK". -func (bbpbfur BlockBlobPutBlobFromURLResponse) Status() string { - return bbpbfur.rawResponse.Status -} - -// ClientRequestID returns the value for header x-ms-client-request-id. -func (bbpbfur BlockBlobPutBlobFromURLResponse) ClientRequestID() string { - return bbpbfur.rawResponse.Header.Get("x-ms-client-request-id") -} - -// ContentMD5 returns the value for header Content-MD5. -func (bbpbfur BlockBlobPutBlobFromURLResponse) ContentMD5() []byte { - s := bbpbfur.rawResponse.Header.Get("Content-MD5") - if s == "" { - return nil - } - b, err := base64.StdEncoding.DecodeString(s) - if err != nil { - b = nil - } - return b -} - -// Date returns the value for header Date. -func (bbpbfur BlockBlobPutBlobFromURLResponse) Date() time.Time { - s := bbpbfur.rawResponse.Header.Get("Date") - if s == "" { - return time.Time{} - } - t, err := time.Parse(time.RFC1123, s) - if err != nil { - t = time.Time{} - } - return t -} - -// EncryptionKeySha256 returns the value for header x-ms-encryption-key-sha256. -func (bbpbfur BlockBlobPutBlobFromURLResponse) EncryptionKeySha256() string { - return bbpbfur.rawResponse.Header.Get("x-ms-encryption-key-sha256") -} - -// EncryptionScope returns the value for header x-ms-encryption-scope. -func (bbpbfur BlockBlobPutBlobFromURLResponse) EncryptionScope() string { - return bbpbfur.rawResponse.Header.Get("x-ms-encryption-scope") -} - -// ErrorCode returns the value for header x-ms-error-code. -func (bbpbfur BlockBlobPutBlobFromURLResponse) ErrorCode() string { - return bbpbfur.rawResponse.Header.Get("x-ms-error-code") -} - -// ETag returns the value for header ETag. -func (bbpbfur BlockBlobPutBlobFromURLResponse) ETag() ETag { - return ETag(bbpbfur.rawResponse.Header.Get("ETag")) -} - -// IsServerEncrypted returns the value for header x-ms-request-server-encrypted. -func (bbpbfur BlockBlobPutBlobFromURLResponse) IsServerEncrypted() string { - return bbpbfur.rawResponse.Header.Get("x-ms-request-server-encrypted") -} - -// LastModified returns the value for header Last-Modified. -func (bbpbfur BlockBlobPutBlobFromURLResponse) LastModified() time.Time { - s := bbpbfur.rawResponse.Header.Get("Last-Modified") - if s == "" { - return time.Time{} - } - t, err := time.Parse(time.RFC1123, s) - if err != nil { - t = time.Time{} - } - return t -} - -// RequestID returns the value for header x-ms-request-id. -func (bbpbfur BlockBlobPutBlobFromURLResponse) RequestID() string { - return bbpbfur.rawResponse.Header.Get("x-ms-request-id") -} - -// Version returns the value for header x-ms-version. -func (bbpbfur BlockBlobPutBlobFromURLResponse) Version() string { - return bbpbfur.rawResponse.Header.Get("x-ms-version") -} - -// VersionID returns the value for header x-ms-version-id. -func (bbpbfur BlockBlobPutBlobFromURLResponse) VersionID() string { - return bbpbfur.rawResponse.Header.Get("x-ms-version-id") -} - // BlockBlobStageBlockFromURLResponse ... type BlockBlobStageBlockFromURLResponse struct { rawResponse *http.Response @@ -4571,59 +4421,6 @@ func (crlr ContainerReleaseLeaseResponse) Version() string { return crlr.rawResponse.Header.Get("x-ms-version") } -// ContainerRenameResponse ... -type ContainerRenameResponse struct { - rawResponse *http.Response -} - -// Response returns the raw HTTP response object. -func (crr ContainerRenameResponse) Response() *http.Response { - return crr.rawResponse -} - -// StatusCode returns the HTTP status code of the response, e.g. 200. -func (crr ContainerRenameResponse) StatusCode() int { - return crr.rawResponse.StatusCode -} - -// Status returns the HTTP status message of the response, e.g. "200 OK". -func (crr ContainerRenameResponse) Status() string { - return crr.rawResponse.Status -} - -// ClientRequestID returns the value for header x-ms-client-request-id. -func (crr ContainerRenameResponse) ClientRequestID() string { - return crr.rawResponse.Header.Get("x-ms-client-request-id") -} - -// Date returns the value for header Date. -func (crr ContainerRenameResponse) Date() time.Time { - s := crr.rawResponse.Header.Get("Date") - if s == "" { - return time.Time{} - } - t, err := time.Parse(time.RFC1123, s) - if err != nil { - t = time.Time{} - } - return t -} - -// ErrorCode returns the value for header x-ms-error-code. -func (crr ContainerRenameResponse) ErrorCode() string { - return crr.rawResponse.Header.Get("x-ms-error-code") -} - -// RequestID returns the value for header x-ms-request-id. -func (crr ContainerRenameResponse) RequestID() string { - return crr.rawResponse.Header.Get("x-ms-request-id") -} - -// Version returns the value for header x-ms-version. -func (crr ContainerRenameResponse) Version() string { - return crr.rawResponse.Header.Get("x-ms-version") -} - // ContainerRenewLeaseResponse ... type ContainerRenewLeaseResponse struct { rawResponse *http.Response @@ -5542,11 +5339,6 @@ func (dr downloadResponse) ETag() ETag { return ETag(dr.rawResponse.Header.Get("ETag")) } -// IsCurrentVersion returns the value for header x-ms-is-current-version. -func (dr downloadResponse) IsCurrentVersion() string { - return dr.rawResponse.Header.Get("x-ms-is-current-version") -} - // IsSealed returns the value for header x-ms-blob-sealed. func (dr downloadResponse) IsSealed() string { return dr.rawResponse.Header.Get("x-ms-blob-sealed") @@ -5557,19 +5349,6 @@ func (dr downloadResponse) IsServerEncrypted() string { return dr.rawResponse.Header.Get("x-ms-server-encrypted") } -// LastAccessed returns the value for header x-ms-last-access-time. -func (dr downloadResponse) LastAccessed() time.Time { - s := dr.rawResponse.Header.Get("x-ms-last-access-time") - if s == "" { - return time.Time{} - } - t, err := time.Parse(time.RFC1123, s) - if err != nil { - t = time.Time{} - } - return t -} - // LastModified returns the value for header Last-Modified. func (dr downloadResponse) LastModified() time.Time { s := dr.rawResponse.Header.Get("Last-Modified") @@ -5639,10 +5418,10 @@ func (dr downloadResponse) VersionID() string { // FilterBlobItem - Blob info from a Filter Blobs API call type FilterBlobItem struct { // XMLName is used for marshalling and is subject to removal in a future release. - XMLName xml.Name `xml:"Blob"` - Name string `xml:"Name"` - ContainerName string `xml:"ContainerName"` - Tags *BlobTags `xml:"Tags"` + XMLName xml.Name `xml:"Blob"` + Name string `xml:"Name"` + ContainerName string `xml:"ContainerName"` + TagValue string `xml:"TagValue"` } // FilterBlobSegment - The result of a Filter Blobs API call @@ -6749,11 +6528,10 @@ type PageRange struct { // QueryFormat ... type QueryFormat struct { - // Type - Possible values include: 'QueryFormatDelimited', 'QueryFormatJSON', 'QueryFormatArrow', 'QueryFormatNone' + // Type - Possible values include: 'QueryFormatDelimited', 'QueryFormatJSON', 'QueryFormatNone' Type QueryFormatType `xml:"Type"` DelimitedTextConfiguration *DelimitedTextConfiguration `xml:"DelimitedTextConfiguration"` JSONTextConfiguration *JSONTextConfiguration `xml:"JsonTextConfiguration"` - ArrowConfiguration *ArrowConfiguration `xml:"ArrowConfiguration"` } // QueryRequest - the quick query body @@ -7052,8 +6830,6 @@ type RetentionPolicy struct { Enabled bool `xml:"Enabled"` // Days - Indicates the number of days that metrics or logging or soft-deleted data should be retained. All data older than this value will be deleted Days *int32 `xml:"Days"` - // AllowPermanentDelete - Indicates whether permanent delete is allowed on this storage account. - AllowPermanentDelete *bool `xml:"AllowPermanentDelete"` } // ServiceGetAccountInfoResponse ... @@ -7104,11 +6880,6 @@ func (sgair ServiceGetAccountInfoResponse) ErrorCode() string { return sgair.rawResponse.Header.Get("x-ms-error-code") } -// IsHierarchicalNamespaceEnabled returns the value for header x-ms-is-hns-enabled. -func (sgair ServiceGetAccountInfoResponse) IsHierarchicalNamespaceEnabled() string { - return sgair.rawResponse.Header.Get("x-ms-is-hns-enabled") -} - // RequestID returns the value for header x-ms-request-id. func (sgair ServiceGetAccountInfoResponse) RequestID() string { return sgair.rawResponse.Header.Get("x-ms-request-id") @@ -7260,11 +7031,6 @@ type StaticWebsite struct { DefaultIndexDocumentPath *string `xml:"DefaultIndexDocumentPath"` } -// StorageError ... -// type StorageError struct { -// Message *string `xml:"Message"` -// } - // StorageServiceProperties - Storage Service Properties. type StorageServiceProperties struct { rawResponse *http.Response @@ -7368,7 +7134,7 @@ func (sss StorageServiceStats) Version() string { return sss.rawResponse.Header.Get("x-ms-version") } -// SubmitBatchResponse - Wraps the response from the containerClient.SubmitBatch method. +// SubmitBatchResponse - Wraps the response from the serviceClient.SubmitBatch method. type SubmitBatchResponse struct { rawResponse *http.Response } @@ -7500,7 +7266,7 @@ func init() { validateError(errors.New("size mismatch between AccessPolicy and accessPolicy")) } if reflect.TypeOf((*BlobProperties)(nil)).Elem().Size() != reflect.TypeOf((*blobProperties)(nil)).Elem().Size() { - validateError(errors.New("size mismatch between BlobPropertiesInternal and blobPropertiesInternal")) + validateError(errors.New("size mismatch between BlobProperties and blobProperties")) } if reflect.TypeOf((*ContainerProperties)(nil)).Elem().Size() != reflect.TypeOf((*containerProperties)(nil)).Elem().Size() { validateError(errors.New("size mismatch between ContainerProperties and containerProperties")) @@ -7511,7 +7277,7 @@ func init() { } const ( - rfc3339Format = "2006-01-02T15:04:05Z" + rfc3339Format = "2006-01-02T15:04:05Z" //This was wrong in the generated code, FYI ) // used to convert times from UTC to GMT before sending across the wire @@ -7626,9 +7392,8 @@ type blobProperties struct { AccessTierChangeTime *timeRFC1123 `xml:"AccessTierChangeTime"` TagCount *int32 `xml:"TagCount"` ExpiresOn *timeRFC1123 `xml:"Expiry-Time"` - IsSealed *bool `xml:"Sealed"` + IsSealed *bool `xml:"IsSealed"` RehydratePriority RehydratePriorityType `xml:"RehydratePriority"` - LastAccessedOn *timeRFC1123 `xml:"LastAccessTime"` } // internal type used for marshalling diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go index 6bc10f099..b55ae12bb 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_page_blob.go @@ -48,17 +48,16 @@ func newPageBlobClient(url url.URL, p pipeline.Pipeline) pageBlobClient { // on a blob if it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to // operate only on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value // to operate only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs -// without a matching value. ifTags is specify a SQL where clause on blob tags to operate only on blobs with a matching -// value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the -// analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (*PageBlobClearPagesResponse, error) { +// without a matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is +// recorded in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobClearPagesResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID) + req, err := client.clearPagesPreparer(contentLength, timeout, rangeParameter, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, ifSequenceNumberLessThanOrEqualTo, ifSequenceNumberLessThan, ifSequenceNumberEqualTo, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -70,7 +69,7 @@ func (client pageBlobClient) ClearPages(ctx context.Context, contentLength int64 } // clearPagesPreparer prepares the ClearPages request. -func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *int32, rangeParameter *string, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifSequenceNumberLessThanOrEqualTo *int64, ifSequenceNumberLessThan *int64, ifSequenceNumberEqualTo *int64, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -121,9 +120,6 @@ func (client pageBlobClient) clearPagesPreparer(contentLength int64, timeout *in if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } req.Header.Set("x-ms-version", ServiceVersion) if requestID != nil { req.Header.Set("x-ms-client-request-id", *requestID) @@ -157,17 +153,16 @@ func (client pageBlobClient) clearPagesResponder(resp pipeline.Response) (pipeli // it has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only // on a blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate // only on blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a -// matching value. ifTags is specify a SQL where clause on blob tags to operate only on blobs with a matching value. -// requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics -// logs when storage analytics logging is enabled. -func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (*PageBlobCopyIncrementalResponse, error) { +// matching value. requestID is provides a client-generated, opaque value with a 1 KB character limit that is recorded +// in the analytics logs when storage analytics logging is enabled. +func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobCopyIncrementalResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.copyIncrementalPreparer(copySource, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID) + req, err := client.copyIncrementalPreparer(copySource, timeout, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -179,7 +174,7 @@ func (client pageBlobClient) CopyIncremental(ctx context.Context, copySource str } // copyIncrementalPreparer prepares the CopyIncremental request. -func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout *int32, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -202,9 +197,6 @@ func (client pageBlobClient) copyIncrementalPreparer(copySource string, timeout if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } req.Header.Set("x-ms-copy-source", copySource) req.Header.Set("x-ms-version", ServiceVersion) if requestID != nil { @@ -609,18 +601,17 @@ func (client pageBlobClient) getPageRangesDiffResponder(resp pipeline.Response) // Services. ifModifiedSince is specify this header value to operate only on a blob if it has been modified since the // specified date/time. ifUnmodifiedSince is specify this header value to operate only on a blob if it has not been // modified since the specified date/time. ifMatch is specify an ETag value to operate only on blobs with a matching -// value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. ifTags is specify a -// SQL where clause on blob tags to operate only on blobs with a matching value. requestID is provides a -// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. requestID is provides +// a client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage // analytics logging is enabled. -func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (*PageBlobResizeResponse, error) { +func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (*PageBlobResizeResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.resizePreparer(blobContentLength, timeout, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, requestID) + req, err := client.resizePreparer(blobContentLength, timeout, leaseID, encryptionKey, encryptionKeySha256, encryptionAlgorithm, encryptionScope, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, requestID) if err != nil { return nil, err } @@ -632,7 +623,7 @@ func (client pageBlobClient) Resize(ctx context.Context, blobContentLength int64 } // resizePreparer prepares the Resize request. -func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *int32, leaseID *string, encryptionKey *string, encryptionKeySha256 *string, encryptionAlgorithm EncryptionAlgorithmType, encryptionScope *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -670,9 +661,6 @@ func (client pageBlobClient) resizePreparer(blobContentLength int64, timeout *in if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } req.Header.Set("x-ms-blob-content-length", strconv.FormatInt(blobContentLength, 10)) req.Header.Set("x-ms-version", ServiceVersion) if requestID != nil { @@ -703,18 +691,18 @@ func (client pageBlobClient) resizeResponder(resp pipeline.Response) (pipeline.R // has been modified since the specified date/time. ifUnmodifiedSince is specify this header value to operate only on a // blob if it has not been modified since the specified date/time. ifMatch is specify an ETag value to operate only on // blobs with a matching value. ifNoneMatch is specify an ETag value to operate only on blobs without a matching value. -// ifTags is specify a SQL where clause on blob tags to operate only on blobs with a matching value. blobSequenceNumber -// is set for page blobs only. The sequence number is a user-controlled value that you can use to track requests. The -// value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a client-generated, opaque value -// with a 1 KB character limit that is recorded in the analytics logs when storage analytics logging is enabled. -func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) { +// blobSequenceNumber is set for page blobs only. The sequence number is a user-controlled value that you can use to +// track requests. The value of the sequence number must be between 0 and 2^63 - 1. requestID is provides a +// client-generated, opaque value with a 1 KB character limit that is recorded in the analytics logs when storage +// analytics logging is enabled. +func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (*PageBlobUpdateSequenceNumberResponse, error) { if err := validate([]validation{ {targetValue: timeout, constraints: []constraint{{target: "timeout", name: null, rule: false, chain: []constraint{{target: "timeout", name: inclusiveMinimum, rule: 0, chain: nil}}}}}}); err != nil { return nil, err } - req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, ifTags, blobSequenceNumber, requestID) + req, err := client.updateSequenceNumberPreparer(sequenceNumberAction, timeout, leaseID, ifModifiedSince, ifUnmodifiedSince, ifMatch, ifNoneMatch, blobSequenceNumber, requestID) if err != nil { return nil, err } @@ -726,7 +714,7 @@ func (client pageBlobClient) UpdateSequenceNumber(ctx context.Context, sequenceN } // updateSequenceNumberPreparer prepares the UpdateSequenceNumber request. -func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, ifTags *string, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { +func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction SequenceNumberActionType, timeout *int32, leaseID *string, ifModifiedSince *time.Time, ifUnmodifiedSince *time.Time, ifMatch *ETag, ifNoneMatch *ETag, blobSequenceNumber *int64, requestID *string) (pipeline.Request, error) { req, err := pipeline.NewRequest("PUT", client.url, nil) if err != nil { return req, pipeline.NewError(err, "failed to create request") @@ -752,9 +740,6 @@ func (client pageBlobClient) updateSequenceNumberPreparer(sequenceNumberAction S if ifNoneMatch != nil { req.Header.Set("If-None-Match", string(*ifNoneMatch)) } - if ifTags != nil { - req.Header.Set("x-ms-if-tags", *ifTags) - } req.Header.Set("x-ms-sequence-number-action", string(sequenceNumberAction)) if blobSequenceNumber != nil { req.Header.Set("x-ms-blob-sequence-number", strconv.FormatInt(*blobSequenceNumber, 10)) diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go index ee8e4d5e0..200b2f568 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_generated_version.go @@ -5,7 +5,7 @@ package azblob // UserAgent returns the UserAgent string to use when sending http.Requests. func UserAgent() string { - return "Azure-SDK-For-Go/0.0.0 azblob/2020-04-08" + return "Azure-SDK-For-Go/0.0.0 azblob/2019-12-12" } // Version returns the semantic version (see http://semver.org) of the client. diff --git a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go index d586b7d42..5c086c5cf 100644 --- a/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go +++ b/vendor/github.com/Azure/azure-storage-blob-go/azblob/zz_response_helpers.go @@ -45,7 +45,7 @@ func (dr downloadResponse) NewHTTPHeaders() BlobHTTPHeaders { /////////////////////////////////////////////////////////////////////////////// -// downloadResponse wraps AutoRest generated downloadResponse and helps to provide info for retry. +// DownloadResponse wraps AutoRest generated DownloadResponse and helps to provide info for retry. type DownloadResponse struct { r *downloadResponse ctx context.Context diff --git a/vendor/modules.txt b/vendor/modules.txt index 09e8986bc..c0fb1f87b 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -35,7 +35,7 @@ github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2018-05-01/resources github.com/Azure/azure-sdk-for-go/services/resources/mgmt/2019-05-01/resources github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage github.com/Azure/azure-sdk-for-go/version -# github.com/Azure/azure-storage-blob-go v0.14.0 +# github.com/Azure/azure-storage-blob-go v0.13.0 ## explicit github.com/Azure/azure-storage-blob-go/azblob # github.com/Azure/go-autorest v14.2.0+incompatible @@ -646,6 +646,8 @@ google.golang.org/protobuf/types/known/emptypb google.golang.org/protobuf/types/known/fieldmaskpb google.golang.org/protobuf/types/known/timestamppb google.golang.org/protobuf/types/known/wrapperspb +# gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c +## explicit # gopkg.in/ini.v1 v1.66.4 ## explicit gopkg.in/ini.v1