mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-24 20:24:09 +00:00
Merge pull request #69718 from andyzhangx/azurefile-premium
support Azure premium file for azure file plugin
This commit is contained in:
commit
b5c25728ec
59
Godeps/Godeps.json
generated
59
Godeps/Godeps.json
generated
@ -36,33 +36,33 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2017-10-01/containerregistry",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2017-10-01/containerregistry",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/storage",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/storage",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/azure-sdk-for-go/version",
|
"ImportPath": "github.com/Azure/azure-sdk-for-go/version",
|
||||||
"Comment": "v19.0.0",
|
"Comment": "v21.1.0",
|
||||||
"Rev": "520918e6c8e8e1064154f51d13e02fad92b287b8"
|
"Rev": "6d20bdbae88c06c36d72eb512295417693bfdf4e"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-ansiterm",
|
"ImportPath": "github.com/Azure/go-ansiterm",
|
||||||
@ -74,38 +74,43 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest",
|
"ImportPath": "github.com/Azure/go-autorest/autorest",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/adal",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/adal",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/azure",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/azure",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/date",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/date",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/to",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/to",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/validation",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/validation",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/Azure/go-autorest/logger",
|
||||||
|
"Comment": "v10.15.4",
|
||||||
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/version",
|
"ImportPath": "github.com/Azure/go-autorest/version",
|
||||||
"Comment": "v10.14.0",
|
"Comment": "v10.15.4",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/GeertJohan/go.rice",
|
"ImportPath": "github.com/GeertJohan/go.rice",
|
||||||
|
201
Godeps/LICENSES
generated
201
Godeps/LICENSES
generated
@ -8767,7 +8767,7 @@ SOFTWARE.
|
|||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
= vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage licensed under: =
|
= vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage licensed under: =
|
||||||
|
|
||||||
|
|
||||||
Apache License
|
Apache License
|
||||||
@ -10648,6 +10648,205 @@ THE SOFTWARE.
|
|||||||
================================================================================
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
|
================================================================================
|
||||||
|
= vendor/github.com/Azure/go-autorest/logger licensed under: =
|
||||||
|
|
||||||
|
|
||||||
|
Apache License
|
||||||
|
Version 2.0, January 2004
|
||||||
|
http://www.apache.org/licenses/
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||||
|
|
||||||
|
1. Definitions.
|
||||||
|
|
||||||
|
"License" shall mean the terms and conditions for use, reproduction,
|
||||||
|
and distribution as defined by Sections 1 through 9 of this document.
|
||||||
|
|
||||||
|
"Licensor" shall mean the copyright owner or entity authorized by
|
||||||
|
the copyright owner that is granting the License.
|
||||||
|
|
||||||
|
"Legal Entity" shall mean the union of the acting entity and all
|
||||||
|
other entities that control, are controlled by, or are under common
|
||||||
|
control with that entity. For the purposes of this definition,
|
||||||
|
"control" means (i) the power, direct or indirect, to cause the
|
||||||
|
direction or management of such entity, whether by contract or
|
||||||
|
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||||
|
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||||
|
|
||||||
|
"You" (or "Your") shall mean an individual or Legal Entity
|
||||||
|
exercising permissions granted by this License.
|
||||||
|
|
||||||
|
"Source" form shall mean the preferred form for making modifications,
|
||||||
|
including but not limited to software source code, documentation
|
||||||
|
source, and configuration files.
|
||||||
|
|
||||||
|
"Object" form shall mean any form resulting from mechanical
|
||||||
|
transformation or translation of a Source form, including but
|
||||||
|
not limited to compiled object code, generated documentation,
|
||||||
|
and conversions to other media types.
|
||||||
|
|
||||||
|
"Work" shall mean the work of authorship, whether in Source or
|
||||||
|
Object form, made available under the License, as indicated by a
|
||||||
|
copyright notice that is included in or attached to the work
|
||||||
|
(an example is provided in the Appendix below).
|
||||||
|
|
||||||
|
"Derivative Works" shall mean any work, whether in Source or Object
|
||||||
|
form, that is based on (or derived from) the Work and for which the
|
||||||
|
editorial revisions, annotations, elaborations, or other modifications
|
||||||
|
represent, as a whole, an original work of authorship. For the purposes
|
||||||
|
of this License, Derivative Works shall not include works that remain
|
||||||
|
separable from, or merely link (or bind by name) to the interfaces of,
|
||||||
|
the Work and Derivative Works thereof.
|
||||||
|
|
||||||
|
"Contribution" shall mean any work of authorship, including
|
||||||
|
the original version of the Work and any modifications or additions
|
||||||
|
to that Work or Derivative Works thereof, that is intentionally
|
||||||
|
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||||
|
or by an individual or Legal Entity authorized to submit on behalf of
|
||||||
|
the copyright owner. For the purposes of this definition, "submitted"
|
||||||
|
means any form of electronic, verbal, or written communication sent
|
||||||
|
to the Licensor or its representatives, including but not limited to
|
||||||
|
communication on electronic mailing lists, source code control systems,
|
||||||
|
and issue tracking systems that are managed by, or on behalf of, the
|
||||||
|
Licensor for the purpose of discussing and improving the Work, but
|
||||||
|
excluding communication that is conspicuously marked or otherwise
|
||||||
|
designated in writing by the copyright owner as "Not a Contribution."
|
||||||
|
|
||||||
|
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||||
|
on behalf of whom a Contribution has been received by Licensor and
|
||||||
|
subsequently incorporated within the Work.
|
||||||
|
|
||||||
|
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
copyright license to reproduce, prepare Derivative Works of,
|
||||||
|
publicly display, publicly perform, sublicense, and distribute the
|
||||||
|
Work and such Derivative Works in Source or Object form.
|
||||||
|
|
||||||
|
3. Grant of Patent License. Subject to the terms and conditions of
|
||||||
|
this License, each Contributor hereby grants to You a perpetual,
|
||||||
|
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||||
|
(except as stated in this section) patent license to make, have made,
|
||||||
|
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||||
|
where such license applies only to those patent claims licensable
|
||||||
|
by such Contributor that are necessarily infringed by their
|
||||||
|
Contribution(s) alone or by combination of their Contribution(s)
|
||||||
|
with the Work to which such Contribution(s) was submitted. If You
|
||||||
|
institute patent litigation against any entity (including a
|
||||||
|
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||||
|
or a Contribution incorporated within the Work constitutes direct
|
||||||
|
or contributory patent infringement, then any patent licenses
|
||||||
|
granted to You under this License for that Work shall terminate
|
||||||
|
as of the date such litigation is filed.
|
||||||
|
|
||||||
|
4. Redistribution. You may reproduce and distribute copies of the
|
||||||
|
Work or Derivative Works thereof in any medium, with or without
|
||||||
|
modifications, and in Source or Object form, provided that You
|
||||||
|
meet the following conditions:
|
||||||
|
|
||||||
|
(a) You must give any other recipients of the Work or
|
||||||
|
Derivative Works a copy of this License; and
|
||||||
|
|
||||||
|
(b) You must cause any modified files to carry prominent notices
|
||||||
|
stating that You changed the files; and
|
||||||
|
|
||||||
|
(c) You must retain, in the Source form of any Derivative Works
|
||||||
|
that You distribute, all copyright, patent, trademark, and
|
||||||
|
attribution notices from the Source form of the Work,
|
||||||
|
excluding those notices that do not pertain to any part of
|
||||||
|
the Derivative Works; and
|
||||||
|
|
||||||
|
(d) If the Work includes a "NOTICE" text file as part of its
|
||||||
|
distribution, then any Derivative Works that You distribute must
|
||||||
|
include a readable copy of the attribution notices contained
|
||||||
|
within such NOTICE file, excluding those notices that do not
|
||||||
|
pertain to any part of the Derivative Works, in at least one
|
||||||
|
of the following places: within a NOTICE text file distributed
|
||||||
|
as part of the Derivative Works; within the Source form or
|
||||||
|
documentation, if provided along with the Derivative Works; or,
|
||||||
|
within a display generated by the Derivative Works, if and
|
||||||
|
wherever such third-party notices normally appear. The contents
|
||||||
|
of the NOTICE file are for informational purposes only and
|
||||||
|
do not modify the License. You may add Your own attribution
|
||||||
|
notices within Derivative Works that You distribute, alongside
|
||||||
|
or as an addendum to the NOTICE text from the Work, provided
|
||||||
|
that such additional attribution notices cannot be construed
|
||||||
|
as modifying the License.
|
||||||
|
|
||||||
|
You may add Your own copyright statement to Your modifications and
|
||||||
|
may provide additional or different license terms and conditions
|
||||||
|
for use, reproduction, or distribution of Your modifications, or
|
||||||
|
for any such Derivative Works as a whole, provided Your use,
|
||||||
|
reproduction, and distribution of the Work otherwise complies with
|
||||||
|
the conditions stated in this License.
|
||||||
|
|
||||||
|
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||||
|
any Contribution intentionally submitted for inclusion in the Work
|
||||||
|
by You to the Licensor shall be under the terms and conditions of
|
||||||
|
this License, without any additional terms or conditions.
|
||||||
|
Notwithstanding the above, nothing herein shall supersede or modify
|
||||||
|
the terms of any separate license agreement you may have executed
|
||||||
|
with Licensor regarding such Contributions.
|
||||||
|
|
||||||
|
6. Trademarks. This License does not grant permission to use the trade
|
||||||
|
names, trademarks, service marks, or product names of the Licensor,
|
||||||
|
except as required for reasonable and customary use in describing the
|
||||||
|
origin of the Work and reproducing the content of the NOTICE file.
|
||||||
|
|
||||||
|
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||||
|
agreed to in writing, Licensor provides the Work (and each
|
||||||
|
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||||
|
implied, including, without limitation, any warranties or conditions
|
||||||
|
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||||
|
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||||
|
appropriateness of using or redistributing the Work and assume any
|
||||||
|
risks associated with Your exercise of permissions under this License.
|
||||||
|
|
||||||
|
8. Limitation of Liability. In no event and under no legal theory,
|
||||||
|
whether in tort (including negligence), contract, or otherwise,
|
||||||
|
unless required by applicable law (such as deliberate and grossly
|
||||||
|
negligent acts) or agreed to in writing, shall any Contributor be
|
||||||
|
liable to You for damages, including any direct, indirect, special,
|
||||||
|
incidental, or consequential damages of any character arising as a
|
||||||
|
result of this License or out of the use or inability to use the
|
||||||
|
Work (including but not limited to damages for loss of goodwill,
|
||||||
|
work stoppage, computer failure or malfunction, or any and all
|
||||||
|
other commercial damages or losses), even if such Contributor
|
||||||
|
has been advised of the possibility of such damages.
|
||||||
|
|
||||||
|
9. Accepting Warranty or Additional Liability. While redistributing
|
||||||
|
the Work or Derivative Works thereof, You may choose to offer,
|
||||||
|
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||||
|
or other liability obligations and/or rights consistent with this
|
||||||
|
License. However, in accepting such obligations, You may act only
|
||||||
|
on Your own behalf and on Your sole responsibility, not on behalf
|
||||||
|
of any other Contributor, and only if You agree to indemnify,
|
||||||
|
defend, and hold each Contributor harmless for any liability
|
||||||
|
incurred by, or claims asserted against, such Contributor by reason
|
||||||
|
of your accepting any such warranty or additional liability.
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
Copyright 2015 Microsoft Corporation
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
|
||||||
|
= vendor/github.com/Azure/go-autorest/LICENSE a250e5ac3848f2acadb5adcb9555c18b
|
||||||
|
================================================================================
|
||||||
|
|
||||||
|
|
||||||
================================================================================
|
================================================================================
|
||||||
= vendor/github.com/Azure/go-autorest/version licensed under: =
|
= vendor/github.com/Azure/go-autorest/version licensed under: =
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/storage:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/storage:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library",
|
||||||
@ -103,7 +103,7 @@ go_test(
|
|||||||
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
||||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||||
|
@ -27,7 +27,7 @@ import (
|
|||||||
"sync/atomic"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
azstorage "github.com/Azure/azure-sdk-for-go/storage"
|
azstorage "github.com/Azure/azure-sdk-for-go/storage"
|
||||||
"github.com/Azure/go-autorest/autorest/to"
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
@ -80,7 +80,7 @@ func newBlobDiskController(common *controllerCommon) (*BlobDiskController, error
|
|||||||
// If no storage account is given, search all the storage accounts associated with the resource group and pick one that
|
// If no storage account is given, search all the storage accounts associated with the resource group and pick one that
|
||||||
// fits storage type and location.
|
// fits storage type and location.
|
||||||
func (c *BlobDiskController) CreateVolume(blobName, accountName, accountType, location string, requestGB int) (string, string, int, error) {
|
func (c *BlobDiskController) CreateVolume(blobName, accountName, accountType, location string, requestGB int) (string, string, int, error) {
|
||||||
account, key, err := c.common.cloud.ensureStorageAccount(accountName, accountType, c.common.resourceGroup, location, dedicatedDiskAccountNamePrefix)
|
account, key, err := c.common.cloud.ensureStorageAccount(accountName, accountType, string(defaultStorageAccountKind), c.common.resourceGroup, location, dedicatedDiskAccountNamePrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", 0, fmt.Errorf("could not get storage key for storage account %s: %v", accountName, err)
|
return "", "", 0, fmt.Errorf("could not get storage key for storage account %s: %v", accountName, err)
|
||||||
}
|
}
|
||||||
@ -491,7 +491,7 @@ func (c *BlobDiskController) createStorageAccount(storageAccountName string, sto
|
|||||||
cp := storage.AccountCreateParameters{
|
cp := storage.AccountCreateParameters{
|
||||||
Sku: &storage.Sku{Name: storageAccountType},
|
Sku: &storage.Sku{Name: storageAccountType},
|
||||||
// switch to use StorageV2 as it's recommended according to https://docs.microsoft.com/en-us/azure/storage/common/storage-account-options
|
// switch to use StorageV2 as it's recommended according to https://docs.microsoft.com/en-us/azure/storage/common/storage-account-options
|
||||||
Kind: storage.StorageV2,
|
Kind: defaultStorageAccountKind,
|
||||||
Tags: map[string]*string{"created-by": to.StringPtr("azure-dd")},
|
Tags: map[string]*string{"created-by": to.StringPtr("azure-dd")},
|
||||||
Location: &location}
|
Location: &location}
|
||||||
ctx, cancel := getContextWithCancel()
|
ctx, cancel := getContextWithCancel()
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
|
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/Azure/go-autorest/autorest"
|
"github.com/Azure/go-autorest/autorest"
|
||||||
"github.com/Azure/go-autorest/autorest/adal"
|
"github.com/Azure/go-autorest/autorest/adal"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
@ -31,7 +31,7 @@ import (
|
|||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
|
"github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/Azure/go-autorest/autorest"
|
"github.com/Azure/go-autorest/autorest"
|
||||||
"github.com/Azure/go-autorest/autorest/to"
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
)
|
)
|
||||||
|
@ -58,22 +58,11 @@ func (f *azureFileClient) createFileShare(accountName, accountKey, name string,
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
// create a file share and set quota
|
|
||||||
// Note. Per https://docs.microsoft.com/en-us/rest/api/storageservices/fileservices/Create-Share,
|
|
||||||
// setting x-ms-share-quota can set quota on the new share, but in reality, setting quota in CreateShare
|
|
||||||
// receives error "The metadata specified is invalid. It has characters that are not permitted."
|
|
||||||
// As a result,breaking into two API calls: create share and set quota
|
|
||||||
share := fileClient.GetShareReference(name)
|
share := fileClient.GetShareReference(name)
|
||||||
|
share.Properties.Quota = sizeGiB
|
||||||
if err = share.Create(nil); err != nil {
|
if err = share.Create(nil); err != nil {
|
||||||
return fmt.Errorf("failed to create file share, err: %v", err)
|
return fmt.Errorf("failed to create file share, err: %v", err)
|
||||||
}
|
}
|
||||||
share.Properties.Quota = sizeGiB
|
|
||||||
if err = share.SetProperties(nil); err != nil {
|
|
||||||
if err := share.Delete(nil); err != nil {
|
|
||||||
glog.Errorf("Error deleting share: %v", err)
|
|
||||||
}
|
|
||||||
return fmt.Errorf("failed to set quota on file share %s, err: %v", name, err)
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
@ -19,24 +19,26 @@ package azure
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
defaultStorageAccountType = string(storage.StandardLRS)
|
defaultStorageAccountType = string(storage.StandardLRS)
|
||||||
|
defaultStorageAccountKind = storage.StorageV2
|
||||||
fileShareAccountNamePrefix = "f"
|
fileShareAccountNamePrefix = "f"
|
||||||
sharedDiskAccountNamePrefix = "ds"
|
sharedDiskAccountNamePrefix = "ds"
|
||||||
dedicatedDiskAccountNamePrefix = "dd"
|
dedicatedDiskAccountNamePrefix = "dd"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CreateFileShare creates a file share, using a matching storage account
|
// CreateFileShare creates a file share, using a matching storage account type, account kind, etc.
|
||||||
func (az *Cloud) CreateFileShare(shareName, accountName, accountType, resourceGroup, location string, requestGiB int) (string, string, error) {
|
// storage account will be created if specified account is not found
|
||||||
|
func (az *Cloud) CreateFileShare(shareName, accountName, accountType, accountKind, resourceGroup, location string, requestGiB int) (string, string, error) {
|
||||||
if resourceGroup == "" {
|
if resourceGroup == "" {
|
||||||
resourceGroup = az.resourceGroup
|
resourceGroup = az.resourceGroup
|
||||||
}
|
}
|
||||||
|
|
||||||
account, key, err := az.ensureStorageAccount(accountName, accountType, resourceGroup, location, fileShareAccountNamePrefix)
|
account, key, err := az.ensureStorageAccount(accountName, accountType, accountKind, resourceGroup, location, fileShareAccountNamePrefix)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("could not get storage key for storage account %s: %v", accountName, err)
|
return "", "", fmt.Errorf("could not get storage key for storage account %s: %v", accountName, err)
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ package azure
|
|||||||
import (
|
import (
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCreateFileShare(t *testing.T) {
|
func TestCreateFileShare(t *testing.T) {
|
||||||
@ -30,6 +30,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
|
|
||||||
name := "baz"
|
name := "baz"
|
||||||
sku := "sku"
|
sku := "sku"
|
||||||
|
kind := "StorageV2"
|
||||||
location := "centralus"
|
location := "centralus"
|
||||||
value := "foo key"
|
value := "foo key"
|
||||||
bogus := "bogus"
|
bogus := "bogus"
|
||||||
@ -38,6 +39,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name string
|
name string
|
||||||
acct string
|
acct string
|
||||||
acctType string
|
acctType string
|
||||||
|
acctKind string
|
||||||
loc string
|
loc string
|
||||||
gb int
|
gb int
|
||||||
accounts storage.AccountListResult
|
accounts storage.AccountListResult
|
||||||
@ -52,6 +54,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name: "foo",
|
name: "foo",
|
||||||
acct: "bar",
|
acct: "bar",
|
||||||
acctType: "type",
|
acctType: "type",
|
||||||
|
acctKind: "StorageV2",
|
||||||
loc: "eastus",
|
loc: "eastus",
|
||||||
gb: 10,
|
gb: 10,
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
@ -60,6 +63,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name: "foo",
|
name: "foo",
|
||||||
acct: "",
|
acct: "",
|
||||||
acctType: "type",
|
acctType: "type",
|
||||||
|
acctKind: "StorageV2",
|
||||||
loc: "eastus",
|
loc: "eastus",
|
||||||
gb: 10,
|
gb: 10,
|
||||||
expectErr: true,
|
expectErr: true,
|
||||||
@ -68,11 +72,12 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name: "foo",
|
name: "foo",
|
||||||
acct: "",
|
acct: "",
|
||||||
acctType: sku,
|
acctType: sku,
|
||||||
|
acctKind: kind,
|
||||||
loc: location,
|
loc: location,
|
||||||
gb: 10,
|
gb: 10,
|
||||||
accounts: storage.AccountListResult{
|
accounts: storage.AccountListResult{
|
||||||
Value: &[]storage.Account{
|
Value: &[]storage.Account{
|
||||||
{Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Location: &location},
|
{Name: &name, Sku: &storage.Sku{Name: storage.SkuName(sku)}, Kind: storage.Kind(kind), Location: &location},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
keys: storage.AccountListKeysResult{
|
keys: storage.AccountListKeysResult{
|
||||||
@ -87,6 +92,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name: "foo",
|
name: "foo",
|
||||||
acct: "",
|
acct: "",
|
||||||
acctType: sku,
|
acctType: sku,
|
||||||
|
acctKind: kind,
|
||||||
loc: location,
|
loc: location,
|
||||||
gb: 10,
|
gb: 10,
|
||||||
accounts: storage.AccountListResult{
|
accounts: storage.AccountListResult{
|
||||||
@ -100,6 +106,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
name: "foo",
|
name: "foo",
|
||||||
acct: "",
|
acct: "",
|
||||||
acctType: sku,
|
acctType: sku,
|
||||||
|
acctKind: kind,
|
||||||
loc: location,
|
loc: location,
|
||||||
gb: 10,
|
gb: 10,
|
||||||
accounts: storage.AccountListResult{
|
accounts: storage.AccountListResult{
|
||||||
@ -116,7 +123,7 @@ func TestCreateFileShare(t *testing.T) {
|
|||||||
fake.Keys = test.keys
|
fake.Keys = test.keys
|
||||||
fake.Err = test.err
|
fake.Err = test.err
|
||||||
|
|
||||||
account, key, err := cloud.CreateFileShare(test.name, test.acct, test.acctType, "rg", test.loc, test.gb)
|
account, key, err := cloud.CreateFileShare(test.name, test.acct, test.acctType, test.acctKind, "rg", test.loc, test.gb)
|
||||||
if test.expectErr && err == nil {
|
if test.expectErr && err == nil {
|
||||||
t.Errorf("unexpected non-error")
|
t.Errorf("unexpected non-error")
|
||||||
continue
|
continue
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/Azure/go-autorest/autorest/to"
|
"github.com/Azure/go-autorest/autorest/to"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
)
|
)
|
||||||
@ -30,7 +30,7 @@ type accountWithLocation struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getStorageAccounts gets name, type, location of all storage accounts in a resource group which matches matchingAccountType, matchingLocation
|
// getStorageAccounts gets name, type, location of all storage accounts in a resource group which matches matchingAccountType, matchingLocation
|
||||||
func (az *Cloud) getStorageAccounts(matchingAccountType, resourceGroup, matchingLocation string) ([]accountWithLocation, error) {
|
func (az *Cloud) getStorageAccounts(matchingAccountType, matchingAccountKind, resourceGroup, matchingLocation string) ([]accountWithLocation, error) {
|
||||||
ctx, cancel := getContextWithCancel()
|
ctx, cancel := getContextWithCancel()
|
||||||
defer cancel()
|
defer cancel()
|
||||||
result, err := az.StorageAccountClient.ListByResourceGroup(ctx, resourceGroup)
|
result, err := az.StorageAccountClient.ListByResourceGroup(ctx, resourceGroup)
|
||||||
@ -49,6 +49,10 @@ func (az *Cloud) getStorageAccounts(matchingAccountType, resourceGroup, matching
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if matchingAccountKind != "" && !strings.EqualFold(matchingAccountKind, string(acct.Kind)) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
location := *acct.Location
|
location := *acct.Location
|
||||||
if matchingLocation != "" && !strings.EqualFold(matchingLocation, location) {
|
if matchingLocation != "" && !strings.EqualFold(matchingLocation, location) {
|
||||||
continue
|
continue
|
||||||
@ -86,10 +90,10 @@ func (az *Cloud) getStorageAccesskey(account, resourceGroup string) (string, err
|
|||||||
}
|
}
|
||||||
|
|
||||||
// ensureStorageAccount search storage account, create one storage account(with genAccountNamePrefix) if not found, return accountName, accountKey
|
// ensureStorageAccount search storage account, create one storage account(with genAccountNamePrefix) if not found, return accountName, accountKey
|
||||||
func (az *Cloud) ensureStorageAccount(accountName, accountType, resourceGroup, location, genAccountNamePrefix string) (string, string, error) {
|
func (az *Cloud) ensureStorageAccount(accountName, accountType, accountKind, resourceGroup, location, genAccountNamePrefix string) (string, string, error) {
|
||||||
if len(accountName) == 0 {
|
if len(accountName) == 0 {
|
||||||
// find a storage account that matches accountType
|
// find a storage account that matches accountType
|
||||||
accounts, err := az.getStorageAccounts(accountType, resourceGroup, location)
|
accounts, err := az.getStorageAccounts(accountType, accountKind, resourceGroup, location)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return "", "", fmt.Errorf("could not list storage accounts for account type %s: %v", accountType, err)
|
return "", "", fmt.Errorf("could not list storage accounts for account type %s: %v", accountType, err)
|
||||||
}
|
}
|
||||||
@ -109,12 +113,16 @@ func (az *Cloud) ensureStorageAccount(accountName, accountType, resourceGroup, l
|
|||||||
accountType = defaultStorageAccountType
|
accountType = defaultStorageAccountType
|
||||||
}
|
}
|
||||||
|
|
||||||
glog.V(2).Infof("azure - no matching account found, begin to create a new account %s in resource group %s, location: %s, accountType: %s",
|
// use StorageV2 by default per https://docs.microsoft.com/en-us/azure/storage/common/storage-account-options
|
||||||
accountName, resourceGroup, location, accountType)
|
kind := defaultStorageAccountKind
|
||||||
|
if accountKind != "" {
|
||||||
|
kind = storage.Kind(accountKind)
|
||||||
|
}
|
||||||
|
glog.V(2).Infof("azure - no matching account found, begin to create a new account %s in resource group %s, location: %s, accountType: %s, accountKind: %s",
|
||||||
|
accountName, resourceGroup, location, accountType, kind)
|
||||||
cp := storage.AccountCreateParameters{
|
cp := storage.AccountCreateParameters{
|
||||||
Sku: &storage.Sku{Name: storage.SkuName(accountType)},
|
Sku: &storage.Sku{Name: storage.SkuName(accountType)},
|
||||||
// switch to use StorageV2 as it's recommended according to https://docs.microsoft.com/en-us/azure/storage/common/storage-account-options
|
Kind: kind,
|
||||||
Kind: storage.StorageV2,
|
|
||||||
AccountPropertiesCreateParameters: &storage.AccountPropertiesCreateParameters{EnableHTTPSTrafficOnly: to.BoolPtr(true)},
|
AccountPropertiesCreateParameters: &storage.AccountPropertiesCreateParameters{EnableHTTPSTrafficOnly: to.BoolPtr(true)},
|
||||||
Tags: map[string]*string{"created-by": to.StringPtr("azure")},
|
Tags: map[string]*string{"created-by": to.StringPtr("azure")},
|
||||||
Location: &location}
|
Location: &location}
|
||||||
|
@ -20,7 +20,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestGetStorageAccessKeys(t *testing.T) {
|
func TestGetStorageAccessKeys(t *testing.T) {
|
||||||
|
@ -40,7 +40,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
"//staging/src/k8s.io/apiserver/pkg/util/feature:go_default_library",
|
||||||
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:go_default_library",
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@ -76,7 +76,7 @@ go_test(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
|
"//staging/src/k8s.io/client-go/util/testing:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:go_default_library",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest/to:go_default_library",
|
||||||
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
"//vendor/github.com/stretchr/testify/assert:go_default_library",
|
||||||
],
|
],
|
||||||
|
@ -23,7 +23,7 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
libstrings "strings"
|
libstrings "strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/types"
|
"k8s.io/apimachinery/pkg/types"
|
||||||
|
@ -24,7 +24,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
|
|
||||||
"k8s.io/kubernetes/pkg/util/mount"
|
"k8s.io/kubernetes/pkg/util/mount"
|
||||||
|
@ -22,7 +22,7 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
"github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute"
|
||||||
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage"
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
|
@ -27,6 +27,7 @@ go_library(
|
|||||||
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
|
||||||
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
"//staging/src/k8s.io/apimachinery/pkg/types:go_default_library",
|
||||||
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
"//staging/src/k8s.io/cloud-provider:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:go_default_library",
|
||||||
"//vendor/github.com/golang/glog:go_default_library",
|
"//vendor/github.com/golang/glog:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
@ -20,7 +20,9 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage"
|
||||||
"github.com/golang/glog"
|
"github.com/golang/glog"
|
||||||
|
|
||||||
"k8s.io/api/core/v1"
|
"k8s.io/api/core/v1"
|
||||||
"k8s.io/apimachinery/pkg/api/resource"
|
"k8s.io/apimachinery/pkg/api/resource"
|
||||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||||
@ -38,7 +40,7 @@ var _ volume.ProvisionableVolumePlugin = &azureFilePlugin{}
|
|||||||
// azure cloud provider should implement it
|
// azure cloud provider should implement it
|
||||||
type azureCloudProvider interface {
|
type azureCloudProvider interface {
|
||||||
// create a file share
|
// create a file share
|
||||||
CreateFileShare(shareName, accountName, accountType, resourceGroup, location string, requestGiB int) (string, string, error)
|
CreateFileShare(shareName, accountName, accountType, accountKind, resourceGroup, location string, requestGiB int) (string, string, error)
|
||||||
// delete a file share
|
// delete a file share
|
||||||
DeleteFileShare(accountName, accountKey, shareName string) error
|
DeleteFileShare(accountName, accountKey, shareName string) error
|
||||||
// resize a file share
|
// resize a file share
|
||||||
@ -171,7 +173,12 @@ func (a *azureFileProvisioner) Provision(selectedNode *v1.Node, allowedTopologie
|
|||||||
return nil, fmt.Errorf("claim.Spec.Selector is not supported for dynamic provisioning on Azure file")
|
return nil, fmt.Errorf("claim.Spec.Selector is not supported for dynamic provisioning on Azure file")
|
||||||
}
|
}
|
||||||
|
|
||||||
account, key, err := a.azureProvider.CreateFileShare(name, account, sku, resourceGroup, location, requestGiB)
|
// when use azure file premium, account kind should be specified as FileStorage
|
||||||
|
accountKind := string(storage.StorageV2)
|
||||||
|
if strings.HasPrefix(strings.ToLower(sku), "premium") {
|
||||||
|
accountKind = string(storage.FileStorage)
|
||||||
|
}
|
||||||
|
account, key, err := a.azureProvider.CreateFileShare(name, account, sku, accountKind, resourceGroup, location, requestGiB)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
14
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
14
staging/src/k8s.io/client-go/Godeps/Godeps.json
generated
@ -16,23 +16,27 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest",
|
"ImportPath": "github.com/Azure/go-autorest/autorest",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/adal",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/adal",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/azure",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/azure",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/autorest/date",
|
"ImportPath": "github.com/Azure/go-autorest/autorest/date",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ImportPath": "github.com/Azure/go-autorest/logger",
|
||||||
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/Azure/go-autorest/version",
|
"ImportPath": "github.com/Azure/go-autorest/version",
|
||||||
"Rev": "bca49d5b51a50dc5bb17bbf6204c711c6dbded06"
|
"Rev": "a88c19ef2016e095f0b6c3b451074b4663f53bed"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"ImportPath": "github.com/davecgh/go-spew/spew",
|
"ImportPath": "github.com/davecgh/go-spew/spew",
|
||||||
|
3
vendor/BUILD
vendored
3
vendor/BUILD
vendored
@ -18,11 +18,12 @@ filegroup(
|
|||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/compute/mgmt/2018-04-01/compute:all-srcs",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2017-10-01/containerregistry:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/containerregistry/mgmt/2017-10-01/containerregistry:all-srcs",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/network/mgmt/2017-09-01/network:all-srcs",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage:all-srcs",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/storage:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/storage:all-srcs",
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/version:all-srcs",
|
"//vendor/github.com/Azure/azure-sdk-for-go/version:all-srcs",
|
||||||
"//vendor/github.com/Azure/go-ansiterm:all-srcs",
|
"//vendor/github.com/Azure/go-ansiterm:all-srcs",
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest:all-srcs",
|
"//vendor/github.com/Azure/go-autorest/autorest:all-srcs",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/logger:all-srcs",
|
||||||
"//vendor/github.com/Azure/go-autorest/version:all-srcs",
|
"//vendor/github.com/Azure/go-autorest/version:all-srcs",
|
||||||
"//vendor/github.com/GeertJohan/go.rice:all-srcs",
|
"//vendor/github.com/GeertJohan/go.rice:all-srcs",
|
||||||
"//vendor/github.com/JeffAshton/win_pdh:all-srcs",
|
"//vendor/github.com/JeffAshton/win_pdh:all-srcs",
|
||||||
|
@ -798,84 +798,6 @@ func PossibleVirtualMachineSizeTypesValues() []VirtualMachineSizeTypes {
|
|||||||
// AccessURI a disk access SAS uri.
|
// AccessURI a disk access SAS uri.
|
||||||
type AccessURI struct {
|
type AccessURI struct {
|
||||||
autorest.Response `json:"-"`
|
autorest.Response `json:"-"`
|
||||||
// AccessURIOutput - Operation output data (raw JSON)
|
|
||||||
*AccessURIOutput `json:"properties,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarshalJSON is the custom marshaler for AccessURI.
|
|
||||||
func (au AccessURI) MarshalJSON() ([]byte, error) {
|
|
||||||
objectMap := make(map[string]interface{})
|
|
||||||
if au.AccessURIOutput != nil {
|
|
||||||
objectMap["properties"] = au.AccessURIOutput
|
|
||||||
}
|
|
||||||
return json.Marshal(objectMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalJSON is the custom unmarshaler for AccessURI struct.
|
|
||||||
func (au *AccessURI) UnmarshalJSON(body []byte) error {
|
|
||||||
var m map[string]*json.RawMessage
|
|
||||||
err := json.Unmarshal(body, &m)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for k, v := range m {
|
|
||||||
switch k {
|
|
||||||
case "properties":
|
|
||||||
if v != nil {
|
|
||||||
var accessURIOutput AccessURIOutput
|
|
||||||
err = json.Unmarshal(*v, &accessURIOutput)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
au.AccessURIOutput = &accessURIOutput
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// AccessURIOutput azure properties, including output.
|
|
||||||
type AccessURIOutput struct {
|
|
||||||
// AccessURIRaw - Operation output data (raw JSON)
|
|
||||||
*AccessURIRaw `json:"output,omitempty"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// MarshalJSON is the custom marshaler for AccessURIOutput.
|
|
||||||
func (auo AccessURIOutput) MarshalJSON() ([]byte, error) {
|
|
||||||
objectMap := make(map[string]interface{})
|
|
||||||
if auo.AccessURIRaw != nil {
|
|
||||||
objectMap["output"] = auo.AccessURIRaw
|
|
||||||
}
|
|
||||||
return json.Marshal(objectMap)
|
|
||||||
}
|
|
||||||
|
|
||||||
// UnmarshalJSON is the custom unmarshaler for AccessURIOutput struct.
|
|
||||||
func (auo *AccessURIOutput) UnmarshalJSON(body []byte) error {
|
|
||||||
var m map[string]*json.RawMessage
|
|
||||||
err := json.Unmarshal(body, &m)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
for k, v := range m {
|
|
||||||
switch k {
|
|
||||||
case "output":
|
|
||||||
if v != nil {
|
|
||||||
var accessURIRaw AccessURIRaw
|
|
||||||
err = json.Unmarshal(*v, &accessURIRaw)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
auo.AccessURIRaw = &accessURIRaw
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// AccessURIRaw a disk access SAS uri.
|
|
||||||
type AccessURIRaw struct {
|
|
||||||
// AccessSAS - A SAS uri for accessing a disk.
|
// AccessSAS - A SAS uri for accessing a disk.
|
||||||
AccessSAS *string `json:"accessSAS,omitempty"`
|
AccessSAS *string `json:"accessSAS,omitempty"`
|
||||||
}
|
}
|
||||||
@ -1290,7 +1212,7 @@ type DataDisk struct {
|
|||||||
WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"`
|
WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"`
|
||||||
// CreateOption - Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach'
|
// CreateOption - Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach'
|
||||||
CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"`
|
CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"`
|
||||||
// DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB
|
// DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB
|
||||||
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
|
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
|
||||||
// ManagedDisk - The managed disk parameters.
|
// ManagedDisk - The managed disk parameters.
|
||||||
ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"`
|
ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"`
|
||||||
@ -2718,7 +2640,7 @@ type OSDisk struct {
|
|||||||
WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"`
|
WriteAcceleratorEnabled *bool `json:"writeAcceleratorEnabled,omitempty"`
|
||||||
// CreateOption - Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach'
|
// CreateOption - Specifies how the virtual machine should be created.<br><br> Possible values are:<br><br> **Attach** \u2013 This value is used when you are using a specialized disk to create the virtual machine.<br><br> **FromImage** \u2013 This value is used when you are using an image to create the virtual machine. If you are using a platform image, you also use the imageReference element described above. If you are using a marketplace image, you also use the plan element previously described. Possible values include: 'DiskCreateOptionTypesFromImage', 'DiskCreateOptionTypesEmpty', 'DiskCreateOptionTypesAttach'
|
||||||
CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"`
|
CreateOption DiskCreateOptionTypes `json:"createOption,omitempty"`
|
||||||
// DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the name of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB
|
// DiskSizeGB - Specifies the size of an empty data disk in gigabytes. This element can be used to overwrite the size of the disk in a virtual machine image. <br><br> This value cannot be larger than 1023 GB
|
||||||
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
|
DiskSizeGB *int32 `json:"diskSizeGB,omitempty"`
|
||||||
// ManagedDisk - The managed disk parameters.
|
// ManagedDisk - The managed disk parameters.
|
||||||
ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"`
|
ManagedDisk *ManagedDiskParameters `json:"managedDisk,omitempty"`
|
||||||
|
@ -441,8 +441,10 @@ type ImportImageParameters struct {
|
|||||||
|
|
||||||
// ImportSource ...
|
// ImportSource ...
|
||||||
type ImportSource struct {
|
type ImportSource struct {
|
||||||
// ResourceID - The resource identifier of the target Azure Container Registry.
|
// ResourceID - The resource identifier of the source Azure Container Registry.
|
||||||
ResourceID *string `json:"resourceId,omitempty"`
|
ResourceID *string `json:"resourceId,omitempty"`
|
||||||
|
// RegistryURI - The address of the source registry.
|
||||||
|
RegistryURI *string `json:"registryUri,omitempty"`
|
||||||
// SourceImage - Repository name of the source image.
|
// SourceImage - Repository name of the source image.
|
||||||
// Specify an image by repository ('hello-world'). This will use the 'latest' tag.
|
// Specify an image by repository ('hello-world'). This will use the 'latest' tag.
|
||||||
// Specify an image by tag ('hello-world:latest').
|
// Specify an image by tag ('hello-world:latest').
|
||||||
|
@ -372,9 +372,7 @@ func (client RegistriesClient) ImportImage(ctx context.Context, resourceGroupNam
|
|||||||
{Target: "registryName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]*$`, Chain: nil}}},
|
{Target: "registryName", Name: validation.Pattern, Rule: `^[a-zA-Z0-9]*$`, Chain: nil}}},
|
||||||
{TargetValue: parameters,
|
{TargetValue: parameters,
|
||||||
Constraints: []validation.Constraint{{Target: "parameters.Source", Name: validation.Null, Rule: true,
|
Constraints: []validation.Constraint{{Target: "parameters.Source", Name: validation.Null, Rule: true,
|
||||||
Chain: []validation.Constraint{{Target: "parameters.Source.ResourceID", Name: validation.Null, Rule: true, Chain: nil},
|
Chain: []validation.Constraint{{Target: "parameters.Source.SourceImage", Name: validation.Null, Rule: true, Chain: nil}}}}}}); err != nil {
|
||||||
{Target: "parameters.Source.SourceImage", Name: validation.Null, Rule: true, Chain: nil},
|
|
||||||
}}}}}); err != nil {
|
|
||||||
return result, validation.NewError("containerregistry.RegistriesClient", "ImportImage", err.Error())
|
return result, validation.NewError("containerregistry.RegistriesClient", "ImportImage", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
102
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage/usage.go
generated
vendored
102
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage/usage.go
generated
vendored
@ -1,102 +0,0 @@
|
|||||||
package storage
|
|
||||||
|
|
||||||
// Copyright (c) Microsoft and contributors. All rights reserved.
|
|
||||||
//
|
|
||||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
||||||
// you may not use this file except in compliance with the License.
|
|
||||||
// You may obtain a copy of the License at
|
|
||||||
// http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
//
|
|
||||||
// Unless required by applicable law or agreed to in writing, software
|
|
||||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
||||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
||||||
//
|
|
||||||
// See the License for the specific language governing permissions and
|
|
||||||
// limitations under the License.
|
|
||||||
//
|
|
||||||
// Code generated by Microsoft (R) AutoRest Code Generator.
|
|
||||||
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"github.com/Azure/go-autorest/autorest"
|
|
||||||
"github.com/Azure/go-autorest/autorest/azure"
|
|
||||||
"net/http"
|
|
||||||
)
|
|
||||||
|
|
||||||
// UsageClient is the the Azure Storage Management API.
|
|
||||||
type UsageClient struct {
|
|
||||||
BaseClient
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewUsageClient creates an instance of the UsageClient client.
|
|
||||||
func NewUsageClient(subscriptionID string) UsageClient {
|
|
||||||
return NewUsageClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
|
||||||
}
|
|
||||||
|
|
||||||
// NewUsageClientWithBaseURI creates an instance of the UsageClient client.
|
|
||||||
func NewUsageClientWithBaseURI(baseURI string, subscriptionID string) UsageClient {
|
|
||||||
return UsageClient{NewWithBaseURI(baseURI, subscriptionID)}
|
|
||||||
}
|
|
||||||
|
|
||||||
// List gets the current usage count and the limit for the resources under the subscription.
|
|
||||||
func (client UsageClient) List(ctx context.Context) (result UsageListResult, err error) {
|
|
||||||
req, err := client.ListPreparer(ctx)
|
|
||||||
if err != nil {
|
|
||||||
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", nil, "Failure preparing request")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
resp, err := client.ListSender(req)
|
|
||||||
if err != nil {
|
|
||||||
result.Response = autorest.Response{Response: resp}
|
|
||||||
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", resp, "Failure sending request")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
result, err = client.ListResponder(resp)
|
|
||||||
if err != nil {
|
|
||||||
err = autorest.NewErrorWithError(err, "storage.UsageClient", "List", resp, "Failure responding to request")
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListPreparer prepares the List request.
|
|
||||||
func (client UsageClient) ListPreparer(ctx context.Context) (*http.Request, error) {
|
|
||||||
pathParameters := map[string]interface{}{
|
|
||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
|
||||||
}
|
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
|
||||||
queryParameters := map[string]interface{}{
|
|
||||||
"api-version": APIVersion,
|
|
||||||
}
|
|
||||||
|
|
||||||
preparer := autorest.CreatePreparer(
|
|
||||||
autorest.AsGet(),
|
|
||||||
autorest.WithBaseURL(client.BaseURI),
|
|
||||||
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Storage/usages", pathParameters),
|
|
||||||
autorest.WithQueryParameters(queryParameters))
|
|
||||||
return preparer.Prepare((&http.Request{}).WithContext(ctx))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListSender sends the List request. The method will close the
|
|
||||||
// http.Response Body if it receives an error.
|
|
||||||
func (client UsageClient) ListSender(req *http.Request) (*http.Response, error) {
|
|
||||||
return autorest.SendWithSender(client, req,
|
|
||||||
azure.DoRetryWithRegistration(client.Client))
|
|
||||||
}
|
|
||||||
|
|
||||||
// ListResponder handles the response to the List request. The method always
|
|
||||||
// closes the http.Response Body.
|
|
||||||
func (client UsageClient) ListResponder(resp *http.Response) (result UsageListResult, err error) {
|
|
||||||
err = autorest.Respond(
|
|
||||||
resp,
|
|
||||||
client.ByInspecting(),
|
|
||||||
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
|
||||||
autorest.ByUnmarshallingJSON(&result),
|
|
||||||
autorest.ByClosing())
|
|
||||||
result.Response = autorest.Response{Response: resp}
|
|
||||||
return
|
|
||||||
}
|
|
@ -4,15 +4,17 @@ go_library(
|
|||||||
name = "go_default_library",
|
name = "go_default_library",
|
||||||
srcs = [
|
srcs = [
|
||||||
"accounts.go",
|
"accounts.go",
|
||||||
|
"blobcontainers.go",
|
||||||
"client.go",
|
"client.go",
|
||||||
|
"managementpolicies.go",
|
||||||
"models.go",
|
"models.go",
|
||||||
"operations.go",
|
"operations.go",
|
||||||
"skus.go",
|
"skus.go",
|
||||||
"usage.go",
|
"usages.go",
|
||||||
"version.go",
|
"version.go",
|
||||||
],
|
],
|
||||||
importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage",
|
importmap = "k8s.io/kubernetes/vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage",
|
||||||
importpath = "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2017-10-01/storage",
|
importpath = "github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage",
|
||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library",
|
"//vendor/github.com/Azure/azure-sdk-for-go/version:go_default_library",
|
@ -48,7 +48,9 @@ func (client AccountsClient) CheckNameAvailability(ctx context.Context, accountN
|
|||||||
if err := validation.Validate([]validation.Validation{
|
if err := validation.Validate([]validation.Validation{
|
||||||
{TargetValue: accountName,
|
{TargetValue: accountName,
|
||||||
Constraints: []validation.Constraint{{Target: "accountName.Name", Name: validation.Null, Rule: true, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName.Name", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
{Target: "accountName.Type", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
|
{Target: "accountName.Type", Name: validation.Null, Rule: true, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "CheckNameAvailability", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "CheckNameAvailability", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -79,7 +81,7 @@ func (client AccountsClient) CheckNameAvailabilityPreparer(ctx context.Context,
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -141,7 +143,9 @@ func (client AccountsClient) Create(ctx context.Context, resourceGroupName strin
|
|||||||
{Target: "parameters.AccountPropertiesCreateParameters", Name: validation.Null, Rule: false,
|
{Target: "parameters.AccountPropertiesCreateParameters", Name: validation.Null, Rule: false,
|
||||||
Chain: []validation.Constraint{{Target: "parameters.AccountPropertiesCreateParameters.CustomDomain", Name: validation.Null, Rule: false,
|
Chain: []validation.Constraint{{Target: "parameters.AccountPropertiesCreateParameters.CustomDomain", Name: validation.Null, Rule: false,
|
||||||
Chain: []validation.Constraint{{Target: "parameters.AccountPropertiesCreateParameters.CustomDomain.Name", Name: validation.Null, Rule: true, Chain: nil}}},
|
Chain: []validation.Constraint{{Target: "parameters.AccountPropertiesCreateParameters.CustomDomain.Name", Name: validation.Null, Rule: true, Chain: nil}}},
|
||||||
}}}}}); err != nil {
|
}}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "Create", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "Create", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -168,7 +172,7 @@ func (client AccountsClient) CreatePreparer(ctx context.Context, resourceGroupNa
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -227,7 +231,9 @@ func (client AccountsClient) Delete(ctx context.Context, resourceGroupName strin
|
|||||||
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
{TargetValue: accountName,
|
{TargetValue: accountName,
|
||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}}}); err != nil {
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "Delete", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "Delete", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -260,7 +266,7 @@ func (client AccountsClient) DeletePreparer(ctx context.Context, resourceGroupNa
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -307,7 +313,9 @@ func (client AccountsClient) GetProperties(ctx context.Context, resourceGroupNam
|
|||||||
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
{TargetValue: accountName,
|
{TargetValue: accountName,
|
||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}}}); err != nil {
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "GetProperties", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "GetProperties", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,7 +348,7 @@ func (client AccountsClient) GetPropertiesPreparer(ctx context.Context, resource
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -376,6 +384,12 @@ func (client AccountsClient) GetPropertiesResponder(resp *http.Response) (result
|
|||||||
// List lists all the storage accounts available under the subscription. Note that storage keys are not returned; use
|
// List lists all the storage accounts available under the subscription. Note that storage keys are not returned; use
|
||||||
// the ListKeys operation for this.
|
// the ListKeys operation for this.
|
||||||
func (client AccountsClient) List(ctx context.Context) (result AccountListResult, err error) {
|
func (client AccountsClient) List(ctx context.Context) (result AccountListResult, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.AccountsClient", "List", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
req, err := client.ListPreparer(ctx)
|
req, err := client.ListPreparer(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = autorest.NewErrorWithError(err, "storage.AccountsClient", "List", nil, "Failure preparing request")
|
err = autorest.NewErrorWithError(err, "storage.AccountsClient", "List", nil, "Failure preparing request")
|
||||||
@ -403,7 +417,7 @@ func (client AccountsClient) ListPreparer(ctx context.Context) (*http.Request, e
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -453,7 +467,9 @@ func (client AccountsClient) ListAccountSAS(ctx context.Context, resourceGroupNa
|
|||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
{TargetValue: parameters,
|
{TargetValue: parameters,
|
||||||
Constraints: []validation.Constraint{{Target: "parameters.SharedAccessExpiryTime", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
|
Constraints: []validation.Constraint{{Target: "parameters.SharedAccessExpiryTime", Name: validation.Null, Rule: true, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "ListAccountSAS", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "ListAccountSAS", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -486,7 +502,7 @@ func (client AccountsClient) ListAccountSASPreparer(ctx context.Context, resourc
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -531,7 +547,9 @@ func (client AccountsClient) ListByResourceGroup(ctx context.Context, resourceGr
|
|||||||
{TargetValue: resourceGroupName,
|
{TargetValue: resourceGroupName,
|
||||||
Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
|
||||||
{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
|
{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
|
||||||
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}}}); err != nil {
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "ListByResourceGroup", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "ListByResourceGroup", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -563,7 +581,7 @@ func (client AccountsClient) ListByResourceGroupPreparer(ctx context.Context, re
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -610,7 +628,9 @@ func (client AccountsClient) ListKeys(ctx context.Context, resourceGroupName str
|
|||||||
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
{TargetValue: accountName,
|
{TargetValue: accountName,
|
||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}}}); err != nil {
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "ListKeys", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "ListKeys", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,7 +663,7 @@ func (client AccountsClient) ListKeysPreparer(ctx context.Context, resourceGroup
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -695,7 +715,9 @@ func (client AccountsClient) ListServiceSAS(ctx context.Context, resourceGroupNa
|
|||||||
{TargetValue: parameters,
|
{TargetValue: parameters,
|
||||||
Constraints: []validation.Constraint{{Target: "parameters.CanonicalizedResource", Name: validation.Null, Rule: true, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "parameters.CanonicalizedResource", Name: validation.Null, Rule: true, Chain: nil},
|
||||||
{Target: "parameters.Identifier", Name: validation.Null, Rule: false,
|
{Target: "parameters.Identifier", Name: validation.Null, Rule: false,
|
||||||
Chain: []validation.Constraint{{Target: "parameters.Identifier", Name: validation.MaxLength, Rule: 64, Chain: nil}}}}}}); err != nil {
|
Chain: []validation.Constraint{{Target: "parameters.Identifier", Name: validation.MaxLength, Rule: 64, Chain: nil}}}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "ListServiceSAS", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "ListServiceSAS", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -728,7 +750,7 @@ func (client AccountsClient) ListServiceSASPreparer(ctx context.Context, resourc
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -780,7 +802,9 @@ func (client AccountsClient) RegenerateKey(ctx context.Context, resourceGroupNam
|
|||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
{TargetValue: regenerateKey,
|
{TargetValue: regenerateKey,
|
||||||
Constraints: []validation.Constraint{{Target: "regenerateKey.KeyName", Name: validation.Null, Rule: true, Chain: nil}}}}); err != nil {
|
Constraints: []validation.Constraint{{Target: "regenerateKey.KeyName", Name: validation.Null, Rule: true, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "RegenerateKey", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "RegenerateKey", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -813,7 +837,7 @@ func (client AccountsClient) RegenerateKeyPreparer(ctx context.Context, resource
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
||||||
@ -868,7 +892,9 @@ func (client AccountsClient) Update(ctx context.Context, resourceGroupName strin
|
|||||||
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
{TargetValue: accountName,
|
{TargetValue: accountName,
|
||||||
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}}}); err != nil {
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
return result, validation.NewError("storage.AccountsClient", "Update", err.Error())
|
return result, validation.NewError("storage.AccountsClient", "Update", err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -901,7 +927,7 @@ func (client AccountsClient) UpdatePreparer(ctx context.Context, resourceGroupNa
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
1188
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/blobcontainers.go
generated
vendored
Normal file
1188
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/blobcontainers.go
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -1,4 +1,4 @@
|
|||||||
// Package storage implements the Azure ARM Storage service API version 2017-10-01.
|
// Package storage implements the Azure ARM Storage service API version .
|
||||||
//
|
//
|
||||||
// The Azure Storage Management API.
|
// The Azure Storage Management API.
|
||||||
package storage
|
package storage
|
292
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/managementpolicies.go
generated
vendored
Normal file
292
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/managementpolicies.go
generated
vendored
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator.
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ManagementPoliciesClient is the the Azure Storage Management API.
|
||||||
|
type ManagementPoliciesClient struct {
|
||||||
|
BaseClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewManagementPoliciesClient creates an instance of the ManagementPoliciesClient client.
|
||||||
|
func NewManagementPoliciesClient(subscriptionID string) ManagementPoliciesClient {
|
||||||
|
return NewManagementPoliciesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewManagementPoliciesClientWithBaseURI creates an instance of the ManagementPoliciesClient client.
|
||||||
|
func NewManagementPoliciesClientWithBaseURI(baseURI string, subscriptionID string) ManagementPoliciesClient {
|
||||||
|
return ManagementPoliciesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdate sets the data policy rules associated with the specified storage account.
|
||||||
|
// Parameters:
|
||||||
|
// resourceGroupName - the name of the resource group within the user's subscription. The name is case
|
||||||
|
// insensitive.
|
||||||
|
// accountName - the name of the storage account within the specified resource group. Storage account names
|
||||||
|
// must be between 3 and 24 characters in length and use numbers and lower-case letters only.
|
||||||
|
// properties - the data policy rules to set to a storage account.
|
||||||
|
func (client ManagementPoliciesClient) CreateOrUpdate(ctx context.Context, resourceGroupName string, accountName string, properties ManagementPoliciesRulesSetParameter) (result AccountManagementPolicies, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: resourceGroupName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
|
{TargetValue: accountName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.ManagementPoliciesClient", "CreateOrUpdate", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := client.CreateOrUpdatePreparer(ctx, resourceGroupName, accountName, properties)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "CreateOrUpdate", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.CreateOrUpdateSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "CreateOrUpdate", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.CreateOrUpdateResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "CreateOrUpdate", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdatePreparer prepares the CreateOrUpdate request.
|
||||||
|
func (client ManagementPoliciesClient) CreateOrUpdatePreparer(ctx context.Context, resourceGroupName string, accountName string, properties ManagementPoliciesRulesSetParameter) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"accountName": autorest.Encode("path", accountName),
|
||||||
|
"managementPolicyName": autorest.Encode("path", "default"),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2018-03-01-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsContentType("application/json; charset=utf-8"),
|
||||||
|
autorest.AsPut(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/managementPolicies/{managementPolicyName}", pathParameters),
|
||||||
|
autorest.WithJSON(properties),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare((&http.Request{}).WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateSender sends the CreateOrUpdate request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ManagementPoliciesClient) CreateOrUpdateSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req,
|
||||||
|
azure.DoRetryWithRegistration(client.Client))
|
||||||
|
}
|
||||||
|
|
||||||
|
// CreateOrUpdateResponder handles the response to the CreateOrUpdate request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ManagementPoliciesClient) CreateOrUpdateResponder(resp *http.Response) (result AccountManagementPolicies, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete deletes the data policy rules associated with the specified storage account.
|
||||||
|
// Parameters:
|
||||||
|
// resourceGroupName - the name of the resource group within the user's subscription. The name is case
|
||||||
|
// insensitive.
|
||||||
|
// accountName - the name of the storage account within the specified resource group. Storage account names
|
||||||
|
// must be between 3 and 24 characters in length and use numbers and lower-case letters only.
|
||||||
|
func (client ManagementPoliciesClient) Delete(ctx context.Context, resourceGroupName string, accountName string) (result autorest.Response, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: resourceGroupName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
|
{TargetValue: accountName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.ManagementPoliciesClient", "Delete", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := client.DeletePreparer(ctx, resourceGroupName, accountName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Delete", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.DeleteSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = resp
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Delete", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.DeleteResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Delete", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeletePreparer prepares the Delete request.
|
||||||
|
func (client ManagementPoliciesClient) DeletePreparer(ctx context.Context, resourceGroupName string, accountName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"accountName": autorest.Encode("path", accountName),
|
||||||
|
"managementPolicyName": autorest.Encode("path", "default"),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2018-03-01-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsDelete(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/managementPolicies/{managementPolicyName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare((&http.Request{}).WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteSender sends the Delete request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ManagementPoliciesClient) DeleteSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req,
|
||||||
|
azure.DoRetryWithRegistration(client.Client))
|
||||||
|
}
|
||||||
|
|
||||||
|
// DeleteResponder handles the response to the Delete request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ManagementPoliciesClient) DeleteResponder(resp *http.Response) (result autorest.Response, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK, http.StatusNoContent),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = resp
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets the data policy rules associated with the specified storage account.
|
||||||
|
// Parameters:
|
||||||
|
// resourceGroupName - the name of the resource group within the user's subscription. The name is case
|
||||||
|
// insensitive.
|
||||||
|
// accountName - the name of the storage account within the specified resource group. Storage account names
|
||||||
|
// must be between 3 and 24 characters in length and use numbers and lower-case letters only.
|
||||||
|
func (client ManagementPoliciesClient) Get(ctx context.Context, resourceGroupName string, accountName string) (result AccountManagementPolicies, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: resourceGroupName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "resourceGroupName", Name: validation.MaxLength, Rule: 90, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.MinLength, Rule: 1, Chain: nil},
|
||||||
|
{Target: "resourceGroupName", Name: validation.Pattern, Rule: `^[-\w\._\(\)]+$`, Chain: nil}}},
|
||||||
|
{TargetValue: accountName,
|
||||||
|
Constraints: []validation.Constraint{{Target: "accountName", Name: validation.MaxLength, Rule: 24, Chain: nil},
|
||||||
|
{Target: "accountName", Name: validation.MinLength, Rule: 3, Chain: nil}}},
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.ManagementPoliciesClient", "Get", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := client.GetPreparer(ctx, resourceGroupName, accountName)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Get", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.GetSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Get", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.GetResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.ManagementPoliciesClient", "Get", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetPreparer prepares the Get request.
|
||||||
|
func (client ManagementPoliciesClient) GetPreparer(ctx context.Context, resourceGroupName string, accountName string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"accountName": autorest.Encode("path", accountName),
|
||||||
|
"managementPolicyName": autorest.Encode("path", "default"),
|
||||||
|
"resourceGroupName": autorest.Encode("path", resourceGroupName),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2018-03-01-preview"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{accountName}/managementPolicies/{managementPolicyName}", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare((&http.Request{}).WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetSender sends the Get request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client ManagementPoliciesClient) GetSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req,
|
||||||
|
azure.DoRetryWithRegistration(client.Client))
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetResponder handles the response to the Get request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client ManagementPoliciesClient) GetResponder(resp *http.Response) (result AccountManagementPolicies, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
File diff suppressed because it is too large
Load Diff
@ -64,7 +64,7 @@ func (client OperationsClient) List(ctx context.Context) (result OperationListRe
|
|||||||
|
|
||||||
// ListPreparer prepares the List request.
|
// ListPreparer prepares the List request.
|
||||||
func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) {
|
func (client OperationsClient) ListPreparer(ctx context.Context) (*http.Request, error) {
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
@ -21,6 +21,7 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"github.com/Azure/go-autorest/autorest"
|
"github.com/Azure/go-autorest/autorest"
|
||||||
"github.com/Azure/go-autorest/autorest/azure"
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
"net/http"
|
"net/http"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -41,6 +42,12 @@ func NewSkusClientWithBaseURI(baseURI string, subscriptionID string) SkusClient
|
|||||||
|
|
||||||
// List lists the available SKUs supported by Microsoft.Storage for given subscription.
|
// List lists the available SKUs supported by Microsoft.Storage for given subscription.
|
||||||
func (client SkusClient) List(ctx context.Context) (result SkuListResult, err error) {
|
func (client SkusClient) List(ctx context.Context) (result SkuListResult, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.SkusClient", "List", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
req, err := client.ListPreparer(ctx)
|
req, err := client.ListPreparer(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err = autorest.NewErrorWithError(err, "storage.SkusClient", "List", nil, "Failure preparing request")
|
err = autorest.NewErrorWithError(err, "storage.SkusClient", "List", nil, "Failure preparing request")
|
||||||
@ -68,7 +75,7 @@ func (client SkusClient) ListPreparer(ctx context.Context) (*http.Request, error
|
|||||||
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
}
|
}
|
||||||
|
|
||||||
const APIVersion = "2017-10-01"
|
const APIVersion = "2018-07-01"
|
||||||
queryParameters := map[string]interface{}{
|
queryParameters := map[string]interface{}{
|
||||||
"api-version": APIVersion,
|
"api-version": APIVersion,
|
||||||
}
|
}
|
112
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/usages.go
generated
vendored
Normal file
112
vendor/github.com/Azure/azure-sdk-for-go/services/storage/mgmt/2018-07-01/storage/usages.go
generated
vendored
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
package storage
|
||||||
|
|
||||||
|
// Copyright (c) Microsoft and contributors. All rights reserved.
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
//
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
//
|
||||||
|
// Code generated by Microsoft (R) AutoRest Code Generator.
|
||||||
|
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/Azure/go-autorest/autorest"
|
||||||
|
"github.com/Azure/go-autorest/autorest/azure"
|
||||||
|
"github.com/Azure/go-autorest/autorest/validation"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// UsagesClient is the the Azure Storage Management API.
|
||||||
|
type UsagesClient struct {
|
||||||
|
BaseClient
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsagesClient creates an instance of the UsagesClient client.
|
||||||
|
func NewUsagesClient(subscriptionID string) UsagesClient {
|
||||||
|
return NewUsagesClientWithBaseURI(DefaultBaseURI, subscriptionID)
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewUsagesClientWithBaseURI creates an instance of the UsagesClient client.
|
||||||
|
func NewUsagesClientWithBaseURI(baseURI string, subscriptionID string) UsagesClient {
|
||||||
|
return UsagesClient{NewWithBaseURI(baseURI, subscriptionID)}
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByLocation gets the current usage count and the limit for the resources of the location under the subscription.
|
||||||
|
// Parameters:
|
||||||
|
// location - the location of the Azure Storage resource.
|
||||||
|
func (client UsagesClient) ListByLocation(ctx context.Context, location string) (result UsageListResult, err error) {
|
||||||
|
if err := validation.Validate([]validation.Validation{
|
||||||
|
{TargetValue: client.SubscriptionID,
|
||||||
|
Constraints: []validation.Constraint{{Target: "client.SubscriptionID", Name: validation.MinLength, Rule: 1, Chain: nil}}}}); err != nil {
|
||||||
|
return result, validation.NewError("storage.UsagesClient", "ListByLocation", err.Error())
|
||||||
|
}
|
||||||
|
|
||||||
|
req, err := client.ListByLocationPreparer(ctx, location)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsagesClient", "ListByLocation", nil, "Failure preparing request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.ListByLocationSender(req)
|
||||||
|
if err != nil {
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsagesClient", "ListByLocation", resp, "Failure sending request")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err = client.ListByLocationResponder(resp)
|
||||||
|
if err != nil {
|
||||||
|
err = autorest.NewErrorWithError(err, "storage.UsagesClient", "ListByLocation", resp, "Failure responding to request")
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByLocationPreparer prepares the ListByLocation request.
|
||||||
|
func (client UsagesClient) ListByLocationPreparer(ctx context.Context, location string) (*http.Request, error) {
|
||||||
|
pathParameters := map[string]interface{}{
|
||||||
|
"location": autorest.Encode("path", location),
|
||||||
|
"subscriptionId": autorest.Encode("path", client.SubscriptionID),
|
||||||
|
}
|
||||||
|
|
||||||
|
const APIVersion = "2018-07-01"
|
||||||
|
queryParameters := map[string]interface{}{
|
||||||
|
"api-version": APIVersion,
|
||||||
|
}
|
||||||
|
|
||||||
|
preparer := autorest.CreatePreparer(
|
||||||
|
autorest.AsGet(),
|
||||||
|
autorest.WithBaseURL(client.BaseURI),
|
||||||
|
autorest.WithPathParameters("/subscriptions/{subscriptionId}/providers/Microsoft.Storage/locations/{location}/usages", pathParameters),
|
||||||
|
autorest.WithQueryParameters(queryParameters))
|
||||||
|
return preparer.Prepare((&http.Request{}).WithContext(ctx))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByLocationSender sends the ListByLocation request. The method will close the
|
||||||
|
// http.Response Body if it receives an error.
|
||||||
|
func (client UsagesClient) ListByLocationSender(req *http.Request) (*http.Response, error) {
|
||||||
|
return autorest.SendWithSender(client, req,
|
||||||
|
azure.DoRetryWithRegistration(client.Client))
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListByLocationResponder handles the response to the ListByLocation request. The method always
|
||||||
|
// closes the http.Response Body.
|
||||||
|
func (client UsagesClient) ListByLocationResponder(resp *http.Response) (result UsageListResult, err error) {
|
||||||
|
err = autorest.Respond(
|
||||||
|
resp,
|
||||||
|
client.ByInspecting(),
|
||||||
|
azure.WithErrorUnlessStatusCode(http.StatusOK),
|
||||||
|
autorest.ByUnmarshallingJSON(&result),
|
||||||
|
autorest.ByClosing())
|
||||||
|
result.Response = autorest.Response{Response: resp}
|
||||||
|
return
|
||||||
|
}
|
@ -21,7 +21,7 @@ import "github.com/Azure/azure-sdk-for-go/version"
|
|||||||
|
|
||||||
// UserAgent returns the UserAgent string to use when sending http.Requests.
|
// UserAgent returns the UserAgent string to use when sending http.Requests.
|
||||||
func UserAgent() string {
|
func UserAgent() string {
|
||||||
return "Azure-SDK-For-Go/" + version.Number + " storage/2017-10-01"
|
return "Azure-SDK-For-Go/" + version.Number + " storage/2018-07-01"
|
||||||
}
|
}
|
||||||
|
|
||||||
// Version returns the semantic version (see http://semver.org) of the client.
|
// Version returns the semantic version (see http://semver.org) of the client.
|
2
vendor/github.com/Azure/azure-sdk-for-go/version/version.go
generated
vendored
2
vendor/github.com/Azure/azure-sdk-for-go/version/version.go
generated
vendored
@ -18,4 +18,4 @@ package version
|
|||||||
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
// Changes may cause incorrect behavior and will be lost if the code is regenerated.
|
||||||
|
|
||||||
// Number contains the semantic version of this SDK.
|
// Number contains the semantic version of this SDK.
|
||||||
const Number = "v19.0.0"
|
const Number = "v21.1.0"
|
||||||
|
1
vendor/github.com/Azure/go-autorest/autorest/BUILD
generated
vendored
1
vendor/github.com/Azure/go-autorest/autorest/BUILD
generated
vendored
@ -21,6 +21,7 @@ go_library(
|
|||||||
visibility = ["//visibility:public"],
|
visibility = ["//visibility:public"],
|
||||||
deps = [
|
deps = [
|
||||||
"//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/autorest/adal:go_default_library",
|
||||||
|
"//vendor/github.com/Azure/go-autorest/logger:go_default_library",
|
||||||
"//vendor/github.com/Azure/go-autorest/version:go_default_library",
|
"//vendor/github.com/Azure/go-autorest/version:go_default_library",
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
68
vendor/github.com/Azure/go-autorest/autorest/azure/async.go
generated
vendored
68
vendor/github.com/Azure/go-autorest/autorest/azure/async.go
generated
vendored
@ -119,7 +119,10 @@ func (f *Future) Done(sender autorest.Sender) (bool, error) {
|
|||||||
if err := f.pt.updatePollingState(f.pt.provisioningStateApplicable()); err != nil {
|
if err := f.pt.updatePollingState(f.pt.provisioningStateApplicable()); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
if err := f.pt.updateHeaders(); err != nil {
|
if err := f.pt.initPollingMethod(); err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
if err := f.pt.updatePollingMethod(); err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
return f.pt.hasTerminated(), f.pt.pollingError()
|
return f.pt.hasTerminated(), f.pt.pollingError()
|
||||||
@ -264,7 +267,7 @@ type pollingTracker interface {
|
|||||||
// these methods can differ per tracker
|
// these methods can differ per tracker
|
||||||
|
|
||||||
// checks the response headers and status code to determine the polling mechanism
|
// checks the response headers and status code to determine the polling mechanism
|
||||||
updateHeaders() error
|
updatePollingMethod() error
|
||||||
|
|
||||||
// checks the response for tracker-specific error conditions
|
// checks the response for tracker-specific error conditions
|
||||||
checkForErrors() error
|
checkForErrors() error
|
||||||
@ -274,6 +277,10 @@ type pollingTracker interface {
|
|||||||
|
|
||||||
// methods common to all trackers
|
// methods common to all trackers
|
||||||
|
|
||||||
|
// initializes a tracker's polling URL and method, called for each iteration.
|
||||||
|
// these values can be overridden by each polling tracker as required.
|
||||||
|
initPollingMethod() error
|
||||||
|
|
||||||
// initializes the tracker's internal state, call this when the tracker is created
|
// initializes the tracker's internal state, call this when the tracker is created
|
||||||
initializeState() error
|
initializeState() error
|
||||||
|
|
||||||
@ -348,6 +355,10 @@ func (pt *pollingTrackerBase) initializeState() error {
|
|||||||
case http.StatusOK:
|
case http.StatusOK:
|
||||||
if ps := pt.getProvisioningState(); ps != nil {
|
if ps := pt.getProvisioningState(); ps != nil {
|
||||||
pt.State = *ps
|
pt.State = *ps
|
||||||
|
if pt.hasFailed() {
|
||||||
|
pt.updateErrorFromResponse()
|
||||||
|
return pt.pollingError()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
pt.State = operationSucceeded
|
pt.State = operationSucceeded
|
||||||
}
|
}
|
||||||
@ -364,8 +375,9 @@ func (pt *pollingTrackerBase) initializeState() error {
|
|||||||
default:
|
default:
|
||||||
pt.State = operationFailed
|
pt.State = operationFailed
|
||||||
pt.updateErrorFromResponse()
|
pt.updateErrorFromResponse()
|
||||||
|
return pt.pollingError()
|
||||||
}
|
}
|
||||||
return nil
|
return pt.initPollingMethod()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pt pollingTrackerBase) getProvisioningState() *string {
|
func (pt pollingTrackerBase) getProvisioningState() *string {
|
||||||
@ -416,12 +428,14 @@ func (pt *pollingTrackerBase) pollForStatus(sender autorest.Sender) error {
|
|||||||
} else {
|
} else {
|
||||||
// check response body for error content
|
// check response body for error content
|
||||||
pt.updateErrorFromResponse()
|
pt.updateErrorFromResponse()
|
||||||
|
err = pt.pollingError()
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// attempts to unmarshal a ServiceError type from the response body.
|
// attempts to unmarshal a ServiceError type from the response body.
|
||||||
// if that fails then make a best attempt at creating something meaningful.
|
// if that fails then make a best attempt at creating something meaningful.
|
||||||
|
// NOTE: this assumes that the async operation has failed.
|
||||||
func (pt *pollingTrackerBase) updateErrorFromResponse() {
|
func (pt *pollingTrackerBase) updateErrorFromResponse() {
|
||||||
var err error
|
var err error
|
||||||
if pt.resp.ContentLength != 0 {
|
if pt.resp.ContentLength != 0 {
|
||||||
@ -431,8 +445,7 @@ func (pt *pollingTrackerBase) updateErrorFromResponse() {
|
|||||||
re := respErr{}
|
re := respErr{}
|
||||||
defer pt.resp.Body.Close()
|
defer pt.resp.Body.Close()
|
||||||
var b []byte
|
var b []byte
|
||||||
b, err = ioutil.ReadAll(pt.resp.Body)
|
if b, err = ioutil.ReadAll(pt.resp.Body); err != nil {
|
||||||
if err != nil {
|
|
||||||
goto Default
|
goto Default
|
||||||
}
|
}
|
||||||
if err = json.Unmarshal(b, &re); err != nil {
|
if err = json.Unmarshal(b, &re); err != nil {
|
||||||
@ -445,20 +458,29 @@ func (pt *pollingTrackerBase) updateErrorFromResponse() {
|
|||||||
goto Default
|
goto Default
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if re.ServiceError != nil {
|
// the unmarshaller will ensure re.ServiceError is non-nil
|
||||||
|
// even if there was no content unmarshalled so check the code.
|
||||||
|
if re.ServiceError.Code != "" {
|
||||||
pt.Err = re.ServiceError
|
pt.Err = re.ServiceError
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Default:
|
Default:
|
||||||
se := &ServiceError{
|
se := &ServiceError{
|
||||||
Code: fmt.Sprintf("HTTP status code %v", pt.resp.StatusCode),
|
Code: pt.pollingStatus(),
|
||||||
Message: pt.resp.Status,
|
Message: "The async operation failed.",
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
se.InnerError = make(map[string]interface{})
|
se.InnerError = make(map[string]interface{})
|
||||||
se.InnerError["unmarshalError"] = err.Error()
|
se.InnerError["unmarshalError"] = err.Error()
|
||||||
}
|
}
|
||||||
|
// stick the response body into the error object in hopes
|
||||||
|
// it contains something useful to help diagnose the failure.
|
||||||
|
if len(pt.rawBody) > 0 {
|
||||||
|
se.AdditionalInfo = []map[string]interface{}{
|
||||||
|
pt.rawBody,
|
||||||
|
}
|
||||||
|
}
|
||||||
pt.Err = se
|
pt.Err = se
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -538,13 +560,33 @@ func (pt pollingTrackerBase) baseCheckForErrors() error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// default initialization of polling URL/method. each verb tracker will update this as required.
|
||||||
|
func (pt *pollingTrackerBase) initPollingMethod() error {
|
||||||
|
if ao, err := getURLFromAsyncOpHeader(pt.resp); err != nil {
|
||||||
|
return err
|
||||||
|
} else if ao != "" {
|
||||||
|
pt.URI = ao
|
||||||
|
pt.Pm = PollingAsyncOperation
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
if lh, err := getURLFromLocationHeader(pt.resp); err != nil {
|
||||||
|
return err
|
||||||
|
} else if lh != "" {
|
||||||
|
pt.URI = lh
|
||||||
|
pt.Pm = PollingLocation
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
// it's ok if we didn't find a polling header, this will be handled elsewhere
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// DELETE
|
// DELETE
|
||||||
|
|
||||||
type pollingTrackerDelete struct {
|
type pollingTrackerDelete struct {
|
||||||
pollingTrackerBase
|
pollingTrackerBase
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pt *pollingTrackerDelete) updateHeaders() error {
|
func (pt *pollingTrackerDelete) updatePollingMethod() error {
|
||||||
// for 201 the Location header is required
|
// for 201 the Location header is required
|
||||||
if pt.resp.StatusCode == http.StatusCreated {
|
if pt.resp.StatusCode == http.StatusCreated {
|
||||||
if lh, err := getURLFromLocationHeader(pt.resp); err != nil {
|
if lh, err := getURLFromLocationHeader(pt.resp); err != nil {
|
||||||
@ -600,7 +642,7 @@ type pollingTrackerPatch struct {
|
|||||||
pollingTrackerBase
|
pollingTrackerBase
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pt *pollingTrackerPatch) updateHeaders() error {
|
func (pt *pollingTrackerPatch) updatePollingMethod() error {
|
||||||
// by default we can use the original URL for polling and final GET
|
// by default we can use the original URL for polling and final GET
|
||||||
if pt.URI == "" {
|
if pt.URI == "" {
|
||||||
pt.URI = pt.resp.Request.URL.String()
|
pt.URI = pt.resp.Request.URL.String()
|
||||||
@ -658,7 +700,7 @@ type pollingTrackerPost struct {
|
|||||||
pollingTrackerBase
|
pollingTrackerBase
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pt *pollingTrackerPost) updateHeaders() error {
|
func (pt *pollingTrackerPost) updatePollingMethod() error {
|
||||||
// 201 requires Location header
|
// 201 requires Location header
|
||||||
if pt.resp.StatusCode == http.StatusCreated {
|
if pt.resp.StatusCode == http.StatusCreated {
|
||||||
if lh, err := getURLFromLocationHeader(pt.resp); err != nil {
|
if lh, err := getURLFromLocationHeader(pt.resp); err != nil {
|
||||||
@ -714,7 +756,7 @@ type pollingTrackerPut struct {
|
|||||||
pollingTrackerBase
|
pollingTrackerBase
|
||||||
}
|
}
|
||||||
|
|
||||||
func (pt *pollingTrackerPut) updateHeaders() error {
|
func (pt *pollingTrackerPut) updatePollingMethod() error {
|
||||||
// by default we can use the original URL for polling and final GET
|
// by default we can use the original URL for polling and final GET
|
||||||
if pt.URI == "" {
|
if pt.URI == "" {
|
||||||
pt.URI = pt.resp.Request.URL.String()
|
pt.URI = pt.resp.Request.URL.String()
|
||||||
@ -808,7 +850,7 @@ func createPollingTracker(resp *http.Response) (pollingTracker, error) {
|
|||||||
// this initializes the polling header values, we do this during creation in case the
|
// this initializes the polling header values, we do this during creation in case the
|
||||||
// initial response send us invalid values; this way the API call will return a non-nil
|
// initial response send us invalid values; this way the API call will return a non-nil
|
||||||
// error (not doing this means the error shows up in Future.Done)
|
// error (not doing this means the error shows up in Future.Done)
|
||||||
return pt, pt.updateHeaders()
|
return pt, pt.updatePollingMethod()
|
||||||
}
|
}
|
||||||
|
|
||||||
// gets the polling URL from the Azure-AsyncOperation header.
|
// gets the polling URL from the Azure-AsyncOperation header.
|
||||||
|
13
vendor/github.com/Azure/go-autorest/autorest/client.go
generated
vendored
13
vendor/github.com/Azure/go-autorest/autorest/client.go
generated
vendored
@ -22,8 +22,10 @@ import (
|
|||||||
"log"
|
"log"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/http/cookiejar"
|
"net/http/cookiejar"
|
||||||
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
|
"github.com/Azure/go-autorest/logger"
|
||||||
"github.com/Azure/go-autorest/version"
|
"github.com/Azure/go-autorest/version"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -208,8 +210,17 @@ func (c Client) Do(r *http.Request) (*http.Response, error) {
|
|||||||
}
|
}
|
||||||
return resp, NewErrorWithError(err, "autorest/Client", "Do", nil, "Preparing request failed")
|
return resp, NewErrorWithError(err, "autorest/Client", "Do", nil, "Preparing request failed")
|
||||||
}
|
}
|
||||||
|
logger.Instance.WriteRequest(r, logger.Filter{
|
||||||
|
Header: func(k string, v []string) (bool, []string) {
|
||||||
|
// remove the auth token from the log
|
||||||
|
if strings.EqualFold(k, "Authorization") || strings.EqualFold(k, "Ocp-Apim-Subscription-Key") {
|
||||||
|
v = []string{"**REDACTED**"}
|
||||||
|
}
|
||||||
|
return true, v
|
||||||
|
},
|
||||||
|
})
|
||||||
resp, err := SendWithSender(c.sender(), r)
|
resp, err := SendWithSender(c.sender(), r)
|
||||||
|
logger.Instance.WriteResponse(resp, logger.Filter{})
|
||||||
Respond(resp, c.ByInspecting())
|
Respond(resp, c.ByInspecting())
|
||||||
return resp, err
|
return resp, err
|
||||||
}
|
}
|
||||||
|
23
vendor/github.com/Azure/go-autorest/logger/BUILD
generated
vendored
Normal file
23
vendor/github.com/Azure/go-autorest/logger/BUILD
generated
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
load("@io_bazel_rules_go//go:def.bzl", "go_library")
|
||||||
|
|
||||||
|
go_library(
|
||||||
|
name = "go_default_library",
|
||||||
|
srcs = ["logger.go"],
|
||||||
|
importmap = "k8s.io/kubernetes/vendor/github.com/Azure/go-autorest/logger",
|
||||||
|
importpath = "github.com/Azure/go-autorest/logger",
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "package-srcs",
|
||||||
|
srcs = glob(["**"]),
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:private"],
|
||||||
|
)
|
||||||
|
|
||||||
|
filegroup(
|
||||||
|
name = "all-srcs",
|
||||||
|
srcs = [":package-srcs"],
|
||||||
|
tags = ["automanaged"],
|
||||||
|
visibility = ["//visibility:public"],
|
||||||
|
)
|
328
vendor/github.com/Azure/go-autorest/logger/logger.go
generated
vendored
Normal file
328
vendor/github.com/Azure/go-autorest/logger/logger.go
generated
vendored
Normal file
@ -0,0 +1,328 @@
|
|||||||
|
package logger
|
||||||
|
|
||||||
|
// Copyright 2017 Microsoft Corporation
|
||||||
|
//
|
||||||
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
// you may not use this file except in compliance with the License.
|
||||||
|
// You may obtain a copy of the License at
|
||||||
|
//
|
||||||
|
// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
//
|
||||||
|
// Unless required by applicable law or agreed to in writing, software
|
||||||
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
// See the License for the specific language governing permissions and
|
||||||
|
// limitations under the License.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"net/http"
|
||||||
|
"net/url"
|
||||||
|
"os"
|
||||||
|
"strings"
|
||||||
|
"sync"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
// LevelType tells a logger the minimum level to log. When code reports a log entry,
|
||||||
|
// the LogLevel indicates the level of the log entry. The logger only records entries
|
||||||
|
// whose level is at least the level it was told to log. See the Log* constants.
|
||||||
|
// For example, if a logger is configured with LogError, then LogError, LogPanic,
|
||||||
|
// and LogFatal entries will be logged; lower level entries are ignored.
|
||||||
|
type LevelType uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
// LogNone tells a logger not to log any entries passed to it.
|
||||||
|
LogNone LevelType = iota
|
||||||
|
|
||||||
|
// LogFatal tells a logger to log all LogFatal entries passed to it.
|
||||||
|
LogFatal
|
||||||
|
|
||||||
|
// LogPanic tells a logger to log all LogPanic and LogFatal entries passed to it.
|
||||||
|
LogPanic
|
||||||
|
|
||||||
|
// LogError tells a logger to log all LogError, LogPanic and LogFatal entries passed to it.
|
||||||
|
LogError
|
||||||
|
|
||||||
|
// LogWarning tells a logger to log all LogWarning, LogError, LogPanic and LogFatal entries passed to it.
|
||||||
|
LogWarning
|
||||||
|
|
||||||
|
// LogInfo tells a logger to log all LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it.
|
||||||
|
LogInfo
|
||||||
|
|
||||||
|
// LogDebug tells a logger to log all LogDebug, LogInfo, LogWarning, LogError, LogPanic and LogFatal entries passed to it.
|
||||||
|
LogDebug
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
logNone = "NONE"
|
||||||
|
logFatal = "FATAL"
|
||||||
|
logPanic = "PANIC"
|
||||||
|
logError = "ERROR"
|
||||||
|
logWarning = "WARNING"
|
||||||
|
logInfo = "INFO"
|
||||||
|
logDebug = "DEBUG"
|
||||||
|
logUnknown = "UNKNOWN"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ParseLevel converts the specified string into the corresponding LevelType.
|
||||||
|
func ParseLevel(s string) (lt LevelType, err error) {
|
||||||
|
switch strings.ToUpper(s) {
|
||||||
|
case logFatal:
|
||||||
|
lt = LogFatal
|
||||||
|
case logPanic:
|
||||||
|
lt = LogPanic
|
||||||
|
case logError:
|
||||||
|
lt = LogError
|
||||||
|
case logWarning:
|
||||||
|
lt = LogWarning
|
||||||
|
case logInfo:
|
||||||
|
lt = LogInfo
|
||||||
|
case logDebug:
|
||||||
|
lt = LogDebug
|
||||||
|
default:
|
||||||
|
err = fmt.Errorf("bad log level '%s'", s)
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// String implements the stringer interface for LevelType.
|
||||||
|
func (lt LevelType) String() string {
|
||||||
|
switch lt {
|
||||||
|
case LogNone:
|
||||||
|
return logNone
|
||||||
|
case LogFatal:
|
||||||
|
return logFatal
|
||||||
|
case LogPanic:
|
||||||
|
return logPanic
|
||||||
|
case LogError:
|
||||||
|
return logError
|
||||||
|
case LogWarning:
|
||||||
|
return logWarning
|
||||||
|
case LogInfo:
|
||||||
|
return logInfo
|
||||||
|
case LogDebug:
|
||||||
|
return logDebug
|
||||||
|
default:
|
||||||
|
return logUnknown
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter defines functions for filtering HTTP request/response content.
|
||||||
|
type Filter struct {
|
||||||
|
// URL returns a potentially modified string representation of a request URL.
|
||||||
|
URL func(u *url.URL) string
|
||||||
|
|
||||||
|
// Header returns a potentially modified set of values for the specified key.
|
||||||
|
// To completely exclude the header key/values return false.
|
||||||
|
Header func(key string, val []string) (bool, []string)
|
||||||
|
|
||||||
|
// Body returns a potentially modified request/response body.
|
||||||
|
Body func(b []byte) []byte
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Filter) processURL(u *url.URL) string {
|
||||||
|
if f.URL == nil {
|
||||||
|
return u.String()
|
||||||
|
}
|
||||||
|
return f.URL(u)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Filter) processHeader(k string, val []string) (bool, []string) {
|
||||||
|
if f.Header == nil {
|
||||||
|
return true, val
|
||||||
|
}
|
||||||
|
return f.Header(k, val)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (f Filter) processBody(b []byte) []byte {
|
||||||
|
if f.Body == nil {
|
||||||
|
return b
|
||||||
|
}
|
||||||
|
return f.Body(b)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Writer defines methods for writing to a logging facility.
|
||||||
|
type Writer interface {
|
||||||
|
// Writeln writes the specified message with the standard log entry header and new-line character.
|
||||||
|
Writeln(level LevelType, message string)
|
||||||
|
|
||||||
|
// Writef writes the specified format specifier with the standard log entry header and no new-line character.
|
||||||
|
Writef(level LevelType, format string, a ...interface{})
|
||||||
|
|
||||||
|
// WriteRequest writes the specified HTTP request to the logger if the log level is greater than
|
||||||
|
// or equal to LogInfo. The request body, if set, is logged at level LogDebug or higher.
|
||||||
|
// Custom filters can be specified to exclude URL, header, and/or body content from the log.
|
||||||
|
// By default no request content is excluded.
|
||||||
|
WriteRequest(req *http.Request, filter Filter)
|
||||||
|
|
||||||
|
// WriteResponse writes the specified HTTP response to the logger if the log level is greater than
|
||||||
|
// or equal to LogInfo. The response body, if set, is logged at level LogDebug or higher.
|
||||||
|
// Custom filters can be specified to exclude URL, header, and/or body content from the log.
|
||||||
|
// By default no respone content is excluded.
|
||||||
|
WriteResponse(resp *http.Response, filter Filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Instance is the default log writer initialized during package init.
|
||||||
|
// This can be replaced with a custom implementation as required.
|
||||||
|
var Instance Writer
|
||||||
|
|
||||||
|
// default log level
|
||||||
|
var logLevel = LogNone
|
||||||
|
|
||||||
|
// Level returns the value specified in AZURE_GO_AUTOREST_LOG_LEVEL.
|
||||||
|
// If no value was specified the default value is LogNone.
|
||||||
|
// Custom loggers can call this to retrieve the configured log level.
|
||||||
|
func Level() LevelType {
|
||||||
|
return logLevel
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
// separated for testing purposes
|
||||||
|
initDefaultLogger()
|
||||||
|
}
|
||||||
|
|
||||||
|
func initDefaultLogger() {
|
||||||
|
// init with nilLogger so callers don't have to do a nil check on Default
|
||||||
|
Instance = nilLogger{}
|
||||||
|
llStr := strings.ToLower(os.Getenv("AZURE_GO_SDK_LOG_LEVEL"))
|
||||||
|
if llStr == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var err error
|
||||||
|
logLevel, err = ParseLevel(llStr)
|
||||||
|
if err != nil {
|
||||||
|
fmt.Fprintf(os.Stderr, "go-autorest: failed to parse log level: %s\n", err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if logLevel == LogNone {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
// default to stderr
|
||||||
|
dest := os.Stderr
|
||||||
|
lfStr := os.Getenv("AZURE_GO_SDK_LOG_FILE")
|
||||||
|
if strings.EqualFold(lfStr, "stdout") {
|
||||||
|
dest = os.Stdout
|
||||||
|
} else if lfStr != "" {
|
||||||
|
lf, err := os.Create(lfStr)
|
||||||
|
if err == nil {
|
||||||
|
dest = lf
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(os.Stderr, "go-autorest: failed to create log file, using stderr: %s\n", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Instance = fileLogger{
|
||||||
|
logLevel: logLevel,
|
||||||
|
mu: &sync.Mutex{},
|
||||||
|
logFile: dest,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// the nil logger does nothing
|
||||||
|
type nilLogger struct{}
|
||||||
|
|
||||||
|
func (nilLogger) Writeln(LevelType, string) {}
|
||||||
|
|
||||||
|
func (nilLogger) Writef(LevelType, string, ...interface{}) {}
|
||||||
|
|
||||||
|
func (nilLogger) WriteRequest(*http.Request, Filter) {}
|
||||||
|
|
||||||
|
func (nilLogger) WriteResponse(*http.Response, Filter) {}
|
||||||
|
|
||||||
|
// A File is used instead of a Logger so the stream can be flushed after every write.
|
||||||
|
type fileLogger struct {
|
||||||
|
logLevel LevelType
|
||||||
|
mu *sync.Mutex // for synchronizing writes to logFile
|
||||||
|
logFile *os.File
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fl fileLogger) Writeln(level LevelType, message string) {
|
||||||
|
fl.Writef(level, "%s\n", message)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fl fileLogger) Writef(level LevelType, format string, a ...interface{}) {
|
||||||
|
if fl.logLevel >= level {
|
||||||
|
fl.mu.Lock()
|
||||||
|
defer fl.mu.Unlock()
|
||||||
|
fmt.Fprintf(fl.logFile, "%s %s", entryHeader(level), fmt.Sprintf(format, a...))
|
||||||
|
fl.logFile.Sync()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fl fileLogger) WriteRequest(req *http.Request, filter Filter) {
|
||||||
|
if req == nil || fl.logLevel < LogInfo {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
fmt.Fprintf(b, "%s REQUEST: %s %s\n", entryHeader(LogInfo), req.Method, filter.processURL(req.URL))
|
||||||
|
// dump headers
|
||||||
|
for k, v := range req.Header {
|
||||||
|
if ok, mv := filter.processHeader(k, v); ok {
|
||||||
|
fmt.Fprintf(b, "%s: %s\n", k, strings.Join(mv, ","))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if fl.shouldLogBody(req.Header, req.Body) {
|
||||||
|
// dump body
|
||||||
|
body, err := ioutil.ReadAll(req.Body)
|
||||||
|
if err == nil {
|
||||||
|
fmt.Fprintln(b, string(filter.processBody(body)))
|
||||||
|
if nc, ok := req.Body.(io.Seeker); ok {
|
||||||
|
// rewind to the beginning
|
||||||
|
nc.Seek(0, io.SeekStart)
|
||||||
|
} else {
|
||||||
|
// recreate the body
|
||||||
|
req.Body = ioutil.NopCloser(bytes.NewReader(body))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(b, "failed to read body: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fl.mu.Lock()
|
||||||
|
defer fl.mu.Unlock()
|
||||||
|
fmt.Fprint(fl.logFile, b.String())
|
||||||
|
fl.logFile.Sync()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (fl fileLogger) WriteResponse(resp *http.Response, filter Filter) {
|
||||||
|
if resp == nil || fl.logLevel < LogInfo {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
b := &bytes.Buffer{}
|
||||||
|
fmt.Fprintf(b, "%s RESPONSE: %d %s\n", entryHeader(LogInfo), resp.StatusCode, filter.processURL(resp.Request.URL))
|
||||||
|
// dump headers
|
||||||
|
for k, v := range resp.Header {
|
||||||
|
if ok, mv := filter.processHeader(k, v); ok {
|
||||||
|
fmt.Fprintf(b, "%s: %s\n", k, strings.Join(mv, ","))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if fl.shouldLogBody(resp.Header, resp.Body) {
|
||||||
|
// dump body
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err == nil {
|
||||||
|
fmt.Fprintln(b, string(filter.processBody(body)))
|
||||||
|
resp.Body = ioutil.NopCloser(bytes.NewReader(body))
|
||||||
|
} else {
|
||||||
|
fmt.Fprintf(b, "failed to read body: %v\n", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fl.mu.Lock()
|
||||||
|
defer fl.mu.Unlock()
|
||||||
|
fmt.Fprint(fl.logFile, b.String())
|
||||||
|
fl.logFile.Sync()
|
||||||
|
}
|
||||||
|
|
||||||
|
// returns true if the provided body should be included in the log
|
||||||
|
func (fl fileLogger) shouldLogBody(header http.Header, body io.ReadCloser) bool {
|
||||||
|
ct := header.Get("Content-Type")
|
||||||
|
return fl.logLevel >= LogDebug && body != nil && strings.Index(ct, "application/octet-stream") == -1
|
||||||
|
}
|
||||||
|
|
||||||
|
// creates standard header for log entries, it contains a timestamp and the log level
|
||||||
|
func entryHeader(level LevelType) string {
|
||||||
|
// this format provides a fixed number of digits so the size of the timestamp is constant
|
||||||
|
return fmt.Sprintf("(%s) %s:", time.Now().Format("2006-01-02T15:04:05.0000000Z07:00"), level.String())
|
||||||
|
}
|
2
vendor/github.com/Azure/go-autorest/version/version.go
generated
vendored
2
vendor/github.com/Azure/go-autorest/version/version.go
generated
vendored
@ -20,7 +20,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Number contains the semantic version of this SDK.
|
// Number contains the semantic version of this SDK.
|
||||||
const Number = "v10.14.0"
|
const Number = "v10.15.4"
|
||||||
|
|
||||||
var (
|
var (
|
||||||
userAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s",
|
userAgent = fmt.Sprintf("Go/%s (%s-%s) go-autorest/%s",
|
||||||
|
Loading…
Reference in New Issue
Block a user