From d72cfaa7f2f24a96d5a0e1c5da5f6d00c0ed8467 Mon Sep 17 00:00:00 2001 From: Travis Prescott Date: Mon, 10 Oct 2016 13:18:52 -0700 Subject: [PATCH] [KeyVault] Onboard KeyVault Round 1 (#1037) * Initial KeyVault data plane commands and management plane revisions. * Code review comments. * Bump to wake up CI. * Bump to wake up CI. * Fix imports. * Updates to setup.py * Updates to setup.py * Update vault_base_url --- azure-cli.pyproj | 120 +- requirements.txt | 3 - .../azure/cli/core/_azure_env.py | 10 +- src/azure-cli-core/azure/cli/core/_profile.py | 21 +- .../azure/cli/core/application.py | 2 + .../azure/cli/core/tests/test_profile.py | 4 +- src/azure-cli-core/setup.py | 1 - .../azure-cli-iot/requirements.txt | 1 - src/command_modules/azure-cli-iot/setup.py | 1 - .../cli/command_modules/keyvault/__init__.py | 2 +- .../command_modules/keyvault/_command_type.py | 77 + .../cli/command_modules/keyvault/_help.py | 27 + .../cli/command_modules/keyvault/_params.py | 94 +- .../command_modules/keyvault/_validators.py | 122 +- .../keyvault/convenience/__init__.py | 14 + .../convenience/http_bearer_challenge.py | 91 + .../http_bearer_challenge_cache/__init__.py | 50 + .../keyvault/convenience/key_vault_client.py | 184 + .../convenience/key_vault_credential.py | 24 + .../keyvault/convenience/version.py | 13 + .../cli/command_modules/keyvault/custom.py | 151 +- .../cli/command_modules/keyvault/generated.py | 78 +- .../keyvault/keyvaultclient/__init__.py | 18 + .../keyvault/keyvaultclient/credentials.py | 20 + .../keyvault/keyvaultclient/exceptions.py | 23 + .../keyvaultclient/key_vault_client.py | 2955 +++++++++++++++++ .../keyvaultclient/models/__init__.py | 139 + .../keyvault/keyvaultclient/models/action.py | 28 + .../models/administrator_details.py | 40 + .../keyvaultclient/models/attributes.py | 51 + .../models/backup_key_result.py | 34 + .../models/certificate_attributes.py | 39 + .../models/certificate_bundle.py | 72 + .../models/certificate_create_parameters.py | 38 + .../models/certificate_import_parameters.py | 53 + .../models/certificate_issuer_item.py | 31 + .../models/certificate_issuer_item_paged.py | 27 + .../certificate_issuer_set_parameters.py | 47 + .../certificate_issuer_update_parameters.py | 43 + .../keyvaultclient/models/certificate_item.py | 40 + .../models/certificate_item_paged.py | 27 + .../models/certificate_merge_parameters.py | 42 + .../models/certificate_operation.py | 71 + .../certificate_operation_update_parameter.py | 32 + .../models/certificate_policy.py | 67 + .../models/certificate_update_parameters.py | 38 + .../keyvault/keyvaultclient/models/contact.py | 35 + .../keyvaultclient/models/contacts.py | 38 + .../keyvault/keyvaultclient/models/error.py | 39 + .../models/issuer_attributes.py | 43 + .../keyvaultclient/models/issuer_bundle.py | 54 + .../models/issuer_credentials.py | 31 + .../models/issuer_parameters.py | 33 + .../keyvaultclient/models/json_web_key.py | 77 + .../keyvaultclient/models/key_attributes.py | 39 + .../keyvaultclient/models/key_bundle.py | 47 + .../models/key_create_parameters.py | 51 + .../models/key_import_parameters.py | 44 + .../keyvaultclient/models/key_item.py | 47 + .../keyvaultclient/models/key_item_paged.py | 27 + .../models/key_operation_result.py | 39 + .../models/key_operations_parameters.py | 38 + .../keyvaultclient/models/key_properties.py | 40 + .../models/key_restore_parameters.py | 31 + .../models/key_sign_parameters.py | 40 + .../models/key_update_parameters.py | 38 + .../models/key_vault_client_enums.py | 63 + .../keyvaultclient/models/key_vault_error.py | 47 + .../models/key_verify_parameters.py | 45 + .../models/key_verify_result.py | 34 + .../keyvaultclient/models/lifetime_action.py | 32 + .../models/organization_details.py | 32 + ...ding_certificate_signing_request_result.py | 35 + .../models/secret_attributes.py | 39 + .../keyvaultclient/models/secret_bundle.py | 62 + .../keyvaultclient/models/secret_item.py | 52 + .../models/secret_item_paged.py | 27 + .../models/secret_properties.py | 27 + .../models/secret_set_parameters.py | 44 + .../models/secret_update_parameters.py | 36 + .../models/subject_alternative_names.py | 35 + .../keyvault/keyvaultclient/models/trigger.py | 36 + .../models/x509_certificate_properties.py | 51 + .../keyvault/keyvaultclient/version.py | 13 + .../tests/mydomain.test.encrypted.pem | 34 + .../keyvault/tests/mydomain.test.pem | 31 + .../keyvault/tests/policy.json | 42 + .../tests/recordings/test_key_vault_mgmt.yaml | 754 ----- .../tests/recordings/test_keyvault_key.yaml | 289 ++ .../tests/recordings/test_keyvault_mgmt.yaml | 883 +++++ .../recordings/test_keyvault_secret.yaml | 289 ++ .../keyvault/tests/test_keyvault_commands.py | 159 +- .../azure-cli-keyvault/requirements.txt | 2 +- .../azure-cli-keyvault/setup.py | 8 +- .../azure-cli-network/requirements.txt | 2 +- .../azure-cli-network/setup.py | 6 +- .../azure-cli-profile/requirements.txt | 2 +- .../azure-cli-profile/setup.py | 1 - .../azure-cli-redis/requirements.txt | 2 +- src/command_modules/azure-cli-redis/setup.py | 2 +- .../azure-cli-resource/requirements.txt | 2 +- .../azure-cli-resource/setup.py | 2 +- .../azure/cli/command_modules/role/custom.py | 3 +- .../azure-cli-role/requirements.txt | 1 - src/command_modules/azure-cli-role/setup.py | 1 - .../azure-cli-storage/requirements.txt | 3 +- .../azure-cli-storage/setup.py | 3 +- .../azure-cli-vm/requirements.txt | 4 +- src/command_modules/azure-cli-vm/setup.py | 4 +- .../azure-cli-webapp/requirements.txt | 1 - src/command_modules/azure-cli-webapp/setup.py | 1 - 111 files changed, 8222 insertions(+), 915 deletions(-) create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_command_type.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/__init__.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge_cache/__init__.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_client.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_credential.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/version.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/__init__.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/credentials.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/exceptions.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/key_vault_client.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/__init__.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/action.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/administrator_details.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/attributes.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/backup_key_result.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_attributes.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_bundle.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_create_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_import_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item_paged.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_set_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_update_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item_paged.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_merge_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation_update_parameter.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_policy.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_update_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contact.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contacts.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/error.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_attributes.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_bundle.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_credentials.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/json_web_key.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_attributes.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_bundle.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_create_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_import_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item_paged.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operation_result.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operations_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_properties.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_restore_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_sign_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_update_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_client_enums.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_error.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_result.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/lifetime_action.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/organization_details.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/pending_certificate_signing_request_result.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_attributes.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_bundle.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item_paged.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_properties.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_set_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_update_parameters.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/subject_alternative_names.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/trigger.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/x509_certificate_properties.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/version.py create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.encrypted.pem create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.pem create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/policy.json delete mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_key_vault_mgmt.yaml create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_key.yaml create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_mgmt.yaml create mode 100644 src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_secret.yaml diff --git a/azure-cli.pyproj b/azure-cli.pyproj index 82a245cf2de..fea9bcd2a73 100644 --- a/azure-cli.pyproj +++ b/azure-cli.pyproj @@ -90,44 +90,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -150,10 +112,83 @@ + + Code + + + Code + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -672,10 +707,6 @@ - - - - @@ -686,6 +717,10 @@ + + + + @@ -821,7 +856,6 @@ - diff --git a/requirements.txt b/requirements.txt index c964bf8e707..e0882c4adbc 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,9 +1,6 @@ adal==0.4.1 applicationinsights==0.10.0 argcomplete==1.3.0 -azure==2.0.0rc6 -azure-mgmt-trafficmanager==0.30.0rc6 -azure-mgmt-dns==0.30.0rc6 colorama==0.3.7 jmespath mock==1.3.0 diff --git a/src/azure-cli-core/azure/cli/core/_azure_env.py b/src/azure-cli-core/azure/cli/core/_azure_env.py index 5ae49694fc0..f576b02746d 100644 --- a/src/azure-cli-core/azure/cli/core/_azure_env.py +++ b/src/azure-cli-core/azure/cli/core/_azure_env.py @@ -16,22 +16,26 @@ class ENDPOINT_URLS: #pylint: disable=too-few-public-methods,old-style-class,no- MANAGEMENT = 'management' ACTIVE_DIRECTORY_AUTHORITY = 'active_directory_authority' ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID = 'active_directory_graph_resource_id' + KEY_VAULT = 'key_vault' _environments = { ENV_DEFAULT: { ENDPOINT_URLS.MANAGEMENT: 'https://management.core.windows.net/', ENDPOINT_URLS.ACTIVE_DIRECTORY_AUTHORITY : 'https://login.microsoftonline.com', - ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.windows.net/' + ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.windows.net/', + ENDPOINT_URLS.KEY_VAULT: 'https://vault.azure.net' }, ENV_CHINA: { ENDPOINT_URLS.MANAGEMENT: 'https://management.core.chinacloudapi.cn/', ENDPOINT_URLS.ACTIVE_DIRECTORY_AUTHORITY: 'https://login.chinacloudapi.cn', - ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.chinacloudapi.cn/' + ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.chinacloudapi.cn/', + ENDPOINT_URLS.KEY_VAULT: 'https://vault.azure.cn' }, ENV_US_GOVERNMENT: { ENDPOINT_URLS.MANAGEMENT: 'https://management.core.usgovcloudapi.net/', ENDPOINT_URLS.ACTIVE_DIRECTORY_AUTHORITY: 'https://login.microsoftonline.com', - ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.windows.net/' + ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID: 'https://graph.windows.net/', + ENDPOINT_URLS.KEY_VAULT: 'https://vault.usgovcloudapi.net' } } diff --git a/src/azure-cli-core/azure/cli/core/_profile.py b/src/azure-cli-core/azure/cli/core/_profile.py index f7ab19e86b9..5b947a3bfc6 100644 --- a/src/azure-cli-core/azure/cli/core/_profile.py +++ b/src/azure-cli-core/azure/cli/core/_profile.py @@ -8,6 +8,9 @@ import json import os.path import errno + +from enum import Enum + import adal from azure.cli.core._session import ACCOUNT from azure.cli.core._util import CLIError, get_file_json @@ -63,15 +66,19 @@ def _delete_file(file_path): if e.errno != errno.ENOENT: raise +class CredentialType(Enum): # pylint: disable=too-few-public-methods + management = get_env()[ENDPOINT_URLS.MANAGEMENT] + rbac = get_env()[ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID] + keyvault = get_env()[ENDPOINT_URLS.KEY_VAULT] + class Profile(object): def __init__(self, storage=None, auth_ctx_factory=None): self._storage = storage or ACCOUNT factory = auth_ctx_factory or _AUTH_CTX_FACTORY self._creds_cache = CredsCache(factory) self._subscription_finder = SubscriptionFinder(factory, self._creds_cache.adal_token_cache) - env = get_env() - self._management_resource_uri = env[ENDPOINT_URLS.MANAGEMENT] - self._graph_resource_uri = env[ENDPOINT_URLS.ACTIVE_DIRECTORY_GRAPH_RESOURCE_ID] + self.env = get_env() + self._management_resource_uri = self.env[ENDPOINT_URLS.MANAGEMENT] def find_subscriptions_on_login(self, #pylint: disable=too-many-arguments interactive, @@ -218,18 +225,18 @@ def get_subscription(self, subscription_id=None): raise CLIError("Please run 'az account set' to select active account.") return result[0] - def get_login_credentials(self, for_graph_client=False, subscription_id=None): + def get_login_credentials(self, credential_type=CredentialType.management, + subscription_id=None): account = self.get_subscription(subscription_id) user_type = account[_USER_ENTITY][_USER_TYPE] username_or_sp_id = account[_USER_ENTITY][_USER_NAME] - resource = self._graph_resource_uri if for_graph_client else self._management_resource_uri if user_type == _USER: token_retriever = lambda: self._creds_cache.retrieve_token_for_user( - username_or_sp_id, account[_TENANT_ID], resource) + username_or_sp_id, account[_TENANT_ID], credential_type.value) auth_object = AdalAuthentication(token_retriever) else: token_retriever = lambda: self._creds_cache.retrieve_token_for_service_principal( - username_or_sp_id, resource) + username_or_sp_id, credential_type.value) auth_object = AdalAuthentication(token_retriever) return (auth_object, diff --git a/src/azure-cli-core/azure/cli/core/application.py b/src/azure-cli-core/azure/cli/core/application.py index dad55a1215a..9315940ace5 100644 --- a/src/azure-cli-core/azure/cli/core/application.py +++ b/src/azure-cli-core/azure/cli/core/application.py @@ -100,6 +100,8 @@ def execute(self, unexpanded_argv): self.session['command'] = expanded_arg.command try: _validate_arguments(expanded_arg) + except CLIError: + raise except: # pylint: disable=bare-except err = sys.exc_info()[1] getattr(expanded_arg, '_parser', self.parser).validation_error(str(err)) diff --git a/src/azure-cli-core/azure/cli/core/tests/test_profile.py b/src/azure-cli-core/azure/cli/core/tests/test_profile.py index fd70b0c7ea9..3c8aa5b8ba7 100644 --- a/src/azure-cli-core/azure/cli/core/tests/test_profile.py +++ b/src/azure-cli-core/azure/cli/core/tests/test_profile.py @@ -9,7 +9,7 @@ import mock from azure.mgmt.resource.subscriptions.models import (SubscriptionState, Subscription, SubscriptionPolicies, spendingLimit) -from azure.cli.core._profile import Profile, CredsCache, SubscriptionFinder +from azure.cli.core._profile import Profile, CredsCache, SubscriptionFinder, CredentialType from azure.cli.core._azure_env import ENV_DEFAULT class Test_Profile(unittest.TestCase): @@ -253,7 +253,7 @@ def test_get_login_credentials_for_graph_client(self, mock_get_token, mock_read_ False, ENV_DEFAULT) profile._set_subscriptions(consolidated) #action - cred, _, tenant_id = profile.get_login_credentials(for_graph_client=True) + cred, _, tenant_id = profile.get_login_credentials(credential_type=CredentialType.rbac) _, _ = cred._token_retriever() #verify mock_get_token.assert_called_once_with(mock.ANY, self.user1, self.tenant_id, diff --git a/src/azure-cli-core/setup.py b/src/azure-cli-core/setup.py index d37bc48bdaa..b860264c8fa 100644 --- a/src/azure-cli-core/setup.py +++ b/src/azure-cli-core/setup.py @@ -46,7 +46,6 @@ 'adal>=0.4.1', 'applicationinsights', 'argcomplete>=1.3.0', - 'azure==2.0.0rc6', 'azure-mgmt-trafficmanager==0.30.0rc6', 'azure-mgmt-dns==0.30.0rc6', 'colorama', diff --git a/src/command_modules/azure-cli-iot/requirements.txt b/src/command_modules/azure-cli-iot/requirements.txt index 2c7fe4aca91..9b30be5371e 100644 --- a/src/command_modules/azure-cli-iot/requirements.txt +++ b/src/command_modules/azure-cli-iot/requirements.txt @@ -1,2 +1 @@ -azure==2.0.0rc6 azure-mgmt-iothub==0.1.0 diff --git a/src/command_modules/azure-cli-iot/setup.py b/src/command_modules/azure-cli-iot/setup.py index 4c61f89d5a4..0ced356e2ea 100644 --- a/src/command_modules/azure-cli-iot/setup.py +++ b/src/command_modules/azure-cli-iot/setup.py @@ -26,7 +26,6 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', 'azure-mgmt-iothub==0.1.0', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/__init__.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/__init__.py index b22daf91a9d..af69ed26a5b 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/__init__.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/__init__.py @@ -9,4 +9,4 @@ import azure.cli.command_modules.keyvault.custom import azure.cli.command_modules.keyvault._params import azure.cli.command_modules.keyvault.generated - +import azure.cli.command_modules.keyvault.convenience diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_command_type.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_command_type.py new file mode 100644 index 00000000000..d7a0f783f6c --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_command_type.py @@ -0,0 +1,77 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +import base64 + +from msrest.paging import Paged +from msrest.exceptions import ValidationError +from msrestazure.azure_operation import AzureOperationPoller + +from azure.cli.core.commands import command_table, CliCommand, LongRunningOperation +from azure.cli.core.commands._introspection import \ + (extract_full_summary_from_signature, extract_args_from_signature) +from azure.cli.core._profile import Profile, CredentialType +from azure.cli.core._util import CLIError + +from azure.cli.command_modules.keyvault.convenience import KeyVaultClient +from azure.cli.command_modules.keyvault.keyvaultclient.models import KeyVaultErrorException + +def _encode_hex(item): + """ Recursively crawls the object structure and converts bytes or bytearrays to base64 + encoded strings. """ + if isinstance(item, list): + return [_encode_hex(x) for x in item] + elif hasattr(item, '__dict__'): + for key, val in item.__dict__.items(): + item.__dict__[key] = _encode_hex(val) + return item + elif isinstance(item, bytes) or isinstance(item, bytearray): + return base64.b64encode(item).decode('utf-8') + else: + return item + +def _create_key_vault_command(name, operation, transform_result, table_transformer): + + def _execute_command(kwargs): + + try: + client = KeyVaultClient( + Profile().get_login_credentials(credential_type=CredentialType.keyvault)[0]) + result = operation(client, **kwargs) + + # apply results transform if specified + if transform_result: + return _encode_hex(transform_result(result)) + + # otherwise handle based on return type of results + if isinstance(result, AzureOperationPoller): + return _encode_hex(LongRunningOperation('Starting {}'.format(name))(result)) + elif isinstance(result, Paged): + try: + return _encode_hex(list(result)) + except TypeError: + # TODO: Workaround for an issue in either KeyVault server-side or msrest + # See https://github.com/Azure/autorest/issues/1309 + return [] + else: + return _encode_hex(result) + except (ValidationError, KeyVaultErrorException) as ex: + try: + raise CLIError(ex.inner_exception.error.message) + except AttributeError: + raise CLIError(ex) + + name = ' '.join(name.split()) + cmd = CliCommand(name, _execute_command, table_transformer=table_transformer) + cmd.description = extract_full_summary_from_signature(operation) + cmd.arguments.update(extract_args_from_signature(operation)) + return cmd + +def cli_keyvault_data_plane_command( + name, operation, transform=None, table_transformer=None): + """ Registers an Azure CLI KeyVault Data Plane command. These commands must respond to a + challenge from the service when they make requests. """ + command = _create_key_vault_command(name, operation, transform, table_transformer) + command_table[command.name] = command diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_help.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_help.py index 832f37105b7..183c81c66dc 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_help.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_help.py @@ -11,3 +11,30 @@ type: group short-summary: Safeguard and maintain control of keys, secrets, and certificates. """ + +helps['keyvault create'] = """ + type: command + short-summary: Create a new Key Vault. + long-summary: "Default permissions are created for the current user unless the --no-self-perms + flag is specified." +""" + +helps['keyvault delete'] = """ + type: command + short-summary: Delete a Key Vault. +""" + +helps['keyvault list'] = """ + type: command + short-summary: List Key Vaults within a subscription or resource group. +""" + +helps['keyvault show'] = """ + type: command + short-summary: Show details of a Key Vault. +""" + +helps['keyvault update'] = """ + type: command + short-summary: Update properties of a Key Vault. +""" diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_params.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_params.py index f24a1af2742..78af558e3ec 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_params.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_params.py @@ -4,26 +4,98 @@ #--------------------------------------------------------------------------------------------- # pylint: disable=line-too-long -from azure.mgmt.keyvault.models.key_vault_management_client_enums import (SkuName) +import json + +from azure.mgmt.keyvault.models.key_vault_management_client_enums import \ + (SkuName, KeyPermissions, SecretPermissions, CertificatePermissions) from azure.cli.core.commands.parameters import ( - get_resource_name_completion_list, - name_type, enum_choice_list) -from azure.cli.core.commands import register_cli_argument + get_resource_name_completion_list, resource_group_name_type, + tags_type, ignore_type, enum_choice_list) +from azure.cli.core.commands import \ + (register_cli_argument, register_extra_cli_argument, CliArgumentType) import azure.cli.core.commands.arm # pylint: disable=unused-import -from azure.cli.command_modules.keyvault._validators import (process_policy_namespace, process_set_policy_perms_namespace) +from azure.cli.command_modules.keyvault.keyvaultclient.models.key_vault_client_enums import \ + (JsonWebKeyOperation) +from azure.cli.command_modules.keyvault.keyvaultclient.models import \ + (KeyAttributes, SecretAttributes, CertificateAttributes) +from azure.cli.command_modules.keyvault._validators import \ + (datetime_type, + get_attribute_validator, + vault_base_url_type, validate_key_import_source, + validate_key_type, validate_key_ops, validate_policy_permissions, + validate_principal, validate_resource_group_name) + +# CUSTOM CHOICE LISTS + +key_permission_values = ', '.join([x.value for x in KeyPermissions]) +secret_permission_values = ', '.join([x.value for x in SecretPermissions]) +certificate_permission_values = ', '.join([x.value for x in CertificatePermissions]) +json_web_key_op_values = ', '.join([x.value for x in JsonWebKeyOperation]) + +# KEY ATTRIBUTE PARAMETER REGISTRATION + +def register_attributes_argument(scope, name, attr_class, create=False): + register_cli_argument(scope, '{}_attributes'.format(name), ignore_type, validator=get_attribute_validator(name, attr_class, create)) + if create: + register_extra_cli_argument(scope, 'disabled', action='store_true', help='Create {} in disabled state.'.format(name)) + else: + register_extra_cli_argument(scope, 'enabled', default=None, choices=['true', 'false'], help='Enable the {}.'.format(name)) + register_extra_cli_argument(scope, 'expires', default=None, help='Expiration UTC datetime (Y-m-d\'T\'H:M\'Z\').', type=datetime_type) + register_extra_cli_argument(scope, 'not_before', default=None, help='Key not usable before the provided UTC datetime (Y-m-d\'T\'H:M\'Z\').', type=datetime_type) -register_cli_argument('keyvault', 'vault_name', arg_type=name_type, help='Name of the key vault', completer=get_resource_name_completion_list('Microsoft.KeyVault/vaults'), id_part='name') +# ARGUMENT DEFINITIONS + +vault_name_type = CliArgumentType(help='Name of the key vault.', options_list=('--vault-name',), completer=get_resource_name_completion_list('Microsoft.KeyVault/vaults'), id_part=None) + +# PARAMETER REGISTRATIONS + +register_cli_argument('keyvault', 'resource_group_name', resource_group_name_type, id_part=None, required=False, help='Proceed only if Key Vault belongs to the specified resource group.', validator=validate_resource_group_name) +register_cli_argument('keyvault', 'vault_name', vault_name_type, options_list=('--name', '-n')) register_cli_argument('keyvault', 'object_id', help='a GUID that identifies the principal that will receive permissions') register_cli_argument('keyvault', 'spn', help='name of a service principal that will receive permissions') register_cli_argument('keyvault', 'upn', help='name of a user principal that will receive permissions') +register_cli_argument('keyvault', 'tags', tags_type) +register_cli_argument('keyvault create', 'resource_group_name', resource_group_name_type, completer=None, validator=None) register_cli_argument('keyvault create', 'vault_name', completer=None) register_cli_argument('keyvault create', 'sku', **enum_choice_list(SkuName)) register_cli_argument('keyvault create', 'no_self_perms', action='store_true', help="If specified, don't add permissions for the current user in the new vault") -register_cli_argument('keyvault set-policy', 'object_id', validator=process_policy_namespace) -register_cli_argument('keyvault delete-policy', 'object_id', validator=process_policy_namespace) -# TODO Validate perms_to_keys and perms_to_secrets when enums are added in keyvault SDK -register_cli_argument('keyvault set-policy', 'perms_to_keys', nargs='*', validator=process_set_policy_perms_namespace, help='Permissions to keys') -register_cli_argument('keyvault set-policy', 'perms_to_secrets', nargs='*', help='Permissions to secrets') +register_cli_argument('keyvault list', 'resource_group_name', resource_group_name_type, validator=None) + +register_cli_argument('keyvault delete-policy', 'object_id', validator=validate_principal) +register_cli_argument('keyvault set-policy', 'key_permissions', metavar='PERM', nargs='*', help='Space separated list. Possible values: {}'.format(key_permission_values), arg_group='Permission', validator=validate_policy_permissions) +register_cli_argument('keyvault set-policy', 'secret_permissions', metavar='PERM', nargs='*', help='Space separated list. Possible values: {}'.format(secret_permission_values), arg_group='Permission') +register_cli_argument('keyvault set-policy', 'certificate_permissions', metavar='PERM', nargs='*', help='Space separated list. Possible values: {}'.format(certificate_permission_values), arg_group='Permission') + +for item in ['key', 'secret', 'certificate']: + register_cli_argument('keyvault {}'.format(item), '{}_name'.format(item), options_list=('--name', '-n'), help='Name of the {}.'.format(item), id_part='child_name') + register_cli_argument('keyvault {}'.format(item), 'vault_base_url', vault_name_type, type=vault_base_url_type, id_part=None) + +register_cli_argument('keyvault key', 'key_ops', options_list=('--ops',), nargs='*', help='Space separated list of permitted JSON web key operations. Possible values: {}'.format(json_web_key_op_values), validator=validate_key_ops, type=str.lower) +register_cli_argument('keyvault key', 'key_version', options_list=('--version', '-v'), help='The key version. If omitted, uses the latest version.') + +for item in ['create', 'import']: + register_cli_argument('keyvault key {}'.format(item), 'destination', options_list=('--protection', '-p'), choices=['software', 'hsm'], help='Specifies the type of key protection.', validator=validate_key_type, type=str.lower) + register_cli_argument('keyvault key {}'.format(item), 'disabled', action='store_true', help='Create key in disabled state.') + register_cli_argument('keyvault key {}'.format(item), 'key_size', options_list=('--size',), type=int) + register_cli_argument('keyvault key {}'.format(item), 'expires', default=None, help='Expiration UTC datetime (Y-m-d\'T\'H:M\'Z\').', type=datetime_type) + register_cli_argument('keyvault key {}'.format(item), 'not_before', default=None, help='Key not usable before the provided UTC datetime (Y-m-d\'T\'H:M\'Z\').', type=datetime_type) + +register_cli_argument('keyvault key import', 'pem_file', help='PEM file containing the key to be imported.', arg_group='Key Source', validator=validate_key_import_source) +register_cli_argument('keyvault key import', 'pem_password', help='Password of PEM file.', arg_group='Key Source') +register_cli_argument('keyvault key import', 'byok_file', help='BYOK file containing the key to be imported. Must not be password protected.', arg_group='Key Source') + +register_attributes_argument('keyvault key set-attributes', 'key', KeyAttributes) + +register_cli_argument('keyvault secret', 'secret_version', options_list=('--version', '-v'), help='The secret version. If omitted, uses the latest version.') + +register_attributes_argument('keyvault secret set', 'secret', SecretAttributes, create=True) +register_attributes_argument('keyvault secret set-attributes', 'secret', SecretAttributes) + +register_cli_argument('keyvault certificate', 'certificate_version', options_list=('--version', '-v'), help='The certificate version. If omitted, uses the latest version.') + +for item in ['create', 'set-attributes']: + register_attributes_argument('keyvault certificate {}'.format(item), 'certificate', CertificateAttributes, item == 'create') + register_cli_argument('keyvault certificate {}'.format(item), 'certificate_policy', options_list=('--policy', '-p'), help='JSON encoded policy defintion. Use @{file} to load from a file.', type=json.loads) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_validators.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_validators.py index e36b8687c54..71730c34387 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_validators.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/_validators.py @@ -4,22 +4,120 @@ #--------------------------------------------------------------------------------------------- import argparse +from datetime import datetime + +from azure.mgmt.keyvault import KeyVaultManagementClient +from azure.mgmt.keyvault.models.key_vault_management_client_enums import \ + (KeyPermissions, SecretPermissions, CertificatePermissions) + +from azure.cli.command_modules.keyvault.keyvaultclient.models.key_vault_client_enums import \ + (JsonWebKeyOperation) + +from azure.cli.core.commands.client_factory import get_mgmt_service_client +from azure.cli.core.commands.arm import parse_resource_id +from azure.cli.core._util import CLIError + +def _extract_version(item_id): + return item_id.split('/')[-1] # COMMAND NAMESPACE VALIDATORS -def process_policy_namespace(ns): - # TODO Consider supporting mutual exclusion in CLI - # https://docs.python.org/2/library/argparse.html#mutual-exclusion - num_set = sum(1 for p in [ns.object_id, ns.spn, ns.upn] if p) - if num_set == 0: - raise argparse.ArgumentError( - None, 'One of the arguments --object-id --spn --upn is required.') - elif num_set > 1: +# PARAMETER NAMESPACE VALIDATORS + +def get_attribute_validator(name, attribute_class, create=False): + + def validator(ns): + ns_dict = ns.__dict__ + enabled = not ns_dict.pop('disabled') if create else ns_dict.pop('enabled') == 'true' + attributes = attribute_class( + enabled, + ns_dict.pop('not_before'), + ns_dict.pop('expires')) + setattr(ns, '{}_attributes'.format(name), attributes) + + return validator + +def validate_key_import_source(ns): + byok_file = ns.byok_file + pem_file = ns.pem_file + pem_password = ns.pem_password + if (not byok_file and not pem_file) or (byok_file and pem_file): + raise ValueError('supply exactly one: --byok-file, --pem-file') + if byok_file and pem_password: + raise ValueError('--byok-file cannot be used with --pem-password') + if pem_password and not pem_file: + raise ValueError('--pem-password must be used with --pem-file') + +def validate_key_ops(ns): + allowed = [x.value.lower() for x in JsonWebKeyOperation] + for p in ns.key_ops or []: + if p not in allowed: + raise ValueError("unrecognized key operation '{}'".format(p)) + +def validate_key_type(ns): + if ns.destination: + dest_to_type_map = { + 'software': 'RSA', + 'hsm': 'RSA-HSM' + } + ns.destination = dest_to_type_map[ns.destination] + +def validate_policy_permissions(ns): + key_perms = ns.key_permissions + secret_perms = ns.secret_permissions + cert_perms = ns.certificate_permissions + + if not any([key_perms, secret_perms, cert_perms]): raise argparse.ArgumentError( - None, 'Specify only --object-id, --spn or --upn.') + None, + 'specify at least one: --key-permissions, --secret-permissions, ' + '--certificate-permissions') + + key_allowed = [x.value for x in KeyPermissions] + secret_allowed = [x.value for x in SecretPermissions] + cert_allowed = [x.value for x in CertificatePermissions] + + for p in key_perms or []: + if p not in key_allowed: + raise ValueError("unrecognized key permission '{}'".format(p)) + + for p in secret_perms or []: + if p not in secret_allowed: + raise ValueError("unrecognized secret permission '{}'".format(p)) -def process_set_policy_perms_namespace(ns): - if ns.perms_to_keys is None and ns.perms_to_secrets is None: + for p in cert_perms or []: + if p not in cert_allowed: + raise ValueError("unrecognized cert permission '{}'".format(p)) + +def validate_principal(ns): + num_set = sum(1 for p in [ns.object_id, ns.spn, ns.upn] if p) + if num_set != 1: raise argparse.ArgumentError( - None, 'Specify at least --perms-to-keys or --perms-to-secrets.') + None, 'specify exactly one: --object-id, --spn, --upn') + +def validate_resource_group_name(ns): + if not ns.resource_group_name: + vault_name = ns.vault_name + client = get_mgmt_service_client(KeyVaultManagementClient).vaults + for vault in client.list(): + id_comps = parse_resource_id(vault.id) + if id_comps['name'] == vault_name: + ns.resource_group_name = id_comps['resource_group'] + return + raise CLIError( + "The Resource 'Microsoft.KeyVault/vaults/{}'".format(vault_name) + \ + " not found within subscription") + +# ARGUMENT TYPES + +def datetime_type(string): + ''' Validates UTC datettime in format '%Y-%m-%d\'T\'%H:%M\'Z\''. ''' + date_format = '%Y-%m-%dT%H:%MZ' + return datetime.strptime(string, date_format) +def vault_base_url_type(name): + from azure.cli.core._profile import Profile + from azure.cli.core._azure_env import ENDPOINT_URLS + profile = Profile() + suffix = profile.env[ENDPOINT_URLS.KEY_VAULT].replace('https://', '.') + return 'https://{}{}'.format(name, suffix) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/__init__.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/__init__.py new file mode 100644 index 00000000000..06e4c106388 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/__init__.py @@ -0,0 +1,14 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +from azure.cli.command_modules.keyvault.convenience import \ + http_bearer_challenge_cache as HttpBearerChallengeCache +from .http_bearer_challenge import HttpBearerChallenge +from .key_vault_client import KeyVaultClient +from .version import VERSION + +__all__ = ['HttpBearerChallengeCache', 'HttpBearerChallenge', 'KeyVaultClient'] + +__version__ = VERSION diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge.py new file mode 100644 index 00000000000..2327a99379c --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge.py @@ -0,0 +1,91 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +#pylint: skip-file + +import urllib + +class HttpBearerChallenge(object): + + def __init__(self, request_uri, challenge): + """ Parses an HTTP WWW-Authentication Bearer challenge from a server. """ + self.source_authority = self._validate_request_uri(request_uri) + self.source_uri = request_uri + self._parameters = {} + + trimmed_challenge = self._validate_challenge(challenge) + + # split trimmed challenge into comma-separated name=value pairs. Values are expected + # to be surrounded by quotes which are stripped here. + for item in trimmed_challenge.split(','): + # process name=value pairs + comps = item.split('=') + if len(comps) == 2: + key = comps[0].strip(' "') + value = comps[1].strip(' "') + if key: + self._parameters[key] = value + + # minimum set of parameters + if not self._parameters: + raise ValueError('Invalid challenge parameters') + + # must specify authorization or authorization_uri + if 'authorization' not in self._parameters and 'authorization_uri' not in self._parameters: + raise ValueError('Invalid challenge parameters') + + # pylint: disable=no-self-use + def is_bearer_challenge(self, authentication_header): + """ Tests whether an authentication header is a Bearer challenge. + :param authentication_header: the authentication header to test + rtype: bool """ + if not authentication_header: + return False + + return authentication_header.strip().startswith('Bearer ') + + def get_value(self, key): + return self._parameters.get(key) + + def get_authorization_server(self): + """ Returns the URI for the authorization server if present, otherwise empty string. """ + value = '' + for key in ['authorization_uri', 'authorization']: + value = self.get_value(key) or '' + if value: + break + return value + + def get_scope(self): + """ Returns the scope if present, otherwise empty string. """ + return self.get_value('scope') or '' + + # pylint: disable=no-self-use + def _validate_challenge(self, challenge): + """ Verifies that the challenge is a Bearer challenge and returns the key=value pairs. """ + bearer_string = 'Bearer ' + if not challenge: + raise ValueError('Challenge cannot be empty') + + challenge = challenge.strip() + if not challenge.startswith(bearer_string): + raise ValueError('Challenge is not Bearer') + + return challenge[len(bearer_string):] + + # pylint: disable=no-self-use + def _validate_request_uri(self, uri): + """ Extracts the host authority from the given URI. """ + if not uri: + raise ValueError('request_uri cannot be empty') + + uri = urllib.parse.urlparse(uri) + if not uri.netloc: + raise ValueError('request_uri must be an absolute URI') + + if uri.scheme.lower() not in ['http', 'https']: + raise ValueError('request_uri must be HTTP or HTTPS') + + return uri.netloc diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge_cache/__init__.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge_cache/__init__.py new file mode 100644 index 00000000000..5e8b55e37f4 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/http_bearer_challenge_cache/__init__.py @@ -0,0 +1,50 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +#pylint: skip-file + +import urllib + +# TODO turn this into a thread safe Singleton +_cache = {} + +def get_challenge_for_url(url): + """ Gets the challenge for the cached URL. + :param url: the URL the challenge is cached for. + :rtype: HttpBearerChallenge """ + if not url: + raise ValueError('URL cannot be None') + + url = urllib.parse.urlparse(url) + return _cache.get(url.netloc) + +def remove_challenge_for_url(url): + """ Removes the cached challenge for the specified URL. + :param url: the URL for which to remove the cached challenge """ + if not url: + raise ValueError('URL cannot be empty') + + url = urllib.parse.urlparse(url) + del _cache[url.netloc] + +def set_challenge_for_url(url, challenge): + """ Caches the challenge for the specified URL. + :param url: the URL for which to cache the challenge + :param challenge: the challenge to cache """ + if not url: + raise ValueError('URL cannot be empty') + + if not challenge: + raise ValueError('Challenge cannot be empty') + + src_url = urllib.parse.urlparse(url) + if src_url.netloc != challenge.source_authority: + raise ValueError('Source URL and Challenge URL do not match') + + _cache[src_url.netloc] = challenge + +def clear(): + """ Clears the cache. """ + _cache = {} diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_client.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_client.py new file mode 100644 index 00000000000..5670dc66a64 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_client.py @@ -0,0 +1,184 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +# pylint: disable=line-too-long,too-many-arguments,too-many-function-args,too-many-public-methods +from azure.cli.command_modules.keyvault.keyvaultclient import KeyVaultClient as _KeyVaultClient + +class KeyVaultClient(object): + + def __init__(self, credentials, api_version='2015-06-01', accept_language='en-US', long_running_operation_retry_timeout=30, generate_client_request_id=True, filepath=None): + self.keyvault = _KeyVaultClient(credentials, api_version, accept_language, long_running_operation_retry_timeout, generate_client_request_id, filepath) + + def create_key(self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.create_key(vault_base_url, key_name, kty, key_size, key_ops, key_attributes, tags, custom_headers, raw, **operation_config) + create_key.__doc__ = _KeyVaultClient.create_key.__doc__ + + def import_key(self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.import_key(vault_base_url, key_name, key, hsm, key_attributes, tags, custom_headers, raw, **operation_config) + import_key.__doc__ = _KeyVaultClient.import_key.__doc__ + + def delete_key(self, vault_base_url, key_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_key(vault_base_url, key_name, custom_headers, raw, **operation_config) + delete_key.__doc__ = _KeyVaultClient.delete_key.__doc__ + + def update_key(self, vault_base_url, key_name, key_version='', key_ops=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_key(vault_base_url, key_name, key_version, key_ops, key_attributes, tags, custom_headers, raw, **operation_config) + update_key.__doc__ = _KeyVaultClient.update_key.__doc__ + + def get_key(self, vault_base_url, key_name, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_key(vault_base_url, key_name, key_version, custom_headers, raw, **operation_config) + get_key.__doc__ = _KeyVaultClient.get_key.__doc__ + + def get_key_versions(self, vault_base_url, key_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_key_versions(vault_base_url, key_name, maxresults, custom_headers, raw, **operation_config) + get_key_versions.__doc__ = _KeyVaultClient.get_key_versions.__doc__ + + def get_keys(self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_keys(vault_base_url, maxresults, custom_headers, raw, **operation_config) + get_keys.__doc__ = _KeyVaultClient.get_keys.__doc__ + + def backup_key(self, vault_base_url, key_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.backup_key(vault_base_url, key_name, custom_headers, raw, **operation_config) + backup_key.__doc__ = _KeyVaultClient.backup_key.__doc__ + + def restore_key(self, vault_base_url, key_bundle_backup, custom_headers=None, raw=False, **operation_config): + return self.keyvault.restore_key(vault_base_url, key_bundle_backup, custom_headers, raw, **operation_config) + restore_key.__doc__ = _KeyVaultClient.restore_key.__doc__ + + def encrypt(self, vault_base_url, key_name, algorithm, value, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.encrypt(vault_base_url, key_name, key_version, algorithm, value, custom_headers, raw, **operation_config) + encrypt.__doc__ = _KeyVaultClient.encrypt.__doc__ + + def decrypt(self, vault_base_url, key_name, algorithm, value, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.decrypt(vault_base_url, key_name, key_version, algorithm, value, custom_headers, raw, **operation_config) + decrypt.__doc__ = _KeyVaultClient.decrypt.__doc__ + + def sign(self, vault_base_url, key_name, algorithm, value, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.sign(vault_base_url, key_name, key_version, algorithm, value, custom_headers, raw, **operation_config) + sign.__doc__ = _KeyVaultClient.sign.__doc__ + + def verify(self, vault_base_url, key_name, algorithm, digest, signature, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.verify(vault_base_url, key_name, key_version, algorithm, digest, signature, custom_headers, raw, **operation_config) + verify.__doc__ = _KeyVaultClient.verify.__doc__ + + def wrap_key(self, vault_base_url, key_name, algorithm, value, key_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.wrap_key(self, vault_base_url, key_name, key_version, algorithm, value, custom_headers, raw, **operation_config) + wrap_key.__doc__ = _KeyVaultClient.wrap_key.__doc__ + + def set_secret(self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.set_secret(vault_base_url, secret_name, value, tags, content_type, secret_attributes, custom_headers, raw, **operation_config) + set_secret.__doc__ = _KeyVaultClient.set_secret.__doc__ + + def delete_secret(self, vault_base_url, secret_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_secret(vault_base_url, secret_name, custom_headers, raw, **operation_config) + delete_secret.__doc__ = _KeyVaultClient.delete_secret.__doc__ + + def update_secret(self, vault_base_url, secret_name, secret_version='', content_type=None, secret_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_secret(vault_base_url, secret_name, secret_version, content_type, secret_attributes, tags, custom_headers, raw, **operation_config) + update_secret.__doc__ = _KeyVaultClient.update_secret.__doc__ + + def get_secret(self, vault_base_url, secret_name, secret_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_secret(vault_base_url, secret_name, secret_version, custom_headers, raw, **operation_config) + get_secret.__doc__ = _KeyVaultClient.get_secret.__doc__ + + def get_secrets(self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_secrets(vault_base_url, maxresults, custom_headers, raw, **operation_config) + get_secrets.__doc__ = _KeyVaultClient.get_secrets.__doc__ + + def get_secret_versions(self, vault_base_url, secret_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_secret_versions(vault_base_url, secret_name, maxresults, custom_headers, raw, **operation_config) + get_secret_versions.__doc__ = _KeyVaultClient.get_secret_versions.__doc__ + + def get_certificates(self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificates(vault_base_url, maxresults, custom_headers, raw, **operation_config) + get_certificates.__doc__ = _KeyVaultClient.get_certificates.__doc__ + + def delete_certificate(self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_certificate(vault_base_url, certificate_name, custom_headers, raw, **operation_config) + delete_certificate.__doc__ = _KeyVaultClient.delete_certificate.__doc__ + + # pylint: disable=redefined-builtin + def set_certificate_contacts(self, vault_base_url, id=None, contact_list=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.set_certificate_contacts(vault_base_url, id, contact_list, custom_headers, raw, **operation_config) + set_certificate_contacts.__doc__ = _KeyVaultClient.set_certificate_contacts.__doc__ + + def get_certificate_contacts(self, vault_base_url, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_contacts(vault_base_url, custom_headers, raw, **operation_config) + get_certificate_contacts.__doc__ = _KeyVaultClient.get_certificate_contacts.__doc__ + + def delete_certificate_contacts(self, vault_base_url, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_certificate_contacts(vault_base_url, custom_headers, raw, **operation_config) + delete_certificate_contacts.__doc__ = _KeyVaultClient.delete_certificate_contacts.__doc__ + + def get_certificate_issuers(self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_issuers(vault_base_url, maxresults, custom_headers, raw, **operation_config) + get_certificate_issuers.__doc__ = _KeyVaultClient.get_certificate_issuers.__doc__ + + def set_certificate_issuer(self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.set_certificate_issuer(vault_base_url, issuer_name, provider, credentials, organization_details, attributes, custom_headers, raw, **operation_config) + set_certificate_issuer.__doc__ = _KeyVaultClient.set_certificate_issuer.__doc__ + + def update_certificate_issuer(self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_certificate_issuer(vault_base_url, issuer_name, provider, credentials, organization_details, attributes, custom_headers, raw, **operation_config) + update_certificate_issuer.__doc__ = _KeyVaultClient.update_certificate_issuer.__doc__ + + def get_certificate_issuer(self, vault_base_url, issuer_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_issuer(vault_base_url, issuer_name, custom_headers, raw, **operation_config) + get_certificate_issuer.__doc__ = _KeyVaultClient.get_certificate_issuer.__doc__ + + def delete_certificate_issuer(self, vault_base_url, issuer_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_certificate_issuer(vault_base_url, issuer_name, custom_headers, raw, **operation_config) + delete_certificate_issuer.__doc__ = _KeyVaultClient.delete_certificate_issuer.__doc__ + + def create_certificate(self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + operation = self.keyvault.create_certificate(vault_base_url, certificate_name, certificate_policy, certificate_attributes, tags, custom_headers, raw, **operation_config) + # TODO: Custom polling logic + return operation + create_certificate.__doc__ = _KeyVaultClient.create_certificate.__doc__ + + def import_certificate(self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.import_certificate(vault_base_url, certificate_name, base64_encoded_certificate, password, certificate_policy, certificate_attributes, tags, custom_headers, raw, **operation_config) + import_certificate.__doc__ = _KeyVaultClient.import_certificate.__doc__ + + def get_certificate_versions(self, vault_base_url, certificate_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_versions(vault_base_url, certificate_name, maxresults, custom_headers, raw, **operation_config) + get_certificate_versions.__doc__ = _KeyVaultClient.get_certificate_versions.__doc__ + + def get_certificate_policy(self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_policy(vault_base_url, certificate_name, custom_headers, raw, **operation_config) + get_certificate_policy.__doc__ = _KeyVaultClient.get_certificate_policy.__doc__ + + def update_certificate_policy(self, vault_base_url, certificate_name, certificate_policy, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_certificate_policy(vault_base_url, certificate_name, certificate_policy, custom_headers, raw, **operation_config) + update_certificate_policy.__doc__ = _KeyVaultClient.update_certificate_policy.__doc__ + + def update_certificate(self, vault_base_url, certificate_name, certificate_version='', certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_certificate(vault_base_url, certificate_name, certificate_version, certificate_policy, certificate_attributes, tags, custom_headers, raw, **operation_config) + update_certificate.__doc__ = _KeyVaultClient.update_certificate.__doc__ + + def get_certificate(self, vault_base_url, certificate_name, certificate_version='', custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate(vault_base_url, certificate_name, certificate_version, custom_headers, raw, **operation_config) + get_certificate.__doc__ = _KeyVaultClient.get_certificate.__doc__ + + def update_certificate_operation(self, vault_base_url, certificate_name, cancellation_requested, custom_headers=None, raw=False, **operation_config): + return self.keyvault.update_certificate_operation(vault_base_url, certificate_name, cancellation_requested, custom_headers, raw, **operation_config) + update_certificate_operation.__doc__ = _KeyVaultClient.update_certificate_operation.__doc__ + + def get_certificate_operation(self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.get_certificate_operation(vault_base_url, certificate_name, custom_headers, raw, **operation_config) + get_certificate_operation.__doc__ = _KeyVaultClient.get_certificate_operation.__doc__ + + def delete_certificate_operation(self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + return self.keyvault.delete_certificate_operation(vault_base_url, certificate_name, custom_headers, raw, **operation_config) + delete_certificate_operation.__doc__ = _KeyVaultClient.delete_certificate_operation.__doc__ + + def merge_certificate(self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + return self.keyvault.merge_certificate(vault_base_url, certificate_name, x509_certificates, certificate_attributes, tags, custom_headers, raw, **operation_config) + merge_certificate.__doc__ = _KeyVaultClient.merge_certificate.__doc__ + +try: + KeyVaultClient.__doc__ = _KeyVaultClient.__doc__ +except AttributeError: + pass diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_credential.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_credential.py new file mode 100644 index 00000000000..45a59dc79b0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/key_vault_credential.py @@ -0,0 +1,24 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- + +#pylint: skip-file + +import adal +import urllib + +from msrest.authentication import Authentication + +from . import HttpBearerChallenge +from . import HttpBearerChallengeCache as ChallengeCache + +class KeyVaultCredential(Authentication): + + def __init__(self, token): + self._token = token + + def signed_session(self): + session = super(KeyVaultCredential, self).signed_session() + session.headers['Authorization'] = 'Bearer {}'.format(self._token or '') + return session diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/version.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/version.py new file mode 100644 index 00000000000..ec46ee2359e --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/convenience/version.py @@ -0,0 +1,13 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- + +VERSION = "2015-06-01" + diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/custom.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/custom.py index 8f3ad504b35..f986e125a2c 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/custom.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/custom.py @@ -2,22 +2,28 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. #--------------------------------------------------------------------------------------------- + from msrestazure.azure_exceptions import CloudError from azure.mgmt.keyvault.models import (VaultCreateOrUpdateParameters, VaultProperties, AccessPolicyEntry, Permissions, + CertificatePermissions, + KeyPermissions, + SecretPermissions, Sku, SkuName) from azure.graphrbac import GraphRbacManagementClient from azure.cli.core._util import CLIError +from azure.cli.core._profile import CredentialType import azure.cli.core._logging as _logging +from azure.cli.command_modules.keyvault.keyvaultclient import KeyVaultClient + logger = _logging.get_az_logger(__name__) def list_keyvault(client, resource_group_name=None): - ''' List Vaults. ''' vault_list = client.list_by_resource_group(resource_group_name=resource_group_name) \ if resource_group_name else client.list() return list(vault_list) @@ -81,24 +87,22 @@ def create_keyvault(client, resource_group_name, vault_name, location, #pylint:d tags=None): from azure.cli.core._profile import Profile profile = Profile() - cred, _, tenant_id = profile.get_login_credentials(for_graph_client=True) + cred, _, tenant_id = profile.get_login_credentials(credential_type=CredentialType.rbac) graph_client = GraphRbacManagementClient(cred, tenant_id) subscription = profile.get_subscription() if no_self_perms: access_policies = [] else: - # TODO Use the enums instead of strings when new keyvault SDK is released - # https://github.com/Azure/azure-sdk-for-python/blob/dev/azure-mgmt-keyvault/ - # azure/mgmt/keyvault/models/key_vault_management_client_enums.py - permissions = Permissions(keys=['get', - 'create', - 'delete', - 'list', - 'update', - 'import', - 'backup', - 'restore'], - secrets=['all']) + permissions = Permissions(keys=[KeyPermissions.get, + KeyPermissions.create, + KeyPermissions.delete, + KeyPermissions.list, + KeyPermissions.update, + KeyPermissions.import_enum, + KeyPermissions.backup, + KeyPermissions.restore], + secrets=[SecretPermissions.all], + certificates=[CertificatePermissions.all]) object_id = _get_current_user_object_id(graph_client) if not object_id: object_id = _get_object_id(graph_client, subscription=subscription) @@ -124,14 +128,13 @@ def create_keyvault(client, resource_group_name, vault_name, location, #pylint:d return client.create_or_update(resource_group_name=resource_group_name, vault_name=vault_name, parameters=parameters) - create_keyvault.__doc__ = VaultProperties.__doc__ def _object_id_args_helper(object_id, spn, upn): if not object_id: from azure.cli.core._profile import Profile profile = Profile() - cred, _, tenant_id = profile.get_login_credentials(for_graph_client=True) + cred, _, tenant_id = profile.get_login_credentials(credential_type=CredentialType.rbac) graph_client = GraphRbacManagementClient(cred, tenant_id) object_id = _get_object_id(graph_client, spn=spn, upn=upn) if not object_id: @@ -139,7 +142,8 @@ def _object_id_args_helper(object_id, spn, upn): return object_id def set_policy(client, resource_group_name, vault_name, #pylint:disable=too-many-arguments - object_id=None, spn=None, upn=None, perms_to_keys=None, perms_to_secrets=None): + object_id=None, spn=None, upn=None, key_permissions=None, secret_permissions=None, + certificate_permissions=None): object_id = _object_id_args_helper(object_id, spn, upn) vault = client.get(resource_group_name=resource_group_name, vault_name=vault_name) @@ -152,14 +156,17 @@ def set_policy(client, resource_group_name, vault_name, #pylint:disable=too-many vault.properties.access_policies.append(AccessPolicyEntry( tenant_id=vault.properties.tenant_id, object_id=object_id, - permissions=Permissions(keys=perms_to_keys, - secrets=perms_to_secrets))) + permissions=Permissions(keys=key_permissions, + secrets=secret_permissions, + certificates=certificate_permissions))) else: # Modify existing policy. - # If perms_to_keys is not set, use prev. value (similarly with perms_to_secrets). - keys = policy.permissions.keys if perms_to_keys is None else perms_to_keys - secrets = policy.permissions.secrets if perms_to_secrets is None else perms_to_secrets - policy.permissions = Permissions(keys=keys, secrets=secrets) + # If key_permissions is not set, use prev. value (similarly with secret_permissions). + keys = policy.permissions.keys if key_permissions is None else key_permissions + secrets = policy.permissions.secrets if secret_permissions is None else secret_permissions + certs = policy.permissions.certificates \ + if certificate_permissions is None else certificate_permissions + policy.permissions = Permissions(keys=keys, secrets=secrets, certificates=certs) return client.create_or_update(resource_group_name=resource_group_name, vault_name=vault_name, parameters=VaultCreateOrUpdateParameters( @@ -183,3 +190,101 @@ def delete_policy(client, resource_group_name, vault_name, object_id=None, spn=N location=vault.location, tags=vault.tags, properties=vault.properties)) + +# pylint: disable=too-many-arguments +def create_key(client, vault_base_url, key_name, destination, key_size=None, key_ops=None, + disabled=False, expires=None, not_before=None, tags=None): + from azure.cli.command_modules.keyvault.keyvaultclient.models import KeyAttributes + key_attrs = KeyAttributes(not disabled, not_before, expires) + return client.create_key( + vault_base_url, key_name, destination, key_size, key_ops, key_attrs, tags) +create_key.__doc__ = KeyVaultClient.create_key.__doc__ + +# pylint: disable=unused-variable,broad-except +def _is_pem_encrypted(data): + # TODO: Round 2 + try: + dump_data = OpenSSL.crypto.dump_certificate(OpenSSL.crypto.FILETYPE_PEM, data) + except Exception: + pass + +# pylint: disable=unused-variable,unused-argument +def _decrypt_rsa_private_key(data, password): + # TODO: Round 2 + pass + +# pylint: disable=unused-argument +def _private_key_from_pem(data): + # TODO: Round 2 + pass + +# pylint: disable=too-many-arguments,assignment-from-no-return,unused-variable +def import_key(client, vault_base_url, key_name, destination, key_ops=None, disabled=False, + expires=None, not_before=None, tags=None, pem_file=None, pem_password=None, + byok_file=None): + # TODO: Round 2 + from azure.cli.command_modules.keyvault.keyvaultclient.models import KeyAttributes, JsonWebKey + key_attrs = KeyAttributes(not disabled, not_before, expires) + key_obj = JsonWebKey(key_ops=key_ops) + if pem_file: + key_obj.destination = 'RSA' + logger.info('Reading %s', pem_file) + with open(pem_file, 'r') as f: + data = f.read() + if _is_pem_encrypted(data): + # prompt for password if not supplied? + key_info = _decrypt_rsa_private_key(data, pem_password) + else: + key_info = _private_key_from_pem(data) + logger.info('setting RSA parameters from PEM data') + # set rsa parameters + # set pem_file to key_file? + elif byok_file: + key_obj.destination = 'RSA-HSM' + key_obj.t = None # data from file + + return client.import_key( + vault_base_url, key_name, key_obj, destination == 'hsm', key_attrs, tags) + +def certificate_policy_template(): + from azure.cli.command_modules.keyvault.keyvaultclient.models import \ + (CertificatePolicy, CertificateAttributes, KeyProperties, SecretProperties, + X509CertificateProperties, SubjectAlternativeNames, LifetimeAction, Action, Trigger, + IssuerParameters) + from azure.cli.command_modules.keyvault.keyvaultclient.models.key_vault_client_enums import \ + (ActionType, JsonWebKeyType, KeyUsageType) + # create sample policy + template = CertificatePolicy( + key_properties=KeyProperties( + exportable=False, + key_type='{{ {} }}'.format(' | '.join([x.value for x in JsonWebKeyType])), + key_size=2048, + reuse_key=False), + secret_properties=SecretProperties('text/plain'), + x509_certificate_properties=X509CertificateProperties( + subject_alternative_names=SubjectAlternativeNames( + emails=['admin@mydomain.com', 'user@mydomain.com'], + dns_names=['www.mydomain.com'], + upns=['principal-name'] + ), + subject='X509 Distinguished Name', + ekus=['ekus'], + key_usage=['{{ {} }}'.format(' | '.join([x.value for x in KeyUsageType]))], + validity_in_months=60 + ), + lifetime_actions=[ + LifetimeAction( + Trigger(lifetime_percentage=90, days_before_expiry=7), + Action(action_type='{{ {} }}'.format(' | '.join([x.value for x in ActionType]))) + ) + ], + issuer_parameters=IssuerParameters(name='issuer-name'), + attributes=CertificateAttributes( + enabled=True + ) + ) + # remove properties which are read only + del template.id + del template.attributes.created + del template.attributes.updated + return template diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/generated.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/generated.py index bd44a67d805..5fa85d9216e 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/generated.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/generated.py @@ -2,22 +2,26 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. #--------------------------------------------------------------------------------------------- + +# pylint: disable=line-too-long + from .custom import (list_keyvault, create_keyvault, set_policy, delete_policy) -from azure.mgmt.keyvault import ( - KeyVaultManagementClient -) -from azure.mgmt.keyvault.operations import ( - VaultsOperations -) +from azure.mgmt.keyvault import KeyVaultManagementClient +from azure.mgmt.keyvault.operations import VaultsOperations + from azure.cli.core.commands import cli_command from azure.cli.core.commands.client_factory import get_mgmt_service_client from azure.cli.core.commands.arm import cli_generic_update_command +from azure.cli.command_modules.keyvault.convenience import KeyVaultClient +from azure.cli.command_modules.keyvault._command_type import cli_keyvault_data_plane_command +from azure.cli.command_modules.keyvault.custom import \ + (create_key, certificate_policy_template) + def _keyvault_client_factory(**_): return get_mgmt_service_client(KeyVaultManagementClient) factory = lambda args: _keyvault_client_factory(**args).vaults - cli_command('keyvault create', create_keyvault, factory) cli_command('keyvault list', list_keyvault, factory) cli_command('keyvault show', VaultsOperations.get, factory) @@ -34,7 +38,59 @@ def keyvault_update_setter(client, resource_group_name, vault_name, parameters): location=parameters.location, properties=parameters.properties)) -cli_generic_update_command('keyvault update', - VaultsOperations.get, - keyvault_update_setter, - lambda: _keyvault_client_factory().vaults) +cli_generic_update_command('keyvault update', VaultsOperations.get, keyvault_update_setter, lambda: _keyvault_client_factory().vaults) + +# Data Plane Commands + +def dummy(): + pass + +cli_keyvault_data_plane_command('keyvault key list', KeyVaultClient.get_keys) +cli_keyvault_data_plane_command('keyvault key list-versions', KeyVaultClient.get_key_versions) +cli_keyvault_data_plane_command('keyvault key create', create_key) +cli_keyvault_data_plane_command('keyvault key set-attributes', KeyVaultClient.update_key) +cli_keyvault_data_plane_command('keyvault key show', KeyVaultClient.get_key) +cli_keyvault_data_plane_command('keyvault key delete', KeyVaultClient.delete_key) +# TODO: Round 2 +#cli_keyvault_data_plane_command('keyvault key import', import_key) +#cli_keyvault_data_plane_command('keyvault key backup', KeyVaultClient.backup_key) +#cli_keyvault_data_plane_command('keyvault key restore', KeyVaultClient.restore_key) + +cli_keyvault_data_plane_command('keyvault secret list', KeyVaultClient.get_secrets) +cli_keyvault_data_plane_command('keyvault secret list-versions', KeyVaultClient.get_secret_versions) +cli_keyvault_data_plane_command('keyvault secret set', KeyVaultClient.set_secret) +cli_keyvault_data_plane_command('keyvault secret set-attributes', KeyVaultClient.update_secret) +cli_keyvault_data_plane_command('keyvault secret show', KeyVaultClient.get_secret) +cli_keyvault_data_plane_command('keyvault secret delete', KeyVaultClient.delete_secret) +# TODO: Round 2 +#cli_keyvault_data_plane_command('keyvault secret download', dummy) + +# TODO: Round 2 +#cli_keyvault_data_plane_command('keyvault certificate create', KeyVaultClient.create_certificate) +#cli_keyvault_data_plane_command('keyvault certificate list', KeyVaultClient.get_certificates) +#cli_keyvault_data_plane_command('keyvault certificate list-versions', KeyVaultClient.get_certificate_versions) +#cli_keyvault_data_plane_command('keyvault certificate show', KeyVaultClient.get_certificate) +#cli_keyvault_data_plane_command('keyvault certificate import', KeyVaultClient.import_certificate) +#cli_keyvault_data_plane_command('keyvault certificate merge', KeyVaultClient.merge_certificate) +#cli_keyvault_data_plane_command('keyvault certificate set-attributes', KeyVaultClient.update_certificate) +#cli_keyvault_data_plane_command('keyvault certificate delete', KeyVaultClient.delete_certificate) +#cli_keyvault_data_plane_command('keyvault certificate download', dummy) + +#cli_keyvault_data_plane_command('keyvault certificate contact show', KeyVaultClient.get_certificate_contacts) +#cli_keyvault_data_plane_command('keyvault certificate contact update', KeyVaultClient.set_certificate_contacts) +#cli_keyvault_data_plane_command('keyvault certificate contact delete', KeyVaultClient.delete_certificate_contacts) + +#cli_keyvault_data_plane_command('keyvault certificate issuer update', KeyVaultClient.update_certificate_issuer) +#cli_keyvault_data_plane_command('keyvault certificate issuer list', KeyVaultClient.get_certificate_issuers) +#cli_keyvault_data_plane_command('keyvault certificate issuer set', KeyVaultClient.set_certificate_issuer) +#cli_keyvault_data_plane_command('keyvault certificate issuer show', KeyVaultClient.get_certificate_issuer) +#cli_keyvault_data_plane_command('keyvault certificate issuer delete', KeyVaultClient.delete_certificate_issuer) + +#cli_keyvault_data_plane_command('keyvault certificate policy show', KeyVaultClient.get_certificate_policy) +#cli_keyvault_data_plane_command('keyvault certificate policy update', KeyVaultClient.update_certificate_policy) + +#cli_keyvault_data_plane_command('keyvault certificate operation show', KeyVaultClient.get_certificate_operation) +#cli_keyvault_data_plane_command('keyvault certificate operation update', KeyVaultClient.update_certificate_operation) +#cli_keyvault_data_plane_command('keyvault certificate operation delete', KeyVaultClient.delete_certificate_operation) + +cli_command('keyvault certificate TEMPLATE', certificate_policy_template) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/__init__.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/__init__.py new file mode 100644 index 00000000000..0ed31b70d84 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/__init__.py @@ -0,0 +1,18 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from .key_vault_client import KeyVaultClient +from .version import VERSION + +__all__ = ['KeyVaultClient'] + +__version__ = VERSION + diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/credentials.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/credentials.py new file mode 100644 index 00000000000..86cda19633e --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/credentials.py @@ -0,0 +1,20 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.authentication import ( + BasicAuthentication, + BasicTokenAuthentication, + OAuthTokenAuthentication) + +from msrestazure.azure_active_directory import ( + InteractiveCredentials, + ServicePrincipalCredentials, + UserPassCredentials) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/exceptions.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/exceptions.py new file mode 100644 index 00000000000..23081ad4bde --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/exceptions.py @@ -0,0 +1,23 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.exceptions import ( + ClientException, + SerializationError, + DeserializationError, + TokenExpiredError, + ClientRequestError, + AuthenticationError, + HttpOperationError, + ValidationError, +) + +from msrestazure.azure_exceptions import CloudError diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/key_vault_client.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/key_vault_client.py new file mode 100644 index 00000000000..f8b50d2815d --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/key_vault_client.py @@ -0,0 +1,2955 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.service_client import ServiceClient +from msrest import Serializer, Deserializer +from msrestazure import AzureConfiguration +from .version import VERSION +from msrest.pipeline import ClientRawResponse +import uuid +from . import models + + +class KeyVaultClientConfiguration(AzureConfiguration): + """Configuration for KeyVaultClient + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credentials: Credentials needed for the client to connect to Azure. + :type credentials: :mod:`A msrestazure Credentials + object` + :param api_version: Client Api Version. + :type api_version: str + :param accept_language: Gets or sets the preferred language for the + response. + :type accept_language: str + :param long_running_operation_retry_timeout: Gets or sets the retry + timeout in seconds for Long Running Operations. Default value is 30. + :type long_running_operation_retry_timeout: int + :param generate_client_request_id: When set to true a unique + x-ms-client-request-id value is generated and included in each request. + Default is true. + :type generate_client_request_id: bool + :param str filepath: Existing config + """ + + def __init__( + self, credentials, api_version='2015-06-01', accept_language='en-US', long_running_operation_retry_timeout=30, generate_client_request_id=True, filepath=None): + + if credentials is None: + raise ValueError("Parameter 'credentials' must not be None.") + if api_version is not None and not isinstance(api_version, str): + raise TypeError("Optional parameter 'api_version' must be str.") + if accept_language is not None and not isinstance(accept_language, str): + raise TypeError("Optional parameter 'accept_language' must be str.") + base_url = '{vaultBaseUrl}' + + super(KeyVaultClientConfiguration, self).__init__(base_url, filepath) + + self.add_user_agent('keyvaultclient/{}'.format(VERSION)) + self.add_user_agent('Azure-SDK-For-Python') + + self.credentials = credentials + self.api_version = api_version + self.accept_language = accept_language + self.long_running_operation_retry_timeout = long_running_operation_retry_timeout + self.generate_client_request_id = generate_client_request_id + + +class KeyVaultClient(object): + """Performs cryptographic key operations and vault operations against the Key Vault service. + + :ivar config: Configuration for client. + :vartype config: KeyVaultClientConfiguration + + :param credentials: Credentials needed for the client to connect to Azure. + :type credentials: :mod:`A msrestazure Credentials + object` + :param api_version: Client Api Version. + :type api_version: str + :param accept_language: Gets or sets the preferred language for the + response. + :type accept_language: str + :param long_running_operation_retry_timeout: Gets or sets the retry + timeout in seconds for Long Running Operations. Default value is 30. + :type long_running_operation_retry_timeout: int + :param generate_client_request_id: When set to true a unique + x-ms-client-request-id value is generated and included in each request. + Default is true. + :type generate_client_request_id: bool + :param str filepath: Existing config + """ + + def __init__( + self, credentials, api_version='2015-06-01', accept_language='en-US', long_running_operation_retry_timeout=30, generate_client_request_id=True, filepath=None): + + self.config = KeyVaultClientConfiguration(credentials, api_version, accept_language, long_running_operation_retry_timeout, generate_client_request_id, filepath) + self._client = ServiceClient(self.config.credentials, self.config) + + client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} + self._serialize = Serializer(client_models) + self._deserialize = Deserializer(client_models) + + + def create_key( + self, vault_base_url, key_name, kty, key_size=None, key_ops=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Creates a new, named, key in the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param kty: The type of key to create. Valid key types, see + JsonWebKeyType. Supported JsonWebKey key types (kty) for Elliptic + Curve, RSA, HSM, Octet. Possible values include: 'EC', 'RSA', + 'RSA-HSM', 'oct' + :type kty: str or :class:`JsonWebKeyType + ` + :param key_size: The key size in bytes. e.g. 1024 or 2048. + :type key_size: int + :param key_ops: + :type key_ops: list of str or :class:`JsonWebKeyOperation + ` + :param key_attributes: + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyCreateParameters(kty=kty, key_size=key_size, key_ops=key_ops, key_attributes=key_attributes, tags=tags) + + # Construct URL + url = '/keys/{key-name}/create' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str', pattern='^[0-9a-zA-Z-]+$') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyCreateParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def import_key( + self, vault_base_url, key_name, key, hsm=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Imports a key into the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key: The Json web key + :type key: :class:`JsonWebKey ` + :param hsm: Whether to import as a hardware key (HSM) or software key + :type hsm: bool + :param key_attributes: The key management attributes + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyImportParameters(hsm=hsm, key=key, key_attributes=key_attributes, tags=tags) + + # Construct URL + url = '/keys/{key-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str', pattern='^[0-9a-zA-Z-]+$') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyImportParameters') + + # Construct and send request + request = self._client.put(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def delete_key( + self, vault_base_url, key_name, custom_headers=None, raw=False, **operation_config): + """Deletes the specified key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/keys/{key-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_key( + self, vault_base_url, key_name, key_version, key_ops=None, key_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Updates the Key Attributes associated with the specified key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param key_ops: Json web key operations. For more information on + possible key operations, see JsonWebKeyOperation. + :type key_ops: list of str or :class:`JsonWebKeyOperation + ` + :param key_attributes: + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyUpdateParameters(key_ops=key_ops, key_attributes=key_attributes, tags=tags) + + # Construct URL + url = '/keys/{key-name}/{key-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyUpdateParameters') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_key( + self, vault_base_url, key_name, key_version, custom_headers=None, raw=False, **operation_config): + """Retrieves the public portion of a key plus its attributes. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/keys/{key-name}/{key-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_key_versions( + self, vault_base_url, key_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List the versions of the specified key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyItemPaged ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/keys/{key-name}/versions' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.KeyItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.KeyItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def get_keys( + self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List keys in the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyItemPaged ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/keys' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.KeyItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.KeyItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def backup_key( + self, vault_base_url, key_name, custom_headers=None, raw=False, **operation_config): + """Requests that a backup of the specified key be downloaded to the + client. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`BackupKeyResult ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/keys/{key-name}/backup' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('BackupKeyResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def restore_key( + self, vault_base_url, key_bundle_backup, custom_headers=None, raw=False, **operation_config): + """Restores the backup key in to a vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_bundle_backup: the backup blob associated with a key bundle + :type key_bundle_backup: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyRestoreParameters(key_bundle_backup=key_bundle_backup) + + # Construct URL + url = '/keys/restore' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyRestoreParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def encrypt( + self, vault_base_url, key_name, key_version, algorithm, value, custom_headers=None, raw=False, **operation_config): + """Encrypts an arbitrary sequence of bytes using an encryption key that + is stored in Azure Key Vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: algorithm identifier. Possible values include: + 'RSA-OAEP', 'RSA1_5' + :type algorithm: str or :class:`JsonWebKeyEncryptionAlgorithm + ` + :param value: + :type value: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyOperationResult + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value) + + # Construct URL + url = '/keys/{key-name}/{key-version}/encrypt' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyOperationsParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyOperationResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def decrypt( + self, vault_base_url, key_name, key_version, algorithm, value, custom_headers=None, raw=False, **operation_config): + """Decrypts a single block of encrypted data. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: algorithm identifier. Possible values include: + 'RSA-OAEP', 'RSA1_5' + :type algorithm: str or :class:`JsonWebKeyEncryptionAlgorithm + ` + :param value: + :type value: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyOperationResult + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value) + + # Construct URL + url = '/keys/{key-name}/{key-version}/decrypt' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyOperationsParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyOperationResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def sign( + self, vault_base_url, key_name, key_version, algorithm, value, custom_headers=None, raw=False, **operation_config): + """Creates a signature from a digest using the specified key in the vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: The signing/verification algorithm identifier. For + more information on possible algorithm types, see + JsonWebKeySignatureAlgorithm. Possible values include: 'RS256', + 'RS384', 'RS512', 'RSNULL' + :type algorithm: str or :class:`JsonWebKeySignatureAlgorithm + ` + :param value: + :type value: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyOperationResult + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeySignParameters(algorithm=algorithm, value=value) + + # Construct URL + url = '/keys/{key-name}/{key-version}/sign' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeySignParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyOperationResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def verify( + self, vault_base_url, key_name, key_version, algorithm, digest, signature, custom_headers=None, raw=False, **operation_config): + """Verifies a signature using the specified key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: The signing/verification algorithm. For more + information on possible algorithm types, see + JsonWebKeySignatureAlgorithm. Possible values include: 'RS256', + 'RS384', 'RS512', 'RSNULL' + :type algorithm: str or :class:`JsonWebKeySignatureAlgorithm + ` + :param digest: The digest used for signing + :type digest: bytes + :param signature: The signature to be verified + :type signature: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyVerifyResult ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyVerifyParameters(algorithm=algorithm, digest=digest, signature=signature) + + # Construct URL + url = '/keys/{key-name}/{key-version}/verify' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyVerifyParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyVerifyResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def wrap_key( + self, vault_base_url, key_name, key_version, algorithm, value, custom_headers=None, raw=False, **operation_config): + """Wraps a symmetric key using the specified key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: algorithm identifier. Possible values include: + 'RSA-OAEP', 'RSA1_5' + :type algorithm: str or :class:`JsonWebKeyEncryptionAlgorithm + ` + :param value: + :type value: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyOperationResult + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value) + + # Construct URL + url = '/keys/{key-name}/{key-version}/wrapkey' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyOperationsParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyOperationResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def unwrap_key( + self, vault_base_url, key_name, key_version, algorithm, value, custom_headers=None, raw=False, **operation_config): + """Unwraps a symmetric key using the specified key in the vault that has + initially been used for wrapping the key. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param key_name: The name of the key + :type key_name: str + :param key_version: The version of the key + :type key_version: str + :param algorithm: algorithm identifier. Possible values include: + 'RSA-OAEP', 'RSA1_5' + :type algorithm: str or :class:`JsonWebKeyEncryptionAlgorithm + ` + :param value: + :type value: bytes + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`KeyOperationResult + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.KeyOperationsParameters(algorithm=algorithm, value=value) + + # Construct URL + url = '/keys/{key-name}/{key-version}/unwrapkey' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'key-name': self._serialize.url("key_name", key_name, 'str'), + 'key-version': self._serialize.url("key_version", key_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'KeyOperationsParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('KeyOperationResult', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def set_secret( + self, vault_base_url, secret_name, value, tags=None, content_type=None, secret_attributes=None, custom_headers=None, raw=False, **operation_config): + """Sets a secret in the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param secret_name: The name of the secret in the given vault + :type secret_name: str + :param value: The value of the secret + :type value: str + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param content_type: Type of the secret value such as a password + :type content_type: str + :param secret_attributes: The secret management attributes + :type secret_attributes: :class:`SecretAttributes + ` + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.SecretSetParameters(value=value, tags=tags, content_type=content_type, secret_attributes=secret_attributes) + + # Construct URL + url = '/secrets/{secret-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'secret-name': self._serialize.url("secret_name", secret_name, 'str', pattern='^[0-9a-zA-Z-]+$') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'SecretSetParameters') + + # Construct and send request + request = self._client.put(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('SecretBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def delete_secret( + self, vault_base_url, secret_name, custom_headers=None, raw=False, **operation_config): + """Deletes a secret from the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param secret_name: The name of the secret in the given vault + :type secret_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/secrets/{secret-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'secret-name': self._serialize.url("secret_name", secret_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('SecretBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_secret( + self, vault_base_url, secret_name, secret_version, content_type=None, secret_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Updates the attributes associated with the specified secret. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param secret_name: The name of the secret in the given vault + :type secret_name: str + :param secret_version: The version of the secret + :type secret_version: str + :param content_type: Type of the secret value such as a password + :type content_type: str + :param secret_attributes: The secret management attributes + :type secret_attributes: :class:`SecretAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.SecretUpdateParameters(content_type=content_type, secret_attributes=secret_attributes, tags=tags) + + # Construct URL + url = '/secrets/{secret-name}/{secret-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'secret-name': self._serialize.url("secret_name", secret_name, 'str'), + 'secret-version': self._serialize.url("secret_version", secret_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'SecretUpdateParameters') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('SecretBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_secret( + self, vault_base_url, secret_name, secret_version, custom_headers=None, raw=False, **operation_config): + """Gets a secret. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param secret_name: The name of the secret in the given vault + :type secret_name: str + :param secret_version: The version of the secret + :type secret_version: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/secrets/{secret-name}/{secret-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'secret-name': self._serialize.url("secret_name", secret_name, 'str'), + 'secret-version': self._serialize.url("secret_version", secret_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('SecretBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_secrets( + self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List secrets in the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretItemPaged ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/secrets' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.SecretItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.SecretItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def get_secret_versions( + self, vault_base_url, secret_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List the versions of the specified secret. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param secret_name: The name of the secret in the given vault + :type secret_name: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`SecretItemPaged ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/secrets/{secret-name}/versions' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'secret-name': self._serialize.url("secret_name", secret_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.SecretItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.SecretItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def get_certificates( + self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List certificates in the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateItemPaged + ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/certificates' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.CertificateItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.CertificateItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def delete_certificate( + self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + """Deletes a certificate from the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate in the given + vault + :type certificate_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def set_certificate_contacts( + self, vault_base_url, contacts, custom_headers=None, raw=False, **operation_config): + """Sets the certificate contacts for the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param contacts: The contacts for the vault certificates. + :type contacts: :class:`Contacts ` + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`Contacts ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/contacts' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(contacts, 'Contacts') + + # Construct and send request + request = self._client.put(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('Contacts', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate_contacts( + self, vault_base_url, custom_headers=None, raw=False, **operation_config): + """Gets the certificate contacts for the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`Contacts ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/contacts' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('Contacts', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def delete_certificate_contacts( + self, vault_base_url, custom_headers=None, raw=False, **operation_config): + """Deletes the certificate contacts for the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`Contacts ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/contacts' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('Contacts', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate_issuers( + self, vault_base_url, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List certificate issuers for the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateIssuerItemPaged + ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/certificates/issuers' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True) + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.CertificateIssuerItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.CertificateIssuerItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def set_certificate_issuer( + self, vault_base_url, issuer_name, provider, credentials=None, organization_details=None, attributes=None, custom_headers=None, raw=False, **operation_config): + """Sets the specified certificate issuer. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param issuer_name: The name of the issuer. + :type issuer_name: str + :param provider: The issuer provider. + :type provider: str + :param credentials: The credentials to be used for the issuer. + :type credentials: :class:`IssuerCredentials + ` + :param organization_details: Details of the organization as provided + to the issuer. + :type organization_details: :class:`OrganizationDetails + ` + :param attributes: Attributes of the issuer object. + :type attributes: :class:`IssuerAttributes + ` + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`IssuerBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameter = models.CertificateIssuerSetParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes) + + # Construct URL + url = '/certificates/issuers/{issuer-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameter, 'CertificateIssuerSetParameters') + + # Construct and send request + request = self._client.put(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('IssuerBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_certificate_issuer( + self, vault_base_url, issuer_name, provider=None, credentials=None, organization_details=None, attributes=None, custom_headers=None, raw=False, **operation_config): + """Updates the specified certificate issuer. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param issuer_name: The name of the issuer. + :type issuer_name: str + :param provider: The issuer provider. + :type provider: str + :param credentials: The credentials to be used for the issuer. + :type credentials: :class:`IssuerCredentials + ` + :param organization_details: Details of the organization as provided + to the issuer. + :type organization_details: :class:`OrganizationDetails + ` + :param attributes: Attributes of the issuer object. + :type attributes: :class:`IssuerAttributes + ` + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`IssuerBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameter = models.CertificateIssuerUpdateParameters(provider=provider, credentials=credentials, organization_details=organization_details, attributes=attributes) + + # Construct URL + url = '/certificates/issuers/{issuer-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameter, 'CertificateIssuerUpdateParameters') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('IssuerBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate_issuer( + self, vault_base_url, issuer_name, custom_headers=None, raw=False, **operation_config): + """Gets the specified certificate issuer. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param issuer_name: The name of the issuer. + :type issuer_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`IssuerBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/issuers/{issuer-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('IssuerBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def delete_certificate_issuer( + self, vault_base_url, issuer_name, custom_headers=None, raw=False, **operation_config): + """Deletes the specified certificate issuer. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param issuer_name: The name of the issuer. + :type issuer_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`IssuerBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/issuers/{issuer-name}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'issuer-name': self._serialize.url("issuer_name", issuer_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('IssuerBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def create_certificate( + self, vault_base_url, certificate_name, certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Creates a new certificate version. If this is the first version, the + certificate resource is created. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateOperation + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.CertificateCreateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags) + + # Construct URL + url = '/certificates/{certificate-name}/create' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern='^[0-9a-zA-Z-]+$') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'CertificateCreateParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [202]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 202: + deserialized = self._deserialize('CertificateOperation', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def import_certificate( + self, vault_base_url, certificate_name, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Imports a certificate into the specified vault. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param base64_encoded_certificate: Base64 encoded representation of + the certificate object to import. This certificate needs to contain + the private key. + :type base64_encoded_certificate: str + :param password: If the private key in base64EncodedCertificate is + encrypted, the password used for encryption + :type password: str + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.CertificateImportParameters(base64_encoded_certificate=base64_encoded_certificate, password=password, certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags) + + # Construct URL + url = '/certificates/{certificate-name}/import' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str', pattern='^[0-9a-zA-Z-]+$') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'CertificateImportParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate_versions( + self, vault_base_url, certificate_name, maxresults=None, custom_headers=None, raw=False, **operation_config): + """List the versions of a certificate. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param maxresults: Maximum number of results to return in a page. If + not specified the service will return up to 25 results. + :type maxresults: int + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateItemPaged + ` + """ + def internal_paging(next_link=None, raw=False): + + if not next_link: + # Construct URL + url = '/certificates/{certificate-name}/versions' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + if maxresults is not None: + query_parameters['maxresults'] = self._serialize.query("maxresults", maxresults, 'int', maximum=25, minimum=1) + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + else: + url = next_link + query_parameters = {} + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send( + request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + return response + + # Deserialize response + deserialized = models.CertificateItemPaged(internal_paging, self._deserialize.dependencies) + + if raw: + header_dict = {} + client_raw_response = models.CertificateItemPaged(internal_paging, self._deserialize.dependencies, header_dict) + return client_raw_response + + return deserialized + + def get_certificate_policy( + self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + """Gets the policy for a certificate. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate in the given + vault. + :type certificate_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificatePolicy ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}/policy' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificatePolicy', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_certificate_policy( + self, vault_base_url, certificate_name, certificate_policy, custom_headers=None, raw=False, **operation_config): + """Updates the policy for a certificate. Set appropriate members in the + certificatePolicy that must be updated. Leave others as null. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate in the given + vault. + :type certificate_name: str + :param certificate_policy: The policy for the certificate. + :type certificate_policy: :class:`CertificatePolicy + ` + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificatePolicy ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}/policy' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(certificate_policy, 'CertificatePolicy') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificatePolicy', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_certificate( + self, vault_base_url, certificate_name, certificate_version, certificate_policy=None, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Updates the attributes associated with the specified certificate. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate in the given + vault + :type certificate_name: str + :param certificate_version: The version of the certificate + :type certificate_version: str + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.CertificateUpdateParameters(certificate_policy=certificate_policy, certificate_attributes=certificate_attributes, tags=tags) + + # Construct URL + url = '/certificates/{certificate-name}/{certificate-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'), + 'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'CertificateUpdateParameters') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate( + self, vault_base_url, certificate_name, certificate_version, custom_headers=None, raw=False, **operation_config): + """Gets a Certificate. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate in the given + vault + :type certificate_name: str + :param certificate_version: The version of the certificate + :type certificate_version: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}/{certificate-version}' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str'), + 'certificate-version': self._serialize.url("certificate_version", certificate_version, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def update_certificate_operation( + self, vault_base_url, certificate_name, cancellation_requested, custom_headers=None, raw=False, **operation_config): + """Updates a certificate operation. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param cancellation_requested: Indicates if cancellation was + requested on the certificate operation. + :type cancellation_requested: bool + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateOperation + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + certificate_operation = models.CertificateOperationUpdateParameter(cancellation_requested=cancellation_requested) + + # Construct URL + url = '/certificates/{certificate-name}/pending' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(certificate_operation, 'CertificateOperationUpdateParameter') + + # Construct and send request + request = self._client.patch(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateOperation', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def get_certificate_operation( + self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + """Gets the certificate operation response. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateOperation + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}/pending' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.get(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateOperation', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def delete_certificate_operation( + self, vault_base_url, certificate_name, custom_headers=None, raw=False, **operation_config): + """Deletes the certificate operation. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateOperation + ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + # Construct URL + url = '/certificates/{certificate-name}/pending' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct and send request + request = self._client.delete(url, query_parameters) + response = self._client.send(request, header_parameters, **operation_config) + + if response.status_code not in [200]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 200: + deserialized = self._deserialize('CertificateOperation', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized + + def merge_certificate( + self, vault_base_url, certificate_name, x509_certificates, certificate_attributes=None, tags=None, custom_headers=None, raw=False, **operation_config): + """Merges a certificate or a certificate chain with a key pair existing + on the server. + + :param vault_base_url: The vault name, e.g. + https://myvault.vault.azure.net + :type vault_base_url: str + :param certificate_name: The name of the certificate + :type certificate_name: str + :param x509_certificates: The certificate or the certificate chain to + merge + :type x509_certificates: list of bytearray + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value + pairs + :type tags: dict + :param dict custom_headers: headers that will be added to the request + :param bool raw: returns the direct response alongside the + deserialized response + :param operation_config: :ref:`Operation configuration + overrides`. + :rtype: :class:`CertificateBundle ` + :rtype: :class:`ClientRawResponse` + if raw=true + """ + parameters = models.CertificateMergeParameters(x509_certificates=x509_certificates, certificate_attributes=certificate_attributes, tags=tags) + + # Construct URL + url = '/certificates/{certificate-name}/pending/merge' + path_format_arguments = { + 'vaultBaseUrl': self._serialize.url("vault_base_url", vault_base_url, 'str', skip_quote=True), + 'certificate-name': self._serialize.url("certificate_name", certificate_name, 'str') + } + url = self._client.format_url(url, **path_format_arguments) + + # Construct parameters + query_parameters = {} + query_parameters['api-version'] = self._serialize.query("self.config.api_version", self.config.api_version, 'str') + + # Construct headers + header_parameters = {} + header_parameters['Content-Type'] = 'application/json; charset=utf-8' + if self.config.generate_client_request_id: + header_parameters['x-ms-client-request-id'] = str(uuid.uuid1()) + if custom_headers: + header_parameters.update(custom_headers) + if self.config.accept_language is not None: + header_parameters['accept-language'] = self._serialize.header("self.config.accept_language", self.config.accept_language, 'str') + + # Construct body + body_content = self._serialize.body(parameters, 'CertificateMergeParameters') + + # Construct and send request + request = self._client.post(url, query_parameters) + response = self._client.send( + request, header_parameters, body_content, **operation_config) + + if response.status_code not in [201]: + raise models.KeyVaultErrorException(self._deserialize, response) + + deserialized = None + + if response.status_code == 201: + deserialized = self._deserialize('CertificateBundle', response) + + if raw: + client_raw_response = ClientRawResponse(deserialized, response) + return client_raw_response + + return deserialized diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/__init__.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/__init__.py new file mode 100644 index 00000000000..95f6701c3af --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/__init__.py @@ -0,0 +1,139 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file + +from .attributes import Attributes +from .json_web_key import JsonWebKey +from .key_attributes import KeyAttributes +from .key_bundle import KeyBundle +from .key_item import KeyItem +from .secret_bundle import SecretBundle +from .secret_attributes import SecretAttributes +from .secret_item import SecretItem +from .certificate_attributes import CertificateAttributes +from .certificate_item import CertificateItem +from .certificate_issuer_item import CertificateIssuerItem +from .certificate_bundle import CertificateBundle +from .certificate_policy import CertificatePolicy +from .key_properties import KeyProperties +from .secret_properties import SecretProperties +from .x509_certificate_properties import X509CertificateProperties +from .subject_alternative_names import SubjectAlternativeNames +from .lifetime_action import LifetimeAction +from .trigger import Trigger +from .action import Action +from .issuer_parameters import IssuerParameters +from .certificate_operation import CertificateOperation +from .error import Error +from .issuer_bundle import IssuerBundle +from .issuer_credentials import IssuerCredentials +from .organization_details import OrganizationDetails +from .administrator_details import AdministratorDetails +from .issuer_attributes import IssuerAttributes +from .contacts import Contacts +from .contact import Contact +from .key_create_parameters import KeyCreateParameters +from .key_import_parameters import KeyImportParameters +from .key_operations_parameters import KeyOperationsParameters +from .key_sign_parameters import KeySignParameters +from .key_verify_parameters import KeyVerifyParameters +from .key_update_parameters import KeyUpdateParameters +from .key_restore_parameters import KeyRestoreParameters +from .secret_set_parameters import SecretSetParameters +from .secret_update_parameters import SecretUpdateParameters +from .certificate_create_parameters import CertificateCreateParameters +from .certificate_import_parameters import CertificateImportParameters +from .certificate_update_parameters import CertificateUpdateParameters +from .certificate_merge_parameters import CertificateMergeParameters +from .certificate_issuer_set_parameters import CertificateIssuerSetParameters +from .certificate_issuer_update_parameters import CertificateIssuerUpdateParameters +from .certificate_operation_update_parameter import CertificateOperationUpdateParameter +from .key_operation_result import KeyOperationResult +from .key_verify_result import KeyVerifyResult +from .backup_key_result import BackupKeyResult +from .pending_certificate_signing_request_result import PendingCertificateSigningRequestResult +from .key_vault_error import KeyVaultError, KeyVaultErrorException +from .key_item_paged import KeyItemPaged +from .secret_item_paged import SecretItemPaged +from .certificate_item_paged import CertificateItemPaged +from .certificate_issuer_item_paged import CertificateIssuerItemPaged +from .key_vault_client_enums import ( + JsonWebKeyType, + KeyUsageType, + ActionType, + JsonWebKeyOperation, + JsonWebKeyEncryptionAlgorithm, + JsonWebKeySignatureAlgorithm, +) + +__all__ = [ + 'Attributes', + 'JsonWebKey', + 'KeyAttributes', + 'KeyBundle', + 'KeyItem', + 'SecretBundle', + 'SecretAttributes', + 'SecretItem', + 'CertificateAttributes', + 'CertificateItem', + 'CertificateIssuerItem', + 'CertificateBundle', + 'CertificatePolicy', + 'KeyProperties', + 'SecretProperties', + 'X509CertificateProperties', + 'SubjectAlternativeNames', + 'LifetimeAction', + 'Trigger', + 'Action', + 'IssuerParameters', + 'CertificateOperation', + 'Error', + 'IssuerBundle', + 'IssuerCredentials', + 'OrganizationDetails', + 'AdministratorDetails', + 'IssuerAttributes', + 'Contacts', + 'Contact', + 'KeyCreateParameters', + 'KeyImportParameters', + 'KeyOperationsParameters', + 'KeySignParameters', + 'KeyVerifyParameters', + 'KeyUpdateParameters', + 'KeyRestoreParameters', + 'SecretSetParameters', + 'SecretUpdateParameters', + 'CertificateCreateParameters', + 'CertificateImportParameters', + 'CertificateUpdateParameters', + 'CertificateMergeParameters', + 'CertificateIssuerSetParameters', + 'CertificateIssuerUpdateParameters', + 'CertificateOperationUpdateParameter', + 'KeyOperationResult', + 'KeyVerifyResult', + 'BackupKeyResult', + 'PendingCertificateSigningRequestResult', + 'KeyVaultError', 'KeyVaultErrorException', + 'KeyItemPaged', + 'SecretItemPaged', + 'CertificateItemPaged', + 'CertificateIssuerItemPaged', + 'JsonWebKeyType', + 'KeyUsageType', + 'ActionType', + 'JsonWebKeyOperation', + 'JsonWebKeyEncryptionAlgorithm', + 'JsonWebKeySignatureAlgorithm', +] diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/action.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/action.py new file mode 100644 index 00000000000..cc8e7669efa --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/action.py @@ -0,0 +1,28 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Action(Model): + """The action that will be executed. + + :param action_type: The type of the action. Possible values include: + 'EmailContacts', 'AutoRenew' + :type action_type: str or :class:`ActionType ` + """ + + _attribute_map = { + 'action_type': {'key': 'action_type', 'type': 'ActionType'}, + } + + def __init__(self, action_type=None): + self.action_type = action_type diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/administrator_details.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/administrator_details.py new file mode 100644 index 00000000000..c6e27de7b54 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/administrator_details.py @@ -0,0 +1,40 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file + +from msrest.serialization import Model + + +class AdministratorDetails(Model): + """Details of the organization administrator of the certificate issuer. + + :param first_name: First name. + :type first_name: str + :param last_name: Last name. + :type last_name: str + :param email_address: Email addresss. + :type email_address: str + :param phone: Phone number. + :type phone: str + """ + + _attribute_map = { + 'first_name': {'key': 'first_name', 'type': 'str'}, + 'last_name': {'key': 'last_name', 'type': 'str'}, + 'email_address': {'key': 'email', 'type': 'str'}, + 'phone': {'key': 'phone', 'type': 'str'}, + } + + def __init__(self, first_name=None, last_name=None, email_address=None, phone=None): + self.first_name = first_name + self.last_name = last_name + self.email_address = email_address + self.phone = phone diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/attributes.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/attributes.py new file mode 100644 index 00000000000..183fa91c4c0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/attributes.py @@ -0,0 +1,51 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Attributes(Model): + """The object attributes managed by the KeyVault service. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param enabled: Determines whether the object is enabled + :type enabled: bool + :param not_before: Not before date in UTC + :type not_before: datetime + :param expires: Expiry date in UTC + :type expires: datetime + :ivar created: Creation time in UTC + :vartype created: datetime + :ivar updated: Last updated time in UTC + :vartype updated: datetime + """ + + _validation = { + 'created': {'readonly': True}, + 'updated': {'readonly': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'not_before': {'key': 'nbf', 'type': 'unix-time'}, + 'expires': {'key': 'exp', 'type': 'unix-time'}, + 'created': {'key': 'created', 'type': 'unix-time'}, + 'updated': {'key': 'updated', 'type': 'unix-time'}, + } + + def __init__(self, enabled=None, not_before=None, expires=None): + self.enabled = enabled + self.not_before = not_before + self.expires = expires + self.created = None + self.updated = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/backup_key_result.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/backup_key_result.py new file mode 100644 index 00000000000..5198fbf54b7 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/backup_key_result.py @@ -0,0 +1,34 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class BackupKeyResult(Model): + """The backup key result, containing the backup blob. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar value: The backup blob containing the backed up key + :vartype value: bytes + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self): + self.value = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_attributes.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_attributes.py new file mode 100644 index 00000000000..4dd047c51eb --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_attributes.py @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from .attributes import Attributes + + +class CertificateAttributes(Attributes): + """The certificate management attributes. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param enabled: Determines whether the object is enabled + :type enabled: bool + :param not_before: Not before date in UTC + :type not_before: datetime + :param expires: Expiry date in UTC + :type expires: datetime + :ivar created: Creation time in UTC + :vartype created: datetime + :ivar updated: Last updated time in UTC + :vartype updated: datetime + """ + + _validation = { + 'created': {'readonly': True}, + 'updated': {'readonly': True}, + } + + def __init__(self, enabled=None, not_before=None, expires=None): + super(CertificateAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_bundle.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_bundle.py new file mode 100644 index 00000000000..4c1d710301c --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_bundle.py @@ -0,0 +1,72 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateBundle(Model): + """A certificate bundle consists of a certificate (X509) plus its attributes. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: The certificate id + :vartype id: str + :ivar kid: The key id + :vartype kid: str + :ivar sid: The secret id + :vartype sid: str + :ivar x509_thumbprint: Thumbprint of the certificate. + :vartype x509_thumbprint: bytes + :ivar policy: The management policy. + :vartype policy: :class:`CertificatePolicy + ` + :param cer: CER contents of x509 certificate. + :type cer: bytearray + :param content_type: The content type of the secret + :type content_type: str + :param attributes: The certificate attributes. + :type attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _validation = { + 'id': {'readonly': True}, + 'kid': {'readonly': True}, + 'sid': {'readonly': True}, + 'x509_thumbprint': {'readonly': True}, + 'policy': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'kid': {'key': 'kid', 'type': 'str'}, + 'sid': {'key': 'sid', 'type': 'str'}, + 'x509_thumbprint': {'key': 'x5t', 'type': 'base64'}, + 'policy': {'key': 'policy', 'type': 'CertificatePolicy'}, + 'cer': {'key': 'cer', 'type': 'bytearray'}, + 'content_type': {'key': 'contentType', 'type': 'str'}, + 'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, cer=None, content_type=None, attributes=None, tags=None): + self.id = None + self.kid = None + self.sid = None + self.x509_thumbprint = None + self.policy = None + self.cer = cer + self.content_type = content_type + self.attributes = attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_create_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_create_parameters.py new file mode 100644 index 00000000000..6c5a844aadb --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_create_parameters.py @@ -0,0 +1,38 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateCreateParameters(Model): + """The certificate create parameters. + + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _attribute_map = { + 'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'}, + 'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, certificate_policy=None, certificate_attributes=None, tags=None): + self.certificate_policy = certificate_policy + self.certificate_attributes = certificate_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_import_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_import_parameters.py new file mode 100644 index 00000000000..745124cca83 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_import_parameters.py @@ -0,0 +1,53 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateImportParameters(Model): + """The certificate import parameters. + + :param base64_encoded_certificate: Base64 encoded representation of the + certificate object to import. This certificate needs to contain the + private key. + :type base64_encoded_certificate: str + :param password: If the private key in base64EncodedCertificate is + encrypted, the password used for encryption + :type password: str + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _validation = { + 'base64_encoded_certificate': {'required': True}, + } + + _attribute_map = { + 'base64_encoded_certificate': {'key': 'value', 'type': 'str'}, + 'password': {'key': 'pwd', 'type': 'str'}, + 'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'}, + 'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, base64_encoded_certificate, password=None, certificate_policy=None, certificate_attributes=None, tags=None): + self.base64_encoded_certificate = base64_encoded_certificate + self.password = password + self.certificate_policy = certificate_policy + self.certificate_attributes = certificate_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item.py new file mode 100644 index 00000000000..0317a6026ba --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item.py @@ -0,0 +1,31 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateIssuerItem(Model): + """The certificate issuer item containing certificate issuer metadata. + + :param id: Certificate Identifier + :type id: str + :param provider: The issuer provider. + :type provider: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'provider': {'key': 'provider', 'type': 'str'}, + } + + def __init__(self, id=None, provider=None): + self.id = id + self.provider = provider diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item_paged.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item_paged.py new file mode 100644 index 00000000000..07f58d76e5d --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_item_paged.py @@ -0,0 +1,27 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.paging import Paged + + +class CertificateIssuerItemPaged(Paged): + """ + A paging container for iterating over a list of CertificateIssuerItem object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[CertificateIssuerItem]'} + } + + def __init__(self, *args, **kwargs): + + super(CertificateIssuerItemPaged, self).__init__(*args, **kwargs) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_set_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_set_parameters.py new file mode 100644 index 00000000000..6c4e3ebf9af --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_set_parameters.py @@ -0,0 +1,47 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateIssuerSetParameters(Model): + """The certificate issuer set parameters. + + :param provider: The issuer provider. + :type provider: str + :param credentials: The credentials to be used for the issuer. + :type credentials: :class:`IssuerCredentials + ` + :param organization_details: Details of the organization as provided to + the issuer. + :type organization_details: :class:`OrganizationDetails + ` + :param attributes: Attributes of the issuer object. + :type attributes: :class:`IssuerAttributes + ` + """ + + _validation = { + 'provider': {'required': True}, + } + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'}, + 'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'}, + 'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'}, + } + + def __init__(self, provider, credentials=None, organization_details=None, attributes=None): + self.provider = provider + self.credentials = credentials + self.organization_details = organization_details + self.attributes = attributes diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_update_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_update_parameters.py new file mode 100644 index 00000000000..94adf6e83a7 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_issuer_update_parameters.py @@ -0,0 +1,43 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateIssuerUpdateParameters(Model): + """The certificate issuer update parameters. + + :param provider: The issuer provider. + :type provider: str + :param credentials: The credentials to be used for the issuer. + :type credentials: :class:`IssuerCredentials + ` + :param organization_details: Details of the organization as provided to + the issuer. + :type organization_details: :class:`OrganizationDetails + ` + :param attributes: Attributes of the issuer object. + :type attributes: :class:`IssuerAttributes + ` + """ + + _attribute_map = { + 'provider': {'key': 'provider', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'}, + 'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'}, + 'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'}, + } + + def __init__(self, provider=None, credentials=None, organization_details=None, attributes=None): + self.provider = provider + self.credentials = credentials + self.organization_details = organization_details + self.attributes = attributes diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item.py new file mode 100644 index 00000000000..ce8f48f102c --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item.py @@ -0,0 +1,40 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateItem(Model): + """The certificate item containing certificate metadata. + + :param id: Certificate Identifier + :type id: str + :param attributes: The certificate management attributes + :type attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :param x509_thumbprint: Thumbprint of the certificate. + :type x509_thumbprint: bytes + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'x509_thumbprint': {'key': 'x5t', 'type': 'base64'}, + } + + def __init__(self, id=None, attributes=None, tags=None, x509_thumbprint=None): + self.id = id + self.attributes = attributes + self.tags = tags + self.x509_thumbprint = x509_thumbprint diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item_paged.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item_paged.py new file mode 100644 index 00000000000..17758c18a7c --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_item_paged.py @@ -0,0 +1,27 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.paging import Paged + + +class CertificateItemPaged(Paged): + """ + A paging container for iterating over a list of CertificateItem object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[CertificateItem]'} + } + + def __init__(self, *args, **kwargs): + + super(CertificateItemPaged, self).__init__(*args, **kwargs) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_merge_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_merge_parameters.py new file mode 100644 index 00000000000..041cd2f5d16 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_merge_parameters.py @@ -0,0 +1,42 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateMergeParameters(Model): + """The certificate merge parameters. + + :param x509_certificates: The certificate or the certificate chain to + merge + :type x509_certificates: list of bytearray + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _validation = { + 'x509_certificates': {'required': True}, + } + + _attribute_map = { + 'x509_certificates': {'key': 'x5c', 'type': '[bytearray]'}, + 'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, x509_certificates, certificate_attributes=None, tags=None): + self.x509_certificates = x509_certificates + self.certificate_attributes = certificate_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation.py new file mode 100644 index 00000000000..2f725a5e2e2 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation.py @@ -0,0 +1,71 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateOperation(Model): + """A certificate operation is returned in case of async requests. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: The certificate id + :vartype id: str + :param issuer_parameters: Parameters for the issuer of the X509 component + of a certificate. + :type issuer_parameters: :class:`IssuerParameters + ` + :param csr: The Certificate Signing Request (CSR) that is being used in + the certificate operation. + :type csr: bytearray + :param cancellation_requested: Indicates if cancellation was requested on + the certificate operation. + :type cancellation_requested: bool + :param status: Status of the certificate operation. + :type status: str + :param status_details: The status details of the certificate operation. + :type status_details: str + :param error: Error encountered, if any, during the certificate operation. + :type error: :class:`Error ` + :param target: Location which contains the result of the certificate + operation. + :type target: str + :param request_id: Identifier for the certificate operation. + :type request_id: str + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'}, + 'csr': {'key': 'csr', 'type': 'bytearray'}, + 'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'}, + 'status': {'key': 'status', 'type': 'str'}, + 'status_details': {'key': 'status_details', 'type': 'str'}, + 'error': {'key': 'error', 'type': 'Error'}, + 'target': {'key': 'target', 'type': 'str'}, + 'request_id': {'key': 'request_id', 'type': 'str'}, + } + + def __init__(self, issuer_parameters=None, csr=None, cancellation_requested=None, status=None, status_details=None, error=None, target=None, request_id=None): + self.id = None + self.issuer_parameters = issuer_parameters + self.csr = csr + self.cancellation_requested = cancellation_requested + self.status = status + self.status_details = status_details + self.error = error + self.target = target + self.request_id = request_id diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation_update_parameter.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation_update_parameter.py new file mode 100644 index 00000000000..315bf7d7d2b --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_operation_update_parameter.py @@ -0,0 +1,32 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateOperationUpdateParameter(Model): + """The certificate operation update parameters. + + :param cancellation_requested: Indicates if cancellation was requested on + the certificate operation. + :type cancellation_requested: bool + """ + + _validation = { + 'cancellation_requested': {'required': True}, + } + + _attribute_map = { + 'cancellation_requested': {'key': 'cancellation_requested', 'type': 'bool'}, + } + + def __init__(self, cancellation_requested): + self.cancellation_requested = cancellation_requested diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_policy.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_policy.py new file mode 100644 index 00000000000..f7afb6a80ca --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_policy.py @@ -0,0 +1,67 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificatePolicy(Model): + """Management policy for a certificate. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: The certificate id + :vartype id: str + :param key_properties: Properties of the key backing a certificate. + :type key_properties: :class:`KeyProperties + ` + :param secret_properties: Properties of the secret backing a certificate. + :type secret_properties: :class:`SecretProperties + ` + :param x509_certificate_properties: Properties of the X509 component of a + certificate. + :type x509_certificate_properties: :class:`X509CertificateProperties + ` + :param lifetime_actions: Actions that will be performed by Key Vault over + the lifetime of a certificate. + :type lifetime_actions: list of :class:`LifetimeAction + ` + :param issuer_parameters: Parameters for the issuer of the X509 component + of a certificate. + :type issuer_parameters: :class:`IssuerParameters + ` + :param attributes: The certificate attributes. + :type attributes: :class:`CertificateAttributes + ` + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'key_properties': {'key': 'key_props', 'type': 'KeyProperties'}, + 'secret_properties': {'key': 'secret_props', 'type': 'SecretProperties'}, + 'x509_certificate_properties': {'key': 'x509_props', 'type': 'X509CertificateProperties'}, + 'lifetime_actions': {'key': 'lifetime_actions', 'type': '[LifetimeAction]'}, + 'issuer_parameters': {'key': 'issuer', 'type': 'IssuerParameters'}, + 'attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + } + + def __init__(self, key_properties=None, secret_properties=None, x509_certificate_properties=None, lifetime_actions=None, issuer_parameters=None, attributes=None): + self.id = None + self.key_properties = key_properties + self.secret_properties = secret_properties + self.x509_certificate_properties = x509_certificate_properties + self.lifetime_actions = lifetime_actions + self.issuer_parameters = issuer_parameters + self.attributes = attributes diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_update_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_update_parameters.py new file mode 100644 index 00000000000..7aecc6cbe97 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/certificate_update_parameters.py @@ -0,0 +1,38 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class CertificateUpdateParameters(Model): + """The certificate update parameters. + + :param certificate_policy: The management policy for the certificate + :type certificate_policy: :class:`CertificatePolicy + ` + :param certificate_attributes: The attributes of the certificate + (optional) + :type certificate_attributes: :class:`CertificateAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _attribute_map = { + 'certificate_policy': {'key': 'policy', 'type': 'CertificatePolicy'}, + 'certificate_attributes': {'key': 'attributes', 'type': 'CertificateAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, certificate_policy=None, certificate_attributes=None, tags=None): + self.certificate_policy = certificate_policy + self.certificate_attributes = certificate_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contact.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contact.py new file mode 100644 index 00000000000..ab26785aed9 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contact.py @@ -0,0 +1,35 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Contact(Model): + """The contact information for the vault certificates. + + :param email_address: Email addresss. + :type email_address: str + :param name: Name. + :type name: str + :param phone: Phone number. + :type phone: str + """ + + _attribute_map = { + 'email_address': {'key': 'email', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'phone': {'key': 'phone', 'type': 'str'}, + } + + def __init__(self, email_address=None, name=None, phone=None): + self.email_address = email_address + self.name = name + self.phone = phone diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contacts.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contacts.py new file mode 100644 index 00000000000..9424e5d61f3 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/contacts.py @@ -0,0 +1,38 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Contacts(Model): + """The contacts for the vault certificates. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Identifier for the contacts collection. + :vartype id: str + :param contact_list: The contact list for the vault certificates. + :type contact_list: list of :class:`Contact ` + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'contact_list': {'key': 'contacts', 'type': '[Contact]'}, + } + + def __init__(self, contact_list=None): + self.id = None + self.contact_list = contact_list diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/error.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/error.py new file mode 100644 index 00000000000..e6bd62538e4 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/error.py @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Error(Model): + """The key vault server error. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar code: The error code. + :vartype code: str + :ivar message: The error message. + :vartype message: str + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + } + + def __init__(self): + self.code = None + self.message = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_attributes.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_attributes.py new file mode 100644 index 00000000000..ddf5c8d707f --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_attributes.py @@ -0,0 +1,43 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class IssuerAttributes(Model): + """The attributes of an issuer managed by the KeyVault service. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param enabled: Determines whether the issuer is enabled + :type enabled: bool + :ivar created: Creation time in UTC + :vartype created: datetime + :ivar updated: Last updated time in UTC + :vartype updated: datetime + """ + + _validation = { + 'created': {'readonly': True}, + 'updated': {'readonly': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'created': {'key': 'created', 'type': 'unix-time'}, + 'updated': {'key': 'updated', 'type': 'unix-time'}, + } + + def __init__(self, enabled=None): + self.enabled = enabled + self.created = None + self.updated = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_bundle.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_bundle.py new file mode 100644 index 00000000000..f886bee6dfe --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_bundle.py @@ -0,0 +1,54 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class IssuerBundle(Model): + """The issuer for Key Vault certificate. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar id: Identifier for the issuer object. + :vartype id: str + :param provider: The issuer provider. + :type provider: str + :param credentials: The credentials to be used for the issuer. + :type credentials: :class:`IssuerCredentials + ` + :param organization_details: Details of the organization as provided to + the issuer. + :type organization_details: :class:`OrganizationDetails + ` + :param attributes: Attributes of the issuer object. + :type attributes: :class:`IssuerAttributes + ` + """ + + _validation = { + 'id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'provider': {'key': 'provider', 'type': 'str'}, + 'credentials': {'key': 'credentials', 'type': 'IssuerCredentials'}, + 'organization_details': {'key': 'org_details', 'type': 'OrganizationDetails'}, + 'attributes': {'key': 'attributes', 'type': 'IssuerAttributes'}, + } + + def __init__(self, provider=None, credentials=None, organization_details=None, attributes=None): + self.id = None + self.provider = provider + self.credentials = credentials + self.organization_details = organization_details + self.attributes = attributes diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_credentials.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_credentials.py new file mode 100644 index 00000000000..a353fb9acc0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_credentials.py @@ -0,0 +1,31 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class IssuerCredentials(Model): + """The credentials to be used for the certificate issuer. + + :param account_id: The user name/account name/account id. + :type account_id: str + :param password: The password/secret/account key. + :type password: str + """ + + _attribute_map = { + 'account_id': {'key': 'account_id', 'type': 'str'}, + 'password': {'key': 'pwd', 'type': 'str'}, + } + + def __init__(self, account_id=None, password=None): + self.account_id = account_id + self.password = password diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_parameters.py new file mode 100644 index 00000000000..38bb19a64cc --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/issuer_parameters.py @@ -0,0 +1,33 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class IssuerParameters(Model): + """Parameters for the issuer of the X509 component of a certificate. + + :param name: Name of the referenced issuer object or reserved names e.g. + 'Self', 'Unknown'. + :type name: str + :param certificate_type: Type of certificate to be requested from the + issuer provider. + :type certificate_type: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'certificate_type': {'key': 'cty', 'type': 'str'}, + } + + def __init__(self, name=None, certificate_type=None): + self.name = name + self.certificate_type = certificate_type diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/json_web_key.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/json_web_key.py new file mode 100644 index 00000000000..cb8ec8ae201 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/json_web_key.py @@ -0,0 +1,77 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class JsonWebKey(Model): + """As of http://tools.ietf.org/html/draft-ietf-jose-json-web-key-18. + + :param kid: Key Identifier + :type kid: str + :param kty: Supported JsonWebKey key types (kty) for Elliptic Curve, RSA, + HSM, Octet, usually RSA. Possible values include: 'EC', 'RSA', + 'RSA-HSM', 'oct' + :type kty: str or :class:`JsonWebKeyType ` + :param key_ops: + :type key_ops: list of str + :param n: RSA modulus + :type n: bytes + :param e: RSA public exponent + :type e: bytes + :param d: RSA private exponent + :type d: bytes + :param dp: RSA Private Key Parameter + :type dp: bytes + :param dq: RSA Private Key Parameter + :type dq: bytes + :param qi: RSA Private Key Parameter + :type qi: bytes + :param p: RSA secret prime + :type p: bytes + :param q: RSA secret prime, with p < q + :type q: bytes + :param k: Symmetric key + :type k: bytes + :param t: HSM Token, used with Bring Your Own Key + :type t: bytes + """ + + _attribute_map = { + 'kid': {'key': 'kid', 'type': 'str'}, + 'kty': {'key': 'kty', 'type': 'str'}, + 'key_ops': {'key': 'key_ops', 'type': '[str]'}, + 'n': {'key': 'n', 'type': 'base64'}, + 'e': {'key': 'e', 'type': 'base64'}, + 'd': {'key': 'd', 'type': 'base64'}, + 'dp': {'key': 'dp', 'type': 'base64'}, + 'dq': {'key': 'dq', 'type': 'base64'}, + 'qi': {'key': 'qi', 'type': 'base64'}, + 'p': {'key': 'p', 'type': 'base64'}, + 'q': {'key': 'q', 'type': 'base64'}, + 'k': {'key': 'k', 'type': 'base64'}, + 't': {'key': 'key_hsm', 'type': 'base64'}, + } + + def __init__(self, kid=None, kty=None, key_ops=None, n=None, e=None, d=None, dp=None, dq=None, qi=None, p=None, q=None, k=None, t=None): + self.kid = kid + self.kty = kty + self.key_ops = key_ops + self.n = n + self.e = e + self.d = d + self.dp = dp + self.dq = dq + self.qi = qi + self.p = p + self.q = q + self.k = k + self.t = t diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_attributes.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_attributes.py new file mode 100644 index 00000000000..3cfdc95b248 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_attributes.py @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from .attributes import Attributes + + +class KeyAttributes(Attributes): + """The attributes of a key managed by the KeyVault service. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param enabled: Determines whether the object is enabled + :type enabled: bool + :param not_before: Not before date in UTC + :type not_before: datetime + :param expires: Expiry date in UTC + :type expires: datetime + :ivar created: Creation time in UTC + :vartype created: datetime + :ivar updated: Last updated time in UTC + :vartype updated: datetime + """ + + _validation = { + 'created': {'readonly': True}, + 'updated': {'readonly': True}, + } + + def __init__(self, enabled=None, not_before=None, expires=None): + super(KeyAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_bundle.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_bundle.py new file mode 100644 index 00000000000..382e87aade5 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_bundle.py @@ -0,0 +1,47 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyBundle(Model): + """A KeyBundle consisting of a WebKey plus its Attributes. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param key: The Json web key + :type key: :class:`JsonWebKey ` + :param attributes: The key management attributes + :type attributes: :class:`KeyAttributes ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :ivar managed: True if the key's lifetime is managed by key vault i.e. if + this is a key backing a certificate, then managed will be true. + :vartype managed: bool + """ + + _validation = { + 'managed': {'readonly': True}, + } + + _attribute_map = { + 'key': {'key': 'key', 'type': 'JsonWebKey'}, + 'attributes': {'key': 'attributes', 'type': 'KeyAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'managed': {'key': 'managed', 'type': 'bool'}, + } + + def __init__(self, key=None, attributes=None, tags=None): + self.key = key + self.attributes = attributes + self.tags = tags + self.managed = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_create_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_create_parameters.py new file mode 100644 index 00000000000..d484d4b7b27 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_create_parameters.py @@ -0,0 +1,51 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyCreateParameters(Model): + """The key create parameters. + + :param kty: The type of key to create. Valid key types, see + JsonWebKeyType. Supported JsonWebKey key types (kty) for Elliptic Curve, + RSA, HSM, Octet. Possible values include: 'EC', 'RSA', 'RSA-HSM', 'oct' + :type kty: str or :class:`JsonWebKeyType ` + :param key_size: The key size in bytes. e.g. 1024 or 2048. + :type key_size: int + :param key_ops: + :type key_ops: list of str or :class:`JsonWebKeyOperation + ` + :param key_attributes: + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _validation = { + 'kty': {'required': True, 'min_length': 1}, + } + + _attribute_map = { + 'kty': {'key': 'kty', 'type': 'str'}, + 'key_size': {'key': 'key_size', 'type': 'int'}, + 'key_ops': {'key': 'key_ops', 'type': '[JsonWebKeyOperation]'}, + 'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, kty, key_size=None, key_ops=None, key_attributes=None, tags=None): + self.kty = kty + self.key_size = key_size + self.key_ops = key_ops + self.key_attributes = key_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_import_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_import_parameters.py new file mode 100644 index 00000000000..fd11b01b60a --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_import_parameters.py @@ -0,0 +1,44 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyImportParameters(Model): + """The key import parameters. + + :param hsm: Whether to import as a hardware key (HSM) or software key + :type hsm: bool + :param key: The Json web key + :type key: :class:`JsonWebKey ` + :param key_attributes: The key management attributes + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _validation = { + 'key': {'required': True}, + } + + _attribute_map = { + 'hsm': {'key': 'Hsm', 'type': 'bool'}, + 'key': {'key': 'key', 'type': 'JsonWebKey'}, + 'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, key, hsm=None, key_attributes=None, tags=None): + self.hsm = hsm + self.key = key + self.key_attributes = key_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item.py new file mode 100644 index 00000000000..02d3357a77e --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item.py @@ -0,0 +1,47 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyItem(Model): + """The key item containing key metadata. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param kid: Key Identifier + :type kid: str + :param attributes: The key management attributes + :type attributes: :class:`KeyAttributes ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :ivar managed: True if the key's lifetime is managed by key vault i.e. if + this is a key backing a certificate, then managed will be true. + :vartype managed: bool + """ + + _validation = { + 'managed': {'readonly': True}, + } + + _attribute_map = { + 'kid': {'key': 'kid', 'type': 'str'}, + 'attributes': {'key': 'attributes', 'type': 'KeyAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'managed': {'key': 'managed', 'type': 'bool'}, + } + + def __init__(self, kid=None, attributes=None, tags=None): + self.kid = kid + self.attributes = attributes + self.tags = tags + self.managed = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item_paged.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item_paged.py new file mode 100644 index 00000000000..74cbb4163e8 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_item_paged.py @@ -0,0 +1,27 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.paging import Paged + + +class KeyItemPaged(Paged): + """ + A paging container for iterating over a list of KeyItem object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[KeyItem]'} + } + + def __init__(self, *args, **kwargs): + + super(KeyItemPaged, self).__init__(*args, **kwargs) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operation_result.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operation_result.py new file mode 100644 index 00000000000..cdbc75ef4d0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operation_result.py @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyOperationResult(Model): + """The key operation result. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar kid: Key identifier + :vartype kid: str + :ivar result: + :vartype result: bytes + """ + + _validation = { + 'kid': {'readonly': True}, + 'result': {'readonly': True}, + } + + _attribute_map = { + 'kid': {'key': 'kid', 'type': 'str'}, + 'result': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self): + self.kid = None + self.result = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operations_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operations_parameters.py new file mode 100644 index 00000000000..a81a60f1014 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_operations_parameters.py @@ -0,0 +1,38 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyOperationsParameters(Model): + """The key operations parameters. + + :param algorithm: algorithm identifier. Possible values include: + 'RSA-OAEP', 'RSA1_5' + :type algorithm: str or :class:`JsonWebKeyEncryptionAlgorithm + ` + :param value: + :type value: bytes + """ + + _validation = { + 'algorithm': {'required': True, 'min_length': 1}, + 'value': {'required': True}, + } + + _attribute_map = { + 'algorithm': {'key': 'alg', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self, algorithm, value): + self.algorithm = algorithm + self.value = value diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_properties.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_properties.py new file mode 100644 index 00000000000..c72be05b7f2 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_properties.py @@ -0,0 +1,40 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyProperties(Model): + """Properties of the key pair backing a certificate. + + :param exportable: Indicates if the private key can be exported. + :type exportable: bool + :param key_type: The key type. + :type key_type: str + :param key_size: The key size in bytes. e.g. 2048. + :type key_size: int + :param reuse_key: Indicates if the same key pair will be used on + certificate renewal. + :type reuse_key: bool + """ + + _attribute_map = { + 'exportable': {'key': 'exportable', 'type': 'bool'}, + 'key_type': {'key': 'kty', 'type': 'str'}, + 'key_size': {'key': 'key_size', 'type': 'int'}, + 'reuse_key': {'key': 'reuse_key', 'type': 'bool'}, + } + + def __init__(self, exportable=None, key_type=None, key_size=None, reuse_key=None): + self.exportable = exportable + self.key_type = key_type + self.key_size = key_size + self.reuse_key = reuse_key diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_restore_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_restore_parameters.py new file mode 100644 index 00000000000..f7e4e2d216e --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_restore_parameters.py @@ -0,0 +1,31 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyRestoreParameters(Model): + """The key restore parameters. + + :param key_bundle_backup: the backup blob associated with a key bundle + :type key_bundle_backup: bytes + """ + + _validation = { + 'key_bundle_backup': {'required': True}, + } + + _attribute_map = { + 'key_bundle_backup': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self, key_bundle_backup): + self.key_bundle_backup = key_bundle_backup diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_sign_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_sign_parameters.py new file mode 100644 index 00000000000..838bef32c84 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_sign_parameters.py @@ -0,0 +1,40 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeySignParameters(Model): + """The key operations parameters. + + :param algorithm: The signing/verification algorithm identifier. For more + information on possible algorithm types, see + JsonWebKeySignatureAlgorithm. Possible values include: 'RS256', 'RS384', + 'RS512', 'RSNULL' + :type algorithm: str or :class:`JsonWebKeySignatureAlgorithm + ` + :param value: + :type value: bytes + """ + + _validation = { + 'algorithm': {'required': True, 'min_length': 1}, + 'value': {'required': True}, + } + + _attribute_map = { + 'algorithm': {'key': 'alg', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self, algorithm, value): + self.algorithm = algorithm + self.value = value diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_update_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_update_parameters.py new file mode 100644 index 00000000000..04d07f1ce9d --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_update_parameters.py @@ -0,0 +1,38 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyUpdateParameters(Model): + """The key update parameters. + + :param key_ops: Json web key operations. For more information on possible + key operations, see JsonWebKeyOperation. + :type key_ops: list of str or :class:`JsonWebKeyOperation + ` + :param key_attributes: + :type key_attributes: :class:`KeyAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _attribute_map = { + 'key_ops': {'key': 'key_ops', 'type': '[JsonWebKeyOperation]'}, + 'key_attributes': {'key': 'attributes', 'type': 'KeyAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, key_ops=None, key_attributes=None, tags=None): + self.key_ops = key_ops + self.key_attributes = key_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_client_enums.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_client_enums.py new file mode 100644 index 00000000000..4f540ffe690 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_client_enums.py @@ -0,0 +1,63 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from enum import Enum + + +class JsonWebKeyType(Enum): + + ec = "EC" + rsa = "RSA" + rsa_hsm = "RSA-HSM" + oct = "oct" + + +class KeyUsageType(Enum): + + digital_signature = "digitalSignature" + non_repudiation = "nonRepudiation" + key_encipherment = "keyEncipherment" + data_encipherment = "dataEncipherment" + key_agreement = "keyAgreement" + key_cert_sign = "keyCertSign" + c_rl_sign = "cRLSign" + encipher_only = "encipherOnly" + decipher_only = "decipherOnly" + + +class ActionType(Enum): + + email_contacts = "EmailContacts" + auto_renew = "AutoRenew" + + +class JsonWebKeyOperation(Enum): + + encrypt = "encrypt" + decrypt = "decrypt" + sign = "sign" + verify = "verify" + wrap_key = "wrapKey" + unwrap_key = "unwrapKey" + + +class JsonWebKeyEncryptionAlgorithm(Enum): + + rsa_oaep = "RSA-OAEP" + rsa1_5 = "RSA1_5" + + +class JsonWebKeySignatureAlgorithm(Enum): + + rs256 = "RS256" + rs384 = "RS384" + rs512 = "RS512" + rsnull = "RSNULL" diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_error.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_error.py new file mode 100644 index 00000000000..7f17eac2e29 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_vault_error.py @@ -0,0 +1,47 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model +from msrest.exceptions import HttpOperationError + + +class KeyVaultError(Model): + """the key vault error exception. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar error: + :vartype error: :class:`Error ` + """ + + _validation = { + 'error': {'readonly': True}, + } + + _attribute_map = { + 'error': {'key': 'error', 'type': 'Error'}, + } + + def __init__(self): + self.error = None + + +class KeyVaultErrorException(HttpOperationError): + """Server responsed with exception of type: 'KeyVaultError'. + + :param deserialize: A deserializer + :param response: Server response to be deserialized. + """ + + def __init__(self, deserialize, response, *args): + + super(KeyVaultErrorException, self).__init__(deserialize, response, 'KeyVaultError', *args) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_parameters.py new file mode 100644 index 00000000000..57da50bd496 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_parameters.py @@ -0,0 +1,45 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyVerifyParameters(Model): + """The key verify parameters. + + :param algorithm: The signing/verification algorithm. For more + information on possible algorithm types, see + JsonWebKeySignatureAlgorithm. Possible values include: 'RS256', 'RS384', + 'RS512', 'RSNULL' + :type algorithm: str or :class:`JsonWebKeySignatureAlgorithm + ` + :param digest: The digest used for signing + :type digest: bytes + :param signature: The signature to be verified + :type signature: bytes + """ + + _validation = { + 'algorithm': {'required': True, 'min_length': 1}, + 'digest': {'required': True}, + 'signature': {'required': True}, + } + + _attribute_map = { + 'algorithm': {'key': 'alg', 'type': 'str'}, + 'digest': {'key': 'digest', 'type': 'base64'}, + 'signature': {'key': 'value', 'type': 'base64'}, + } + + def __init__(self, algorithm, digest, signature): + self.algorithm = algorithm + self.digest = digest + self.signature = signature diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_result.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_result.py new file mode 100644 index 00000000000..701f97470b0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/key_verify_result.py @@ -0,0 +1,34 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class KeyVerifyResult(Model): + """The key verify result. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar value: true if the signature is verified, false otherwise. + :vartype value: bool + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': 'bool'}, + } + + def __init__(self): + self.value = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/lifetime_action.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/lifetime_action.py new file mode 100644 index 00000000000..d73836a955b --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/lifetime_action.py @@ -0,0 +1,32 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class LifetimeAction(Model): + """Action and its trigger that will be performed by Key Vault over the + lifetime of a certificate. + + :param trigger: The condition that will execute the action. + :type trigger: :class:`Trigger ` + :param action: The action that will be executed. + :type action: :class:`Action ` + """ + + _attribute_map = { + 'trigger': {'key': 'trigger', 'type': 'Trigger'}, + 'action': {'key': 'action', 'type': 'Action'}, + } + + def __init__(self, trigger=None, action=None): + self.trigger = trigger + self.action = action diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/organization_details.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/organization_details.py new file mode 100644 index 00000000000..5b8435485f0 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/organization_details.py @@ -0,0 +1,32 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class OrganizationDetails(Model): + """Details of the organization of the certificate issuer. + + :param id: Id of the organization. + :type id: str + :param admin_details: Details of the organization administrator. + :type admin_details: list of :class:`AdministratorDetails + ` + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'admin_details': {'key': 'admin_details', 'type': '[AdministratorDetails]'}, + } + + def __init__(self, id=None, admin_details=None): + self.id = id + self.admin_details = admin_details diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/pending_certificate_signing_request_result.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/pending_certificate_signing_request_result.py new file mode 100644 index 00000000000..7a68198cdd1 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/pending_certificate_signing_request_result.py @@ -0,0 +1,35 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class PendingCertificateSigningRequestResult(Model): + """The pending certificate signing request result. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :ivar value: The pending certificate signing request as Base64 encoded + string. + :vartype value: str + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + } + + def __init__(self): + self.value = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_attributes.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_attributes.py new file mode 100644 index 00000000000..23be7b1f678 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_attributes.py @@ -0,0 +1,39 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from .attributes import Attributes + + +class SecretAttributes(Attributes): + """The secret management attributes. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param enabled: Determines whether the object is enabled + :type enabled: bool + :param not_before: Not before date in UTC + :type not_before: datetime + :param expires: Expiry date in UTC + :type expires: datetime + :ivar created: Creation time in UTC + :vartype created: datetime + :ivar updated: Last updated time in UTC + :vartype updated: datetime + """ + + _validation = { + 'created': {'readonly': True}, + 'updated': {'readonly': True}, + } + + def __init__(self, enabled=None, not_before=None, expires=None): + super(SecretAttributes, self).__init__(enabled=enabled, not_before=not_before, expires=expires) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_bundle.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_bundle.py new file mode 100644 index 00000000000..9c4474afbef --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_bundle.py @@ -0,0 +1,62 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SecretBundle(Model): + """A Secret consisting of a value, id and its attributes. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param value: The secret value + :type value: str + :param id: The secret id + :type id: str + :param content_type: The content type of the secret + :type content_type: str + :param attributes: The secret management attributes + :type attributes: :class:`SecretAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :ivar kid: If this is a secret backing a KV certificate, then this field + specifies the corresponding key backing the KV certificate. + :vartype kid: str + :ivar managed: True if the secret's lifetime is managed by key vault i.e. + if this is a secret backing a certificate, then managed will be true. + :vartype managed: bool + """ + + _validation = { + 'kid': {'readonly': True}, + 'managed': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + 'id': {'key': 'id', 'type': 'str'}, + 'content_type': {'key': 'contentType', 'type': 'str'}, + 'attributes': {'key': 'attributes', 'type': 'SecretAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'kid': {'key': 'kid', 'type': 'str'}, + 'managed': {'key': 'managed', 'type': 'bool'}, + } + + def __init__(self, value=None, id=None, content_type=None, attributes=None, tags=None): + self.value = value + self.id = id + self.content_type = content_type + self.attributes = attributes + self.tags = tags + self.kid = None + self.managed = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item.py new file mode 100644 index 00000000000..a30f4d44570 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item.py @@ -0,0 +1,52 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SecretItem(Model): + """The secret item containing secret metadata. + + Variables are only populated by the server, and will be ignored when + sending a request. + + :param id: Secret Identifier + :type id: str + :param attributes: The secret management attributes + :type attributes: :class:`SecretAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :param content_type: Type of the secret value such as a password + :type content_type: str + :ivar managed: True if the secret's lifetime is managed by key vault i.e. + if this is a key backing a certificate, then managed will be true. + :vartype managed: bool + """ + + _validation = { + 'managed': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'attributes': {'key': 'attributes', 'type': 'SecretAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'content_type': {'key': 'contentType', 'type': 'str'}, + 'managed': {'key': 'managed', 'type': 'bool'}, + } + + def __init__(self, id=None, attributes=None, tags=None, content_type=None): + self.id = id + self.attributes = attributes + self.tags = tags + self.content_type = content_type + self.managed = None diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item_paged.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item_paged.py new file mode 100644 index 00000000000..ffd6b8c4b59 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_item_paged.py @@ -0,0 +1,27 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.paging import Paged + + +class SecretItemPaged(Paged): + """ + A paging container for iterating over a list of SecretItem object + """ + + _attribute_map = { + 'next_link': {'key': 'nextLink', 'type': 'str'}, + 'current_page': {'key': 'value', 'type': '[SecretItem]'} + } + + def __init__(self, *args, **kwargs): + + super(SecretItemPaged, self).__init__(*args, **kwargs) diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_properties.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_properties.py new file mode 100644 index 00000000000..83f6e36739b --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_properties.py @@ -0,0 +1,27 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SecretProperties(Model): + """Properties of the key backing a certificate. + + :param content_type: The media type (MIME type). + :type content_type: str + """ + + _attribute_map = { + 'content_type': {'key': 'contentType', 'type': 'str'}, + } + + def __init__(self, content_type=None): + self.content_type = content_type diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_set_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_set_parameters.py new file mode 100644 index 00000000000..463d5ae68a8 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_set_parameters.py @@ -0,0 +1,44 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SecretSetParameters(Model): + """The secret set parameters. + + :param value: The value of the secret + :type value: str + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + :param content_type: Type of the secret value such as a password + :type content_type: str + :param secret_attributes: The secret management attributes + :type secret_attributes: :class:`SecretAttributes + ` + """ + + _validation = { + 'value': {'required': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'content_type': {'key': 'contentType', 'type': 'str'}, + 'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'}, + } + + def __init__(self, value, tags=None, content_type=None, secret_attributes=None): + self.value = value + self.tags = tags + self.content_type = content_type + self.secret_attributes = secret_attributes diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_update_parameters.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_update_parameters.py new file mode 100644 index 00000000000..73e5716e28d --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/secret_update_parameters.py @@ -0,0 +1,36 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SecretUpdateParameters(Model): + """The secret update parameters. + + :param content_type: Type of the secret value such as a password + :type content_type: str + :param secret_attributes: The secret management attributes + :type secret_attributes: :class:`SecretAttributes + ` + :param tags: Application-specific metadata in the form of key-value pairs + :type tags: dict + """ + + _attribute_map = { + 'content_type': {'key': 'contentType', 'type': 'str'}, + 'secret_attributes': {'key': 'attributes', 'type': 'SecretAttributes'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__(self, content_type=None, secret_attributes=None, tags=None): + self.content_type = content_type + self.secret_attributes = secret_attributes + self.tags = tags diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/subject_alternative_names.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/subject_alternative_names.py new file mode 100644 index 00000000000..69b3d4e1264 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/subject_alternative_names.py @@ -0,0 +1,35 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class SubjectAlternativeNames(Model): + """The subject alternate names of a X509 object. + + :param emails: Email addresses. + :type emails: list of str + :param dns_names: Domain names. + :type dns_names: list of str + :param upns: User principal names. + :type upns: list of str + """ + + _attribute_map = { + 'emails': {'key': 'emails', 'type': '[str]'}, + 'dns_names': {'key': 'dns_names', 'type': '[str]'}, + 'upns': {'key': 'upns', 'type': '[str]'}, + } + + def __init__(self, emails=None, dns_names=None, upns=None): + self.emails = emails + self.dns_names = dns_names + self.upns = upns diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/trigger.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/trigger.py new file mode 100644 index 00000000000..3821561e0eb --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/trigger.py @@ -0,0 +1,36 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class Trigger(Model): + """A condition to be satisfied for an action to be executed. + + :param lifetime_percentage: Percentage of lifetime as which to trigger. + Value should be between 1 and 99. + :type lifetime_percentage: int + :param days_before_expiry: Days before expiry. + :type days_before_expiry: int + """ + + _validation = { + 'lifetime_percentage': {'maximum': 99, 'minimum': 1}, + } + + _attribute_map = { + 'lifetime_percentage': {'key': 'lifetime_percentage', 'type': 'int'}, + 'days_before_expiry': {'key': 'days_before_expiry', 'type': 'int'}, + } + + def __init__(self, lifetime_percentage=None, days_before_expiry=None): + self.lifetime_percentage = lifetime_percentage + self.days_before_expiry = days_before_expiry diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/x509_certificate_properties.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/x509_certificate_properties.py new file mode 100644 index 00000000000..889550e9381 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/models/x509_certificate_properties.py @@ -0,0 +1,51 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +from msrest.serialization import Model + + +class X509CertificateProperties(Model): + """Properties of the X509 component of a certificate. + + :param subject: The subject name. Should be a valid X509 Distinguished + Name. + :type subject: str + :param ekus: The enhanced key usage. + :type ekus: list of str + :param subject_alternative_names: The subject alternative names. + :type subject_alternative_names: :class:`SubjectAlternativeNames + ` + :param key_usage: List of key usages. + :type key_usage: list of str or :class:`KeyUsageType + ` + :param validity_in_months: The duration that the ceritifcate is valid in + months. + :type validity_in_months: int + """ + + _validation = { + 'validity_in_months': {'minimum': 0}, + } + + _attribute_map = { + 'subject': {'key': 'subject', 'type': 'str'}, + 'ekus': {'key': 'ekus', 'type': '[str]'}, + 'subject_alternative_names': {'key': 'sans', 'type': 'SubjectAlternativeNames'}, + 'key_usage': {'key': 'key_usage', 'type': '[KeyUsageType]'}, + 'validity_in_months': {'key': 'validity_months', 'type': 'int'}, + } + + def __init__(self, subject=None, ekus=None, subject_alternative_names=None, key_usage=None, validity_in_months=None): + self.subject = subject + self.ekus = ekus + self.subject_alternative_names = subject_alternative_names + self.key_usage = key_usage + self.validity_in_months = validity_in_months diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/version.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/version.py new file mode 100644 index 00000000000..9bf9b57904d --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/keyvaultclient/version.py @@ -0,0 +1,13 @@ +#--------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +#--------------------------------------------------------------------------------------------- +# coding=utf-8 +# -------------------------------------------------------------------------- +# Code generated by Microsoft (R) AutoRest Code Generator 0.17.0.0 +# Changes may cause incorrect behavior and will be lost if the code is +# regenerated. +# -------------------------------------------------------------------------- +#pylint: skip-file +VERSION = "2015-06-01" + diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.encrypted.pem b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.encrypted.pem new file mode 100644 index 00000000000..0b046ac3918 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.encrypted.pem @@ -0,0 +1,34 @@ +-----BEGIN CERTIFICATE----- +MIICfzCCAegCCQCMO+JWfdniBjANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC +VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMQ4wDAYDVQQKEwVBenVy +ZTEPMA0GA1UECxMGRGV2RGl2MRUwEwYDVQQDEwxBenVyZSBEZXZEaXYxHTAbBgkq +hkiG9w0BCQEWDnRlc3RAYXp1cmUuY29tMB4XDTE2MDkyOTE5MTY1NVoXDTE3MDky +OTE5MTY1NVowgYMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMH +UmVkbW9uZDEOMAwGA1UEChMFQXp1cmUxDzANBgNVBAsTBkRldkRpdjEVMBMGA1UE +AxMMQXp1cmUgRGV2RGl2MR0wGwYJKoZIhvcNAQkBFg50ZXN0QGF6dXJlLmNvbTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEArjouQYshf1jx5aNl0wnHFbmhBFzp +3L4Bh5lc0yw25HpeVqrQsWdG2Rne+02Vx6EjXM6SOh6vBCJcYkEei5Z85AsrO8Sp +wsxJJDCIe6gf6isMq1aG0HYeBKGKzU2gav8611phQXx5CXELvfwrO9K1xhqAikzz +IY0cB19HosJquSkCAwEAATANBgkqhkiG9w0BAQUFAAOBgQB9aNpHHFzJJXlw1ZPB +oDJd9LHKaIWG2Jy98cq15T/bPzp/DJcVoU5aLn2dhs/mBl087K49hls6q5r5zkpK +fRcpJHNXkeMmy1CNJer6Y9O1WXpSrTXtHmzrzUV8JZQKQfgQ2pekzlbNnDrH2l/R +vjRshgjPy9doc1O0H/4mzduOtw== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: DES-EDE3-CBC,C2E3522D1123364E + +IzbvBvGnr5tY069kP+F/1VEMp89JBbBrXtjw8xy93eQWW/8po/3DwTjUYsb1EZLj +dewOAVtCVNZStD4KLMiC1E7Jy4979FxLugbEjn/Da/dAK++iuzg9Pu3+gaozcn8w +mcYYFY50bajCc71LnYNRh994+V70MTaDEno5sqh68tNA1ab1FCfnBO/xH7s6pZ2r +QllIjhMxUTIwaDa5xDUr4tyh1sWXWD2jypWqX5WD7orBSWdxAhn5zxUS3DchucGK +DgihmJ7itSfydi7+zsDYM13Ho03M13iLIPKXob9O9ywmnKRI2FXdeXFHWPCe3qm5 +OrTakvfhJmfwLc/0C8O3oTaG9K0rDo0HaSqC/KjfSkuSdNrV3Gz2ZcF88U/FwF90 +QHGuhOxg6eY+d6519oU2DQ+g4UIMZl1khBhHiNXjYmRqxPY602xQXv29mHzuCjQ0 +A0LHEZLp/26PhjntxqNIU9Y7d+obq/kgMaxRQ8FHH2VunNFJ8JOZbalDF/Ep7T+L +UC0MQRQvecT75M38VEs+sSfop3S207sPI78E70v22drAPXDPfc8ePO97aAT2yTpI +/dr65pk0thsDSVYkkKbM/NOYZ1P7N9g2Y9RkqnkdHQyK0yLHSIuDYeQlcYNGEtZD +MKv/XcoW479UiaIyQSf7iNastmwi4P2GS8EwPhAKtuxlwUSqrIlDpC5Xub8Ak/mZ +L049/RKrl1UcB2vp5Qrkz3lqPW7xFeEyDIMAhbEQ7+ioH4E6kNoxGXu4fqnYpe/q +GtWHRYYI2h8oVNPZZlaQNT7vfnO9UbLMpktL/Aj97wgrTigPPvIcAg== +-----END RSA PRIVATE KEY----- diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.pem b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.pem new file mode 100644 index 00000000000..7e267735a14 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/mydomain.test.pem @@ -0,0 +1,31 @@ +-----BEGIN CERTIFICATE----- +MIICfzCCAegCCQD1giVgxjPtiTANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMC +VVMxCzAJBgNVBAgTAldBMRAwDgYDVQQHEwdSZWRtb25kMQ4wDAYDVQQKEwVBenVy +ZTEPMA0GA1UECxMGRGV2RGl2MRUwEwYDVQQDEwxBenVyZSBEZXZEaXYxHTAbBgkq +hkiG9w0BCQEWDnRlc3RAYXp1cmUuY29tMB4XDTE2MDkyOTE5MTcxNVoXDTE3MDky +OTE5MTcxNVowgYMxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJXQTEQMA4GA1UEBxMH +UmVkbW9uZDEOMAwGA1UEChMFQXp1cmUxDzANBgNVBAsTBkRldkRpdjEVMBMGA1UE +AxMMQXp1cmUgRGV2RGl2MR0wGwYJKoZIhvcNAQkBFg50ZXN0QGF6dXJlLmNvbTCB +nzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAzU0BesajA0+OXjH/bMo9dKMf74QM +LYQO0UlhQoiuv15GUE+HvaeKXNLeOeuDmNSq2o+VDTsI6Ayr43c3vI/Jd0fcU5gV +amLekxDmgdk4yZkBZHOlUFaCdRew7ClTIKTfeW9EoVeCfu+zlkpGoOPksotSqc9m +WtS2GbnO2mvBL7UCAwEAATANBgkqhkiG9w0BAQUFAAOBgQB8sdHw1zLju4yNIW/x +JGC5YBe9WS+JTxdqxKqx/wLCq/nv+UlKaF4cICul4SYNSmM0brBxXr9tofdL+UlW +4ZUuFGh3z+uSu/7S/EWQJ8BjHBcMO3ypw11FnNpfhTMi2/rXF0NxgiRJyY38ROB5 +aJqvrwKv8Gku9DLkj5H0bbjqgg== +-----END CERTIFICATE----- +-----BEGIN RSA PRIVATE KEY----- +MIICXQIBAAKBgQDNTQF6xqMDT45eMf9syj10ox/vhAwthA7RSWFCiK6/XkZQT4e9 +p4pc0t4564OY1Kraj5UNOwjoDKvjdze8j8l3R9xTmBVqYt6TEOaB2TjJmQFkc6VQ +VoJ1F7DsKVMgpN95b0ShV4J+77OWSkag4+Syi1Kpz2Za1LYZuc7aa8EvtQIDAQAB +AoGAaY2BCD3ejBI4MWflWmq0pCZGgh/THwe5kpL2xX1+0vdGkX4CXVkpg0YLaZ4T +/9y/pzWRPccvchcpvP6LkpAe1R/jsmfP8QedT2yDTf4T+mE1hyl4D5zyObHjQ+g6 +uUMT6FpeTgoSkcU90PK+lF31igCitfVgeSNIC7Fq+9ZywWECQQDy7/13vNOfvNP7 +bAF+IxWB+g4/kaapXp46tZxEejTIbSaRhuu36HF2+gN3J7UeP1kYpx3n3Qam7ydU +sMm+5XA9AkEA2Fbzajbs4F1bTH6bmvkShrqRbx+XIW/qnbOtGs7ds2VIcqQIwM5c +8Y1YvqBKn6LP5nd/qBAmvVjSAMdh73382QJAOWxWym28y/4zUTOnaqxaUh3MLmR8 +M36lAhWZeWo1fcanHjD5GMB9yXSxSwH8wsiQg85EuGC7SMwwzMj49wF+tQJBALrL +oROF51P2590NuLe/9fIk52xGn4y8gJy4RnBOS/kZK8vovLIVvQTIYeb+qlBaGR7K +8YugnoKBTZpkjbhnVUkCQQDOQ8xVFCB3Jq93ovCv2aG97O+2gVr0AEhhLMbkjQX9 +BLoda2hBGCyuX2QaC80S9kg9oUYJqbXJbS3GSe87OfYT +-----END RSA PRIVATE KEY----- diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/policy.json b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/policy.json new file mode 100644 index 00000000000..31df89fa2bb --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/policy.json @@ -0,0 +1,42 @@ +{ + "attributes": { + "enabled": true, + "expires": null, + "not_before": null + }, + "issuer_parameters": { + "name": "Self" + }, + "key_properties": { + "exportable": true, + "key_size": 2048, + "key_type": "RSA", + "reuse_key": false + }, + "lifetime_actions": [ + { + "action": { + "action_type": "AutoRenew" + }, + "trigger": { + "lifetime_percentage": 90 + } + } + ], + "secret_properties": { + "content_type": "application/x-pkcs12" + }, + "x509_certificate_properties": { + "ekus": null, + "key_usage": [ + "digitalSignature", + "nonRepudiation", + "keyEncipherment", + "keyAgreement", + "keyCertSign" + ], + "subject": "C=US, ST=WA, L=Redmon, O=Test Noodle, OU=TestNugget, CN=www.mytestdomain.com", + "subject_alternative_names": null, + "validity_in_months": 60 + } +} diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_key_vault_mgmt.yaml b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_key_vault_mgmt.yaml deleted file mode 100644 index 6afb4eea0a9..00000000000 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_key_vault_mgmt.yaml +++ /dev/null @@ -1,754 +0,0 @@ -interactions: -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzQ0MDkyOTAsIm5iZiI6MTQ3NDQwOTI5MCwiZXhwIjoxNDc0NDEzMTkwLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xMDAuMjA4IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoiNjJlOTAzOTQtNjlmNS00MjM3LTkxOTAtMDEyMTc3MTQ1ZTEwIiwic3ViIjoidzdseGNUN3hsak5va0E2QU1ZS2IzMFlVdU51d19wT1VxU2F1WEp3S2FZSSIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.Jhkj7Bswv1CQdEUvMc7sR_RZSljp1I7AsCC2UfDWGfqOel8d8kauKWgK93shiD8_RnrYbQzyK9feNd5vkO6FnhZdqEMSrWqbNW6r8bMbI_xZtOPWi2L5vTISblOF11gW7zlz4nTBC3u1wqX6vL0ZJJ0qEePZZb2m8QtvKdsmWO0ncLzWgT82EBoNCp9gTPagQCQPUDAYgMFnIv3SZukoDvPG_3mQkUL8LLHKpmfpMzr7C4XNwf4rwMeogm5s7jrhmZjw6VV4tUyVWGUtQKpILVFdXh7V51TN0JYG4tz2yqQP5xJS6gqYHxitvfyHcuD0J0I8faruGOLo3Ngq2g0EKA] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] - accept-language: [en-US] - x-ms-client-request-id: [e7aa52eb-7f80-11e6-aeb9-a0999b14fe87] - method: GET - uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 - response: - body: {string: !!python/unicode '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-08-08T23:24:41Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} - headers: - access-control-allow-origin: ['*'] - cache-control: [no-cache] - content-length: ['1208'] - content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - dataserviceversion: [3.0;] - date: ['Tue, 20 Sep 2016 22:23:49 GMT'] - duration: ['1242722'] - expires: ['-1'] - ocp-aad-diagnostics-server-name: [0AVMhAfrTlI+fqqedZbHx2kwMj2ND9BLZXbvopf3MpM=] - ocp-aad-session-key: [LPoeiovLE0veHzgdwlpSi78cTddooZO6vDQ52QpoXHCq0iWxPvCJfMA5qzhaFUQdZNYLLBneJ8FGOWJUkSwl4JdQ9P1vdUZH3lVwx5nI7GB7rkmOWaFGOu3nfh4_kF6h.TL29yvmiJkoEbIH_h3VTs0qE5DzP5TuUDh1Ya8wzy1o] - pragma: [no-cache] - request-id: [471fcab7-e348-4349-932b-ca6d0ddf5fa4] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-dirapi-data-contract-version: ['1.6'] - x-powered-by: [ASP.NET, ASP.NET] - status: {code: 200, message: OK} -- request: - body: '{"properties": {"sku": {"name": "standard", "family": "A"}, "accessPolicies": - [{"permissions": {"keys": ["get", "create", "delete", "list", "update", "import", - "backup", "restore"], "secrets": ["all"]}, "objectId": "5963f50c-7c43-405c-af7e-53294de76abd", - "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['383'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e7d14f8c-7f80-11e6-ad3a-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvveLvwaQavLT+VTfePjpvfP7O9PtB9P9e9v7O/en29n5g3z7 - /r29h/uz/MGn2WRGb9DQFkXT0Oipz1/8ERGQfn7vo4u8pS+ndZ61Of0yy8ucfymLBl+sVzP5olis - qhqfTLLp2/WKfqE5bqs6/+j7o4+anAAQhQleVpYfff+X/BL6kMY0KfPZs6p+mq/K6nqRL9uPHp1n - ZZOPPuIp+aouCP95266aR3ejkz7mv8bZD9Z1Pl4Sqr/kl/w/WpDn2pYCAAA= - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:50 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e894651c-7f80-11e6-b45a-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvveLvwaQavLT+VTfePjpvfP7O9PtB9P9e9v7O/en29n5g3z7 - /r29h/uz/MGn2WRGb9DQFkXT0Oipz1/8ERGQfn7vo4u8pS+ndZ61Of0yy8ucfymLBl+sVzP5olis - qhqfTLLp2/WKfqE5bqs6/+j7o4+anAAQhQleVpYfff+X/BL6kMY0KfPZs6p+mq/K6nqRL9uPHp1n - ZZOPPuIp+aouCP95266aR3ejkz7mv8bZD9Z1Pl7m7d2Pfskv+X8AJgxY4pcCAAA= - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:50 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e8bcd5c5-7f80-11e6-b8bf-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ - uc4/evS9X/xRMfvo0Ud3m/WkmdbFqi2qZXN3Z7J7/un+g93t3cn5zvb+bJZtZ/n03vZ08nDvwd75 - zsP7D3fu1nlTretp/nldrVfN3bf59WW2Ltvd+uLuqq4ui1leN3e/KKZ11VTn7fj3yq9/Et/f5VbN - 3WlZbJt3tnf37u3f3975aPTRMlsQXh8NfNter/DtIFRqUlbTDKOgZld5067xWZtdNB89+sW/ZPQR - YbbK67bI8fdHzds1fpxni6K8pheOqa0i0LTZcpbVs4/opTZfZsv2DIS6v3+w9+lkb2/73sHs0+39 - 88ne9iSbPdyePJg8vJfdyx9O72cEJJtO86Z5WZXFlLsiOr8/kGry0/lU33j46b3z+zvT7QfT/Xvb - +zv3p9vZ+YN8+/69vYf7s/zBp9lkRm/Q0BZF09Doqc9f/BERkH5+76OLvKUvp3WetTn9MsvLnH8p - iwZfrFcz+aJYrKoan0yy6dv1in6hOW6rOv/o+6OPmpwAEIUJXlaWH33/l/wS+pDGNCnz2bOqfpqv - yup6kS/bjx6dZ2WTj4jHaEq+qgvCf962q+bR3eikj/mvcfaDdZ2Pl3l79yMGvczftc+L5Vvv7UW2 - zC5y9KGtp9Xi7g+dc3+PbFVsX1IT6vCzvZ1dGsKn2zu7v/B3a94SFtXbfPnZ77P3bvX8u22Z/94/ - NZ99993O8zen11/84Cd2n785/uyjX/L/AIFnauZ+AwAA - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:51 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e8e08780-7f80-11e6-bab6-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01&$skiptoken=Y2xpLWtleXZhdWx0LTEyMzQ1LTA= - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ - uc4/evS97/+S/wdC6kBEDAAAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:51 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e91cb099-7f80-11e6-ad87-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvveLvwaQavLT+VTfePjpvfP7O9PtB9P9e9v7O/en29n5g3z7 - /r29h/uz/MGn2WRGb9DQFkXT0Oipz1/8ERGQfn7vo4u8pS+ndZ61Of0yy8ucfymLBl+sVzP5olis - qhqfTLLp2/WKfqE5bqs6/+j7o4+anAAQhQleVpYfff+X/BL6kMY0KfPZs6p+mq/K6nqRL9uPHp1n - ZZOPPuIp+aouCP95266aR3ejkz7mv8bZD9Z1Pl7m7d2Pfskv+X8AJgxY4pcCAAA= - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:52 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e9568187-7f80-11e6-9b81-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvveLvwaQavLT+VTfePjpvfP7O9PtB9P9e9v7O/en29n5g3z7 - /r29h/uz/MGn2WRGb9DQFkXT0Oipz1/8ERGQfn7vo4u8pS+ndZ61Of0yy8ucfymLBl+sVzP5olis - qhqfTLLp2/WKfqE5bqs6/+j7o4+anAAQhQleVpYfff+X/BL6kMY0KfPZs6p+mq/K6nqRL9uPHp1n - ZZOPPuIp+aouCP95266aR3ejkz7mv8bZD9Z1Pl7m7d2Pfskv+X8AJgxY4pcCAAA= - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:52 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: '{"properties": {"sku": {"name": "premium", "family": "A"}, "vaultUri": - "https://cli-keyvault-12345-0.vault.azure.net/", "enabledForDeployment": false, - "accessPolicies": [{"permissions": {"keys": ["get", "create", "delete", "list", - "update", "import", "backup", "restore"], "secrets": ["all"]}, "objectId": "5963f50c-7c43-405c-af7e-53294de76abd", - "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['474'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e96943e8-7f80-11e6-a950-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCKzqfFGsFx/RO22+zJbtGeh0f/9g79PJ3t72vYPZp9v755O97Uk2e7g9eTB5 - eC+7lz+c3s8IRjad5k3zsiqLKff0vV/8NYBUk5/Op/rGw0/vnd/fmW4/mO7f297fuT/dzs4f5Nv3 - 7+093J/lDz7NJjN6g0a2KJqGBk99/uKPiH7083sfXeQtfTmt86zN6ZdZXub8S1k0+GK9mskXxWJV - 1fhkkk3frlf0C01xW9X5R98ffdTkBIAITPCysvzo+7/kl9CHNKZJmc+eVfXTfFVW14t82X706Dwr - m3z0Ec/IV3VB+M/bdtU8uhud8zH/Nc5+sK7z8TJv7370S37J/wMu9WALlgIAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:52 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e9ca9c94-7f80-11e6-9308-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCKzqfFGsFx/RO22+zJbtGeh0f/9g79PJ3t72vYPZp9v755O97Uk2e7g9eTB5 - eC+7lz+c3s8IRjad5k3zsiqLKff0vV/8NYBUk5/Op/rGw0/vnd/fmW4/mO7f297fuT/dzs4f5Nv3 - 7+093J/lDz7NJjN6g0a2KJqGBk99/uKPiH7083sfXeQtfTmt86zN6ZdZXub8S1k0+GK9mskXxWJV - 1fhkkk3frlf0C01xW9X5R98ffdTkBIAITPCysvzo+7/kl9CHNKZJmc+eVfXTfFVW14t82X706Dwr - m3z0Ec/IV3VB+M/bdtU8uhud8zH/Nc5+sK7z8TJv7370S37J/wMu9WALlgIAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:53 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: '{"tags": {}, "properties": {"sku": {"name": "premium", "family": "A"}, - "vaultUri": "https://cli-keyvault-12345-0.vault.azure.net/", "enabledForDeployment": - false, "accessPolicies": [{"permissions": {"keys": ["get", "create", "delete", - "list", "update", "import", "backup", "restore"], "secrets": ["all"]}, "objectId": - "5963f50c-7c43-405c-af7e-53294de76abd", "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - {"permissions": {"secrets": ["get", "list"]}, "objectId": "00000000-0000-0000-0000-000000000000", - "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['637'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [e9df733a-7f80-11e6-8a07-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: {string: !!python/unicode '{"error":{"code":"BadRequest","message":"An invalid - value was provided for ''accessPolicies''."}}'} - headers: - cache-control: [no-cache] - content-length: ['95'] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:53 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 400, message: Bad Request} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [ea0a7780-7f80-11e6-9808-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39756PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCKzqfFGsFx/RO22+zJbtGeh0f/9g79PJ3t72vYPZp9v755O97Uk2e7g9eTB5 - eC+7lz+c3s8IRjad5k3zsiqLKff0vV/8NYBUk5/Op/rGw0/vnd/fmW4/mO7f297fuT/dzs4f5Nv3 - 7+093J/lDz7NJjN6g0a2KJqGBk99/uKPiH7083sfXeQtfTmt86zN6ZdZXub8S1k0+GK9mskXxWJV - 1fhkkk3frlf0C01xW9X5R98ffdTkBIAITPCysvzo+7/kl9CHNKZJmc+eVfXTfFVW14t82X706Dwr - m3z0Ec/IV3VB+M/bdtU8uhud8zH/Nc5+sK7z8TJv7370S37J/wMu9WALlgIAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:53 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['0'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [ea2049f0-7f80-11e6-ac30-a0999b14fe87] - method: DELETE - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 - response: - body: {string: !!python/unicode ''} - headers: - cache-control: [no-cache] - content-length: ['0'] - date: ['Tue, 20 Sep 2016 22:23:55 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [eae328ee-7f80-11e6-b173-a0999b14fe87] - method: GET - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ - uc4/evS97/+S/wdC6kBEDAAAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-length: ['133'] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:54 GMT'] - expires: ['-1'] - pragma: [no-cache] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - status: {code: 200, message: OK} -- request: - body: '{"properties": {"sku": {"name": "standard", "family": "A"}, "accessPolicies": - [], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['156'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [eaf35e07-7f80-11e6-84ff-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-1?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39796PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvvf90UcEZFLms2dV/TRfldX1Il+2Hz06z8omH33E6H9VF9TF - vG1XzaO7UQKN+a9x9oN1nY+XefvRL/kl/w+RUYY4wgEAAA== - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:55 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzQ0MDkyOTAsIm5iZiI6MTQ3NDQwOTI5MCwiZXhwIjoxNDc0NDEzMTkwLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xMDAuMjA4IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoiNjJlOTAzOTQtNjlmNS00MjM3LTkxOTAtMDEyMTc3MTQ1ZTEwIiwic3ViIjoidzdseGNUN3hsak5va0E2QU1ZS2IzMFlVdU51d19wT1VxU2F1WEp3S2FZSSIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.Jhkj7Bswv1CQdEUvMc7sR_RZSljp1I7AsCC2UfDWGfqOel8d8kauKWgK93shiD8_RnrYbQzyK9feNd5vkO6FnhZdqEMSrWqbNW6r8bMbI_xZtOPWi2L5vTISblOF11gW7zlz4nTBC3u1wqX6vL0ZJJ0qEePZZb2m8QtvKdsmWO0ncLzWgT82EBoNCp9gTPagQCQPUDAYgMFnIv3SZukoDvPG_3mQkUL8LLHKpmfpMzr7C4XNwf4rwMeogm5s7jrhmZjw6VV4tUyVWGUtQKpILVFdXh7V51TN0JYG4tz2yqQP5xJS6gqYHxitvfyHcuD0J0I8faruGOLo3Ngq2g0EKA] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] - accept-language: [en-US] - x-ms-client-request-id: [eb7b6b5c-7f80-11e6-b2d7-a0999b14fe87] - method: GET - uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 - response: - body: {string: !!python/unicode '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-08-08T23:24:41Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} - headers: - access-control-allow-origin: ['*'] - cache-control: [no-cache] - content-length: ['1208'] - content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - dataserviceversion: [3.0;] - date: ['Tue, 20 Sep 2016 22:23:56 GMT'] - duration: ['1684127'] - expires: ['-1'] - ocp-aad-diagnostics-server-name: [gVe9/FM4oqqnojytneR8sUurfqQA9QW5mYrgVR1bKQo=] - ocp-aad-session-key: [iLITcHCZMXIFUKjQ-tkSFtP0_T8vvyI_SAy2uOJiGBJXxuqnL9xntKQ2L7BT7CDj0U3YzGwBPQkyW5fkKjl42Mvh5J3gCyUZJD3lv0XoXMfoMxsCJoaLAaQJtWgoy2Em.ZhHme62KoLXfklPCteNC6AjwpwPNxOZA8bw0hStCURs] - pragma: [no-cache] - request-id: [8c38eb63-86b8-406a-bdef-46db827916cf] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-dirapi-data-contract-version: ['1.6'] - x-powered-by: [ASP.NET, ASP.NET] - status: {code: 200, message: OK} -- request: - body: '{"properties": {"sku": {"name": "standard", "family": "A"}, "enabledForDiskEncryption": - true, "enabledForTemplateDeployment": true, "enabledForDeployment": true, "accessPolicies": - [{"permissions": {"keys": ["get", "create", "delete", "list", "update", "import", - "backup", "restore"], "secrets": ["all"]}, "objectId": "5963f50c-7c43-405c-af7e-53294de76abd", - "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['485'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [eba8cb63-7f80-11e6-b5ce-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-2?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f39776PRR8tskRNCA9+21yt8OwiVmpTVNMMoqNlV3rRrfNZmF81Hj37xLxl9RJit8rotcvz9UfN2 - jR/n2aIor+mFY2qrCDRttpxl9ewjeqnNl9myPQOh7u8f7H062dvbvncw+3R7/3yytz3JZg+3Jw8m - D+9l9/KH0/sZAcmm07xpXlZlMeWuvveLvwaQavLT+VTfePjpvfP7O9PtB9P9e9v7O/en29n5g3z7 - /r29h/uz/MGn2WRGb9DQFkXT0Oipz1/8ERGQfn7vo4u8pS+ndZ61Of0yy8ucfymLBl+sVzP5olis - qhqfTLLp2/WKfqE5bqs6/+j7o4+anAAQhQleVpYfff+X/BL6kMY0KfPZs6p+mq/K6nqRL9uPHrX1 - Og++K5q3p8tpfc3s1f/+Tb5YlYRCHwbP6ld1QSSYt+2qeXQ3yjdj/muc/WBd5+MljfaX/JL/B6fG - TU3ZAgAA - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:57 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -- request: - body: null - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyIsImtpZCI6IlliUkFRUlljRV9tb3RXVkpLSHJ3TEJiZF85cyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzQ0MDkyOTAsIm5iZiI6MTQ3NDQwOTI5MCwiZXhwIjoxNDc0NDEzMTkwLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xMDAuMjA4IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoiNjJlOTAzOTQtNjlmNS00MjM3LTkxOTAtMDEyMTc3MTQ1ZTEwIiwic3ViIjoidzdseGNUN3hsak5va0E2QU1ZS2IzMFlVdU51d19wT1VxU2F1WEp3S2FZSSIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.Jhkj7Bswv1CQdEUvMc7sR_RZSljp1I7AsCC2UfDWGfqOel8d8kauKWgK93shiD8_RnrYbQzyK9feNd5vkO6FnhZdqEMSrWqbNW6r8bMbI_xZtOPWi2L5vTISblOF11gW7zlz4nTBC3u1wqX6vL0ZJJ0qEePZZb2m8QtvKdsmWO0ncLzWgT82EBoNCp9gTPagQCQPUDAYgMFnIv3SZukoDvPG_3mQkUL8LLHKpmfpMzr7C4XNwf4rwMeogm5s7jrhmZjw6VV4tUyVWGUtQKpILVFdXh7V51TN0JYG4tz2yqQP5xJS6gqYHxitvfyHcuD0J0I8faruGOLo3Ngq2g0EKA] - Connection: [keep-alive] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] - accept-language: [en-US] - x-ms-client-request-id: [ec2c89fd-7f80-11e6-b5e6-a0999b14fe87] - method: GET - uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 - response: - body: {string: !!python/unicode '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-08-08T23:24:41Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} - headers: - access-control-allow-origin: ['*'] - cache-control: [no-cache] - content-length: ['1208'] - content-type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] - dataserviceversion: [3.0;] - date: ['Tue, 20 Sep 2016 22:23:57 GMT'] - duration: ['1127580'] - expires: ['-1'] - ocp-aad-diagnostics-server-name: [IsvrFW3h7YSn8LFqekDK4T2k7YVUsMXPHGjBrZm4/RI=] - ocp-aad-session-key: [xu7gi6-i8Hsmzwwyt_SaE_aQr8ResbPk4OIYpCRznY-wGgjn3P-UkS4_3LOk58EHB2oqYgOa1EKbB7jK4d6IN6qX841IYcDCXobOksQ-tZ9kGo22B2CTWKSy4I1mifbS.AstPmhwpuQJqI-qIB6sIWu3cTkL3Wf8NG_Q1oK49VWE] - pragma: [no-cache] - request-id: [0fe2b3de-d7d5-40ae-8814-6c81c22b4c14] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-dirapi-data-contract-version: ['1.6'] - x-powered-by: [ASP.NET, ASP.NET] - status: {code: 200, message: OK} -- request: - body: '{"properties": {"sku": {"name": "premium", "family": "A"}, "accessPolicies": - [{"permissions": {"keys": ["get", "create", "delete", "list", "update", "import", - "backup", "restore"], "secrets": ["all"]}, "objectId": "5963f50c-7c43-405c-af7e-53294de76abd", - "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}], "tenantId": "54826b22-38d6-4fb2-bad9-b7b93a3e9c5a"}, - "location": "westus"}' - headers: - Accept: [application/json] - Accept-Encoding: ['gzip, deflate'] - Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc0NDA5OTI5LCJuYmYiOjE0NzQ0MDk5MjksImV4cCI6MTQ3NDQxMzgyOSwiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC41OC4yMDgiLCJuYW1lIjoiQWRtaW4yIiwib2lkIjoiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIiwicHVpZCI6IjEwMDNCRkZEOTU5Rjg0MjMiLCJzY3AiOiJ1c2VyX2ltcGVyc29uYXRpb24iLCJzdWIiOiJzRGdleFJ3Q05JZlktaHpRampDRHZaVDdJemRmbzRTeXJyNHgwZEROelI0IiwidGlkIjoiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwidW5pcXVlX25hbWUiOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInVwbiI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidmVyIjoiMS4wIiwid2lkcyI6WyI2MmU5MDM5NC02OWY1LTQyMzctOTE5MC0wMTIxNzcxNDVlMTAiXX0.n8XH64TbdMuaj9sntoVQgXB5fWTz-gVZVhQL1_VnO5xt8rcAtQknKAlzIv2w--fkS6eZbK4dbTukGEUt8MXHuwTlDpebhteELSbLHiOt5LvcjsuW6X9qFfDvXo2FPH01fbPMSO48g-p1vRnb24tLNlL7hmLLoJ7I0Di5flbdPlVZ93XpV9FRn8t38dIdJ1ynwYZ52WGucI-8ksgyNL0zskwEGBeHPCtq8gGEQgqhznh21HESsmoEQhX9NyqQiPhWy2l5L4QR6nRJ1-K5KoT8_9oPC39Q0WBb2mi-VypixBAMRua9WMSBEXVFvXDduQmHPrdmAKd52-mx1iRcn9PDTg] - Connection: [keep-alive] - Content-Length: ['382'] - Content-Type: [application/json; charset=utf-8] - User-Agent: [python/2.7.10 (Darwin-15.5.0-x86_64-i386-64bit) requests/2.9.1 - msrest/0.4.4 msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0rc6 Azure-SDK-For-Python - AZURECLI/TEST/0.0.1] - accept-language: [en-US] - x-ms-client-request-id: [ec51138a-7f80-11e6-874c-a0999b14fe87] - method: PUT - uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/keyvault1rg/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-3?api-version=2015-06-01 - response: - body: - string: !!binary | - H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl - VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs - o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu - p/nndbVeNXff5teX2bpsd+uLu6u6uixmed3c/aKY1lVTnbfj3yu//kl8f5dbNXenZbFt3tne3bu3 - f3/73kejj5bZIieEBr5tr1f4dhAqNSmraYZRULOrvGnX+KzNLpqPHv3iXzL6iDBb5XVb5Pj7o+bt - Gj/Os0VRXtMLx9RWEVjV+aJYLz6id9p8mS3bM9Dp/v7B3qeTvb3tewezT7f3zyd725Ns9nB78mDy - 8F52L384vZ8RjGw6zZvmZVUWU+7pe7/4awCpJj+dT/WNh5/eO7+/M91+MN2/t72/c3+6nZ0/yLfv - 39t7uD/LH3yaTWb0Bo1sUTQNDZ76/MUfEf3o5/c+ushb+nJa51mb0y+zvMz5l7Jo8MV6NZMvisWq - qvHJJJu+Xa/oF5ritqrzj74/+qjJCQARmOBlZfnR93/JL6EPaUyTMp89q+qn+aqsrhf5sv3o0XlW - NvnoI56Rr+qC8J+37ap5dDc652P+a5z9YF3n4yWh+kt+yf8Dbj6UpZUCAAA= - headers: - cache-control: [no-cache] - content-encoding: [gzip] - content-type: [application/json; charset=utf-8] - date: ['Tue, 20 Sep 2016 22:23:58 GMT'] - expires: ['-1'] - pragma: [no-cache] - server: [Microsoft-IIS/8.5] - strict-transport-security: [max-age=31536000; includeSubDomains] - vary: [Accept-Encoding] - x-aspnet-version: [4.0.30319] - x-content-type-options: [nosniff] - x-ms-keyvault-service-version: [1.0.0.143] - x-ms-ratelimit-remaining-subscription-writes: ['1199'] - x-powered-by: [ASP.NET] - status: {code: 200, message: OK} -version: 1 diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_key.yaml b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_key.yaml new file mode 100644 index 00000000000..3bc5e24fa35 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_key.yaml @@ -0,0 +1,289 @@ +interactions: +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogdHJ1ZX0sICJrdHkiOiAiUlNBIn0= + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Length: ['47'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [651cdf5a-8b4c-11e6-97cb-a0b3ccf7272a] + method: POST + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/create?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/43e8dee7456143088656e72a6b87586f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4sSBBsSFcVsgWwQ8GS4Y_ug_XK76YUDi9JUTg08zo7uVQY-CvGod5CZyOo1RUOpNtyGco-jds65FnYMbRHjo046uJlbIR9poooCnFQnVLS3PQyTbRdNs5xzL9Xz0eQ-yw56UGVXJtJ1Ydv7ztdAHlQrD5KN1GXaTB6FnzL0WyJxN0zUG-6lr3cpzyIkvxByyyP1-9wovEaIuAF6kwZnEDQBs7jugtHUnsmS7aEIXBZVPMCHNQAaRUhdgpLQy5yNENv53OTSZMS9MJ4Z7p_4hZgh18Y76QaHVqtQHQdzWpTS_sEuLnFuA1E12nnDgP78dFHhHkuRZ7EqyyymdqR6lWw","e":"AQAB"},"attributes":{"enabled":true,"created":1475707091,"updated":1475707091}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['620'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:11 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [65eab3f6-8b4c-11e6-aebc-a0b3ccf7272a] + method: GET + uri: https://cli-keyvault-test-key.vault.azure.net/keys?api-version=2015-06-01 + response: + body: {string: '{"value":[{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1","attributes":{"enabled":true,"created":1475707091,"updated":1475707091}}],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['165'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:16 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogZmFsc2V9LCAidGFncyI6IHsidGVzdCI6ICJmb28i + fSwgImt0eSI6ICJSU0EiLCAia2V5X29wcyI6IFsiZW5jcnlwdCIsICJkZWNyeXB0Il19 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Length: ['108'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [68e16b8c-8b4c-11e6-b2c5-a0b3ccf7272a] + method: POST + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/create?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/1c3da5f1465845ffb598c22a88d5ecbe","kty":"RSA","key_ops":["encrypt","decrypt"],"n":"sCPXb62Bk-I2zDczqOONvA_Gy0EV7SldTjMa0ulFc8XGi48PB_6WVgAbBTMdjod1yaaSqJsIaUJ6VKT5niNVvsY49syAVOVF-dPeiWSzRzB0Ze6GnOCsifSj51dwFQvDvrr5ZTNpQRXcYUcdhQsYnPHJWoINqw0OCqLr2zKWKof3Xsd4x8AXQf_0UTKy8LoUNTF7VXFTHuiLl3-rDa2Zhd4TJXtS-JXMeT9lQ1Q-EnNCZor513Msz58D7WcVJGJWfZz0kner1iXHGKE4Rl5uckIhhSTI3CnBbXEmNx6hYcw5vG7ApLwWnZq73aXa2ylrE8hIPeVnngIh68tFF6xu0Q","e":"AQAB"},"attributes":{"enabled":false,"created":1475707097,"updated":1475707097},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['605'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:16 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [694e3062-8b4c-11e6-b8d2-a0b3ccf7272a] + method: GET + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/versions?api-version=2015-06-01 + response: + body: {string: '{"value":[{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/1c3da5f1465845ffb598c22a88d5ecbe","attributes":{"enabled":false,"created":1475707097,"updated":1475707097},"tags":{"test":"foo"}},{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/43e8dee7456143088656e72a6b87586f","attributes":{"enabled":true,"created":1475707091,"updated":1475707091}}],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['392'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:17 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [698a1628-8b4c-11e6-a539-a0b3ccf7272a] + method: GET + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/1c3da5f1465845ffb598c22a88d5ecbe","kty":"RSA","key_ops":["encrypt","decrypt"],"n":"sCPXb62Bk-I2zDczqOONvA_Gy0EV7SldTjMa0ulFc8XGi48PB_6WVgAbBTMdjod1yaaSqJsIaUJ6VKT5niNVvsY49syAVOVF-dPeiWSzRzB0Ze6GnOCsifSj51dwFQvDvrr5ZTNpQRXcYUcdhQsYnPHJWoINqw0OCqLr2zKWKof3Xsd4x8AXQf_0UTKy8LoUNTF7VXFTHuiLl3-rDa2Zhd4TJXtS-JXMeT9lQ1Q-EnNCZor513Msz58D7WcVJGJWfZz0kner1iXHGKE4Rl5uckIhhSTI3CnBbXEmNx6hYcw5vG7ApLwWnZq73aXa2ylrE8hIPeVnngIh68tFF6xu0Q","e":"AQAB"},"attributes":{"enabled":false,"created":1475707097,"updated":1475707097},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['605'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:17 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [69cd9dd2-8b4c-11e6-8711-a0b3ccf7272a] + method: GET + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/43e8dee7456143088656e72a6b87586f?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/43e8dee7456143088656e72a6b87586f","kty":"RSA","key_ops":["encrypt","decrypt","sign","verify","wrapKey","unwrapKey"],"n":"4sSBBsSFcVsgWwQ8GS4Y_ug_XK76YUDi9JUTg08zo7uVQY-CvGod5CZyOo1RUOpNtyGco-jds65FnYMbRHjo046uJlbIR9poooCnFQnVLS3PQyTbRdNs5xzL9Xz0eQ-yw56UGVXJtJ1Ydv7ztdAHlQrD5KN1GXaTB6FnzL0WyJxN0zUG-6lr3cpzyIkvxByyyP1-9wovEaIuAF6kwZnEDQBs7jugtHUnsmS7aEIXBZVPMCHNQAaRUhdgpLQy5yNENv53OTSZMS9MJ4Z7p_4hZgh18Y76QaHVqtQHQdzWpTS_sEuLnFuA1E12nnDgP78dFHhHkuRZ7EqyyymdqR6lWw","e":"AQAB"},"attributes":{"enabled":true,"created":1475707091,"updated":1475707091}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['620'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:18 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogdHJ1ZX19 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Length: ['33'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [6a120238-8b4c-11e6-97b4-a0b3ccf7272a] + method: PATCH + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1/?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/1c3da5f1465845ffb598c22a88d5ecbe","kty":"RSA","key_ops":["encrypt","decrypt"],"n":"sCPXb62Bk-I2zDczqOONvA_Gy0EV7SldTjMa0ulFc8XGi48PB_6WVgAbBTMdjod1yaaSqJsIaUJ6VKT5niNVvsY49syAVOVF-dPeiWSzRzB0Ze6GnOCsifSj51dwFQvDvrr5ZTNpQRXcYUcdhQsYnPHJWoINqw0OCqLr2zKWKof3Xsd4x8AXQf_0UTKy8LoUNTF7VXFTHuiLl3-rDa2Zhd4TJXtS-JXMeT9lQ1Q-EnNCZor513Msz58D7WcVJGJWfZz0kner1iXHGKE4Rl5uckIhhSTI3CnBbXEmNx6hYcw5vG7ApLwWnZq73aXa2ylrE8hIPeVnngIh68tFF6xu0Q","e":"AQAB"},"attributes":{"enabled":true,"created":1475707097,"updated":1475707099},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['604'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:19 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [6a772018-8b4c-11e6-bb3a-a0b3ccf7272a] + method: DELETE + uri: https://cli-keyvault-test-key.vault.azure.net/keys/key1?api-version=2015-06-01 + response: + body: {string: '{"key":{"kid":"https://cli-keyvault-test-key.vault.azure.net/keys/key1/1c3da5f1465845ffb598c22a88d5ecbe","kty":"RSA","key_ops":["encrypt","decrypt"],"n":"sCPXb62Bk-I2zDczqOONvA_Gy0EV7SldTjMa0ulFc8XGi48PB_6WVgAbBTMdjod1yaaSqJsIaUJ6VKT5niNVvsY49syAVOVF-dPeiWSzRzB0Ze6GnOCsifSj51dwFQvDvrr5ZTNpQRXcYUcdhQsYnPHJWoINqw0OCqLr2zKWKof3Xsd4x8AXQf_0UTKy8LoUNTF7VXFTHuiLl3-rDa2Zhd4TJXtS-JXMeT9lQ1Q-EnNCZor513Msz58D7WcVJGJWfZz0kner1iXHGKE4Rl5uckIhhSTI3CnBbXEmNx6hYcw5vG7ApLwWnZq73aXa2ylrE8hIPeVnngIh68tFF6xu0Q","e":"AQAB"},"attributes":{"enabled":true,"created":1475707097,"updated":1475707099},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['604'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:20 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MDYzNDIsIm5iZiI6MTQ3NTcwNjM0MiwiZXhwIjoxNDc1NzEwMjQyLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.WumDUCjXZcgsKd29zU3Vv5TG-5Q9GABx1jMKRa9fzYVRBtbGaZRkjPfg_o2yF-h61CzqzNWLeGYJENioKLdlK4x2oQvB2G36IvQTmSiPhmP9-GuqpOBBPLBn1BdS1KQmEBoA5qV6kNfUuFlV9iGguUZfRKXGVYo8C8NJH9B5eCQHiMDB9D3OeX0r_cbS5IcZcjfnb8Bi0FZSX1Q1IddP-GmB7p4DEfhP-v1tHB8lm5tm1_1sW1_kHER2-iv3qVggaQmGi5zgpUuJXuQ00NF-RAvalATZtLYuATEueQtBLGKzs0qrVzNcfiCWMN-Cp3B5vzIYvfzg-6vQ2jp56_GLZw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [6ac96e00-8b4c-11e6-9adb-a0b3ccf7272a] + method: GET + uri: https://cli-keyvault-test-key.vault.azure.net/keys?api-version=2015-06-01 + response: + body: {string: '{"value":[],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['28'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 22:38:20 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +version: 1 diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_mgmt.yaml b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_mgmt.yaml new file mode 100644 index 00000000000..8ae33e55a9a --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_mgmt.yaml @@ -0,0 +1,883 @@ +interactions: +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU2OTkyNjUsIm5iZiI6MTQ3NTY5OTI2NSwiZXhwIjoxNDc1NzAzMTY1LCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6IjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCIsInN1YiI6Inc3bHhjVDd4bGpOb2tBNkFNWUtiMzBZVXVOdXdfcE9VcVNhdVhKd0thWUkiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAifQ.CpDar_DCURn1Gv3rKgZKpjGTpn780JPapNBw4cevuOhFpMsT7DJ80TgExXPdNzhLESP9QZdNUN2gv2EspP76ZGexl1hIYGKumye-azQjAIzHVsseLhdh-JSDYQKkmG4iefvpC0NmPcSIzw5xHAD1RfzoQm9ozYGMYsENIK2yXxtw7ZBTIfU939E3nF9eV3BCUpuYTEsLJay2Rk9EolvjpfNsGuyF1AypzJ6EIYjDXd9GxNmstAG6Lin9vWxExNT0AWpSXciRcHHEd4ez-OUBtx5t2_e8nMLGgjEYNorrIvGLIAh769weSuCqQI2GLZtcSL2D3cUHJmT7UBcFurnKVw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [87e97bc2-8b3f-11e6-8924-a0b3ccf7272a] + method: GET + uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 + response: + body: {string: '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-10-04T18:51:09Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} + headers: + Access-Control-Allow-Origin: ['*'] + Cache-Control: [no-cache] + Content-Length: ['1208'] + Content-Type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] + DataServiceVersion: [3.0;] + Date: ['Wed, 05 Oct 2016 21:06:05 GMT'] + Duration: ['1838777'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET, ASP.NET] + ocp-aad-diagnostics-server-name: [b3vd1yGXuMAGm4vrbPts5ei5uzinxRd2xsnPZKW9JoM=] + ocp-aad-session-key: [MHft9FMxiYZNVuCjdpRW-uH-mqzOeNA65lH2oZAQLfRVeTVL9yerrr1yTbCstdjXQY3GSUGNEpOx0NhZaFF7uWxAvvgCmA5y-pwF2CU5iuBv1aKTHLqKftC34rJ4OSDF.Vjj5vnqmBJmqUMPcM2u-ljuwVSzo40L4GPgKqQuHIyE] + request-id: [b357723a-dca2-4947-9eb5-a45859f02989] + x-ms-dirapi-data-contract-version: ['1.6'] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJwcm9wZXJ0aWVzIjogeyJza3UiOiB7Im5hbWUiOiAic3RhbmRhcmQiLCAiZmFtaWx5IjogIkEi + fSwgInRlbmFudElkIjogIjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsICJh + Y2Nlc3NQb2xpY2llcyI6IFt7InRlbmFudElkIjogIjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3 + YjkzYTNlOWM1YSIsICJwZXJtaXNzaW9ucyI6IHsiY2VydGlmaWNhdGVzIjogWyJhbGwiXSwgInNl + Y3JldHMiOiBbImFsbCJdLCAia2V5cyI6IFsiZ2V0IiwgImNyZWF0ZSIsICJkZWxldGUiLCAibGlz + dCIsICJ1cGRhdGUiLCAiaW1wb3J0IiwgImJhY2t1cCIsICJyZXN0b3JlIl19LCAib2JqZWN0SWQi + OiAiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIn1dfSwgImxvY2F0aW9uIjog + Indlc3R1cyJ9 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['408'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [881c063e-8b3f-11e6-b125-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwg0bbacZfXsI3qpzZfZsj0Dze7vH+x9Otnb2753MPt0e/98src9yWYP + tycPJg/vZffyh9P7GQHJptO8aV5WZTHlrr73i78GkGry0/lU33j46b3z+zvT7QfT/Xvb+zv3p9vZ + +YN8+/69vYf7s/zBp9lkRm/Q0BZF09Doqc9f/NEUIz0viB6Mw0dZWX70/dFHTT6tc6KV+4QozX9e + 5C1BoW/pDfpllpc5/1IWDb5Yr2byRbFYVTU+mWTTt+sV/UJ80VZ1/tH3f8kvIXg01EmZz55V9dN8 + VVbXi3zZfvToPCubfPQRz9RXdUHDmrftqnl0N8oLY/5rnP1gXefjJSH2S37J/wPOP319uAIAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:07 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8948fc82-8b3f-11e6-83d3-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resources?api-version=2015-11-01&$filter=resourceType%20eq%20%27Microsoft.KeyVault%2Fvaults%27 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ + uc4/evS9X/xRMfvo0Ud3m/WkmdbFqi2qZXN3Z7J7/un+g93t3cn5zvb+bJZtZ/n03vZ08nDvwd75 + zsP7D3fu1nlTretp/nldrVfN3WlZbLd5026/za8vs3XZbi8uFu3dVV1dFrO8bu5+UUzrqqnO2/Hv + lV//JFrc5Xbyqn1rd+/e/v3tnY9GHy2zBaH40cC37fUK3w5CpSZlNc0wIGp2RZit8VmbXTQfPfrF + v+SXjL65of90dplNm0V98XDn/q0GjBfcmOgtQkxHG/vq/0VDfXtZX9xqiHYI7U+vCBcdXefT/xcN + rL5Y5ovLvYPswaefPni4ezC9t3+rcfKP3YcPPsV7B3vn54SfDjb21f/rRrz/6X16797OJN/Jpu8x + 4vw+3tt7uPfpPuEXjDj86v91I/50b+/BwcO9A5rlBzvvMeKHe/t47/7D8z3CLxhx+NX/+0b8YP/+ + zqf3HtzLD3b33mfE96f83v1JRviFIw6++n/fiGf7D/f3Hny6N3t4PnuPEe/u7PJ75zswMcGIw6/+ + XzfiBzv7Dw/u7e9MPp1+OnmPEd8/z/i9vR1MZDDi8Kv/14344MF0j9Dbf/Awv/8+uvp8b8bv7e9N + Cb9gxOFX/+8b8QGpmHsPD3bvT7N77zHinWyX35tOPyX8ghGHX/2/bsTZ3t79+58e7O4e5PvZe4x4 + 98EB3tuZTWeEXzDi8Kv/1414Qhy4f+/T+/cf3p+9D1d/mk35vZzVUzDi8Kv/1414urt3f5f8hZ1p + vn/+HiPeu38P7+1SX4RfMOLwq//3jXhvb3d/7+HDhzsHDw9uP+K9yfk+v0cyQfj5I+589X4jzrOf + 9RHn97L9e/fuP9gjL/N97HG28yne+/TeFMPyR9z56v1G/EOY4/N7ewc7u/ceTPbvz97Hy7y/J+/N + duBKBiMOv/p/0YjfrcqsfUM9vLrY3T+4nYdp3+FP7+/df0DI6XCj3/2/c7x7n+7eLuS37/Cn+w/v + QxdHx6vffeh4v/9L/h/q/XNp5hEAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Length: ['877'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:08 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8970c338-8b3f-11e6-bdc4-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwg0bbacZfXsI3qpzZfZsj0Dze7vH+x9Otnb2753MPt0e/98src9yWYP + tycPJg/vZffyh9P7GQHJptO8aV5WZTHlrr73i78GkGry0/lU33j46b3z+zvT7QfT/Xvb+zv3p9vZ + +YN8+/69vYf7s/zBp9lkRm/Q0BZF09Doqc9f/NEUIz0viB6Mw0dZWX70/dFHTT6tc6KV+4QozX9e + 5C1BoW/pDfpllpc5/1IWDb5Yr2byRbFYVTU+mWTTt+sV/UJ80VZ1/tH3f8kvIXg01EmZz55V9dN8 + VVbXi3zZfvToPCubfPQRz9RXdUHDmrftqnl0N8oLY/5rnP1gXefjZd7e/eiX/JL/B9TBnRW5AgAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:09 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [89db7e7e-8b3f-11e6-b247-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ + uc4/evS9X/xRMfvo0Ud3m/WkmdbFqi2qZXN3Z7J7/un+g93t3cn5zvb+bJZtZ/n03vZ08nDvwd75 + zsP7D3fu1nlTretp/nldrVfN3WlZbLd5026/za8vs3XZbi8uFu3dVV1dFrO8bu5+UUzrqqnO2/Hv + lV//JFrc5Xbyqn1rd+/e/v3tnY9GHy2zBaH40cC37fUK3w5CpSZlNc0wIGp2RZit8VmbXTQfPfrF + v2T0EWG2yuu2yPH3R83bNX6cZ4uivKYXjqmtItC02XKW1bOP6KU2X2bL9gw0u79/sPfpZG9v+97B + 7NPt/fPJ3vYkmz3cnjyYPLyX3csfTu9nBCSbTvOmeVmVxZS7IpK/P5Bq8tP5VN94+Om98/s70+0H + 0/172/s796fb2fmDfPv+vb2H+7P8wafZZEZv0NAWRdPQ6KnPX/zRFCM9L4gejMNHWVl+9P3RR00+ + rXOilfuEKM1/XuQtQaFv6Q36ZZaXOf9SFg2+WK9m8kWxWFU1Pplk07frFf1CfNFWdf7R93/JLyF4 + NNRJmc+eVfXTfFVW14t82X706Dwrm3xEXEgz9VVd0LDmbbtqHt2N8sKY/xpnP1jX+XiZt3c/YtDL + /F37vFi+9d5eZMvsIkcf2npaLe7+XPL275Gtiu1LakJ9f7a3s0uj+XR7Z/cX/m7NW0KoepsvP/t9 + 9t6tnn+3LfPf+6fms+++23n+5vT6ix/8xO7zN8efffRL/h+S67RQqwMAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:09 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8a503b6c-8b3f-11e6-8cc9-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01&$skiptoken=Y2xpLWtleXZhdWx0LTEyMzQ1LTA= + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ + uc4/evS97/+S/wdC6kBEDAAAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:09 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8ab711fa-8b3f-11e6-b908-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwg0bbacZfXsI3qpzZfZsj0Dze7vH+x9Otnb2753MPt0e/98src9yWYP + tycPJg/vZffyh9P7GQHJptO8aV5WZTHlrr73i78GkGry0/lU33j46b3z+zvT7QfT/Xvb+zv3p9vZ + +YN8+/69vYf7s/zBp9lkRm/Q0BZF09Doqc9f/NEUIz0viB6Mw0dZWX70/dFHTT6tc6KV+4QozX9e + 5C1BoW/pDfpllpc5/1IWDb5Yr2byRbFYVTU+mWTTt+sV/UJ80VZ1/tH3f8kvIXg01EmZz55V9dN8 + VVbXi3zZfvToPCubfPQRz9RXdUHDmrftqnl0N8oLY/5rnP1gXefjZd7e/eiX/JL/B9TBnRW5AgAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:10 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJwcm9wZXJ0aWVzIjogeyJza3UiOiB7Im5hbWUiOiAicHJlbWl1bSIsICJmYW1pbHkiOiAiQSJ9 + LCAidGVuYW50SWQiOiAiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwgImVu + YWJsZWRGb3JEZXBsb3ltZW50IjogZmFsc2UsICJhY2Nlc3NQb2xpY2llcyI6IFt7InRlbmFudElk + IjogIjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsICJwZXJtaXNzaW9ucyI6 + IHsiY2VydGlmaWNhdGVzIjogWyJhbGwiXSwgInNlY3JldHMiOiBbImFsbCJdLCAia2V5cyI6IFsi + Z2V0IiwgImNyZWF0ZSIsICJkZWxldGUiLCAibGlzdCIsICJ1cGRhdGUiLCAiaW1wb3J0IiwgImJh + Y2t1cCIsICJyZXN0b3JlIl19LCAib2JqZWN0SWQiOiAiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2Ut + NTMyOTRkZTc2YWJkIn1dLCAidmF1bHRVcmkiOiAiaHR0cHM6Ly9jbGkta2V5dmF1bHQtMTIzNDUt + MC52YXVsdC5henVyZS5uZXQvIn0sICJsb2NhdGlvbiI6ICJ3ZXN0dXMifQ== + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['499'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8b0a842c-8b3f-11e6-a397-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwis6nxRrBcf0TttvsyW7RlIdn//YO/Tyd7e9r2D2afb++eTve1JNnu4 + PXkweXgvu5c/nN7PCEY2neZN87Iqiyn39L1f/DWAVJOfzqf6xsNP753f35luP5ju39ve37k/3c7O + H+Tb9+/tPdyf5Q8+zSYzeoNGtiiahgZPff7ij6YY6HlB5GAcPsrK8qPvjz5q8mmdE6ncJ0Ro/vMi + bwkKfUtv0C+zvMz5l7Jo8MV6NZMvisWqqvHJJJu+Xa/oF2KLtqrzj77/S34JwaOhTsp89qyqn+ar + srpe5Mv2o0fnWdnko494or6qCxrWvG1XzaO7UVYY81/j7AfrOh8v8/buR7/kl/w/GvZkTrgCAAA= + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:11 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8b7be3e4-8b3f-11e6-8923-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwis6nxRrBcf0TttvsyW7RlIdn//YO/Tyd7e9r2D2afb++eTve1JNnu4 + PXkweXgvu5c/nN7PCEY2neZN87Iqiyn39L1f/DWAVJOfzqf6xsNP753f35luP5ju39ve37k/3c7O + H+Tb9+/tPdyf5Q8+zSYzeoNGtiiahgZPff7ij6YY6HlB5GAcPsrK8qPvjz5q8mmdE6ncJ0Ro/vMi + bwkKfUtv0C+zvMz5l7Jo8MV6NZMvisWqqvHJJJu+Xa/oF2KLtqrzj77/S34JwaOhTsp89qyqn+ar + srpe5Mv2o0fnWdnko494or6qCxrWvG1XzaO7UVYY81/j7AfrOh8v8/buR7/kl/w/GvZkTrgCAAA= + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:12 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJsb2NhdGlvbiI6ICJ3ZXN0dXMiLCAidGFncyI6IHt9LCAicHJvcGVydGllcyI6IHsic2t1Ijog + eyJuYW1lIjogInByZW1pdW0iLCAiZmFtaWx5IjogIkEifSwgInRlbmFudElkIjogIjU0ODI2YjIy + LTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsICJlbmFibGVkRm9yRGVwbG95bWVudCI6IGZh + bHNlLCAiYWNjZXNzUG9saWNpZXMiOiBbeyJ0ZW5hbnRJZCI6ICI1NDgyNmIyMi0zOGQ2LTRmYjIt + YmFkOS1iN2I5M2EzZTljNWEiLCAicGVybWlzc2lvbnMiOiB7ImNlcnRpZmljYXRlcyI6IFsiZ2V0 + IiwgImxpc3QiXSwgInNlY3JldHMiOiBbImFsbCJdLCAia2V5cyI6IFsiZ2V0IiwgImNyZWF0ZSIs + ICJkZWxldGUiLCAibGlzdCIsICJ1cGRhdGUiLCAiaW1wb3J0IiwgImJhY2t1cCIsICJyZXN0b3Jl + Il19LCAib2JqZWN0SWQiOiAiNTk2M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIn1d + LCAidmF1bHRVcmkiOiAiaHR0cHM6Ly9jbGkta2V5dmF1bHQtMTIzNDUtMC52YXVsdC5henVyZS5u + ZXQvIn19 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['519'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8be2934a-8b3f-11e6-b3b3-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwis6nxRrBcf0TttvsyW7RlIdn//YO/Tyd7e9r2D2afb++eTve1JNnu4 + PXkweXgvu5c/nN7PCEY2neZN87Iqiyn39L1f/DWAVJOfzqf6xsNP753f35luP5ju39ve37k/3c7O + H+Tb9+/tPdyf5Q8+zSYzeoNGtiiahgZPff7ij6YY6HlB5GAcPrrIW2pUFk370fdHHzX5tM6JYvRF + Vpb4hOjNf0o7+pZepF9meZnzL/zm6KP1aiZfFItVVeOTSTZ9u17RL8QdbVXnH33/l/wSgkcjnpT5 + 7FlVP81XZXW9yJftR4/Os7LJRx/xfH1VFzS6eduumkd3oxwx5r/G2Q/WdT5e5u3dj37JL/l/AAN9 + GZG/AgAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:13 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1197'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8c7e523e-8b3f-11e6-96cc-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwis6nxRrBcf0TttvsyW7RlIdn//YO/Tyd7e9r2D2afb++eTve1JNnu4 + PXkweXgvu5c/nN7PCEY2neZN87Iqiyn39L1f/DWAVJOfzqf6xsNP753f35luP5ju39ve37k/3c7O + H+Tb9+/tPdyf5Q8+zSYzeoNGtiiahgZPff7ij6YY6HlB5GAcPrrIW2pUFk370fdHHzX5tM6JYvRF + Vpb4hOjNf0o7+pZepF9meZnzL/zm6KP1aiZfFItVVeOTSTZ9u17RL8QdbVXnH33/l/wSgkcjnpT5 + 7FlVP81XZXW9yJftR4/Os7LJRx/xfH1VFzS6eduumkd3oxwx5r/G2Q/WdT5e5u3dj37JL/l/AAN9 + GZG/AgAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:14 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJsb2NhdGlvbiI6ICJ3ZXN0dXMiLCAidGFncyI6IHt9LCAicHJvcGVydGllcyI6IHsic2t1Ijog + eyJuYW1lIjogInByZW1pdW0iLCAiZmFtaWx5IjogIkEifSwgInRlbmFudElkIjogIjU0ODI2YjIy + LTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsICJlbmFibGVkRm9yRGVwbG95bWVudCI6IGZh + bHNlLCAiYWNjZXNzUG9saWNpZXMiOiBbXSwgInZhdWx0VXJpIjogImh0dHBzOi8vY2xpLWtleXZh + dWx0LTEyMzQ1LTAudmF1bHQuYXp1cmUubmV0LyJ9fQ== + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['259'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8cd61e78-8b3f-11e6-84d5-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwis6nxRrBcf0TttvsyW7RlIdn//YO/Tyd7e9r2D2afb++eTve1JNnu4 + PXkweXgvu5c/nN7PCEY2neZN87Iqiyn39L3vjz4iIJMynz2r6qf5qqyuF/my/ejReVY2+egjxv6r + uqAu5m27ah7djdJnzH+Nsx+s63y8zNu7H/2SX/L/AHVnhLTNAQAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:14 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8d6ad86e-8b3f-11e6-8c2c-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resources?api-version=2015-11-01&$filter=resourceType%20eq%20%27Microsoft.KeyVault%2Fvaults%27 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ + uc4/evS9X/xRMfvo0Ud3m/WkmdbFqi2qZXN3Z7J7/un+g93t3cn5zvb+bJZtZ/n03vZ08nDvwd75 + zsP7D3fu1nlTretp/nldrVfN3WlZbLd5026/za8vs3XZbi8uFu3dVV1dFrO8bu5+UUzrqqnO2/Hv + lV//JFrc5Xbyqn1rd+/e/v3tnY9GHy2zBaH40cC37fUK3w5CpSZlNc0wIGp2RZit8VmbXTQfPfrF + v+SXjL65of90dplNm0V98XDn/q0GjBfcmOgtQkxHG/vq/0VDfXtZX9xqiHYI7U+vCBcdXefT/xcN + rL5Y5ovLvYPswaefPni4ezC9t3+rcfKP3YcPPsV7B3vn54SfDjb21f/rRrz/6X16797OJN/Jpu8x + 4vw+3tt7uPfpPuEXjDj86v91I/50b+/BwcO9A5rlBzvvMeKHe/t47/7D8z3CLxhx+NX/+0b8YP/+ + zqf3HtzLD3b33mfE96f83v1JRviFIw6++n/fiGf7D/f3Hny6N3t4PnuPEe/u7PJ75zswMcGIw6/+ + XzfiBzv7Dw/u7e9MPp1+OnmPEd8/z/i9vR1MZDDi8Kv/14344MF0j9Dbf/Awv/8+uvp8b8bv7e9N + Cb9gxOFX/+8b8QGpmHsPD3bvT7N77zHinWyX35tOPyX8ghGHX/2/bsTZ3t79+58e7O4e5PvZe4x4 + 98EB3tuZTWeEXzDi8Kv/1414Qhy4f+/T+/cf3p+9D1d/mk35vZzVUzDi8Kv/1414urt3f5f8hZ1p + vn/+HiPeu38P7+1SX4RfMOLwq//3jXhvb3d/7+HDhzsHDw9uP+K9yfk+v0cyQfj5I+589X4jzrOf + 9RHn97L9e/fuP9gjL/N97HG28yne+/TeFMPyR9z56v1G/EOY4/N7ewc7u/ceTPbvz97Hy7y/J+/N + duBKBiMOv/p/0YjfrcqsfUM9vLrY3T+4nYdp3+FP7+/df0DI6XCj3/2/c7x7n+7eLuS37/Cn+w/v + QxdHx6vffeh4v/9L/h/q/XNp5hEAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Length: ['877'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:15 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [8d913f5a-8b3f-11e6-80f1-a0b3ccf7272a] + method: DELETE + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-0?api-version=2015-06-01 + response: + body: {string: ''} + headers: + Cache-Control: [no-cache] + Content-Length: ['0'] + Date: ['Wed, 05 Oct 2016 21:06:26 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [94a9cf98-8b3f-11e6-9290-a0b3ccf7272a] + method: GET + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR5dZ + uc4/evS97/+S/wdC6kBEDAAAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Length: ['133'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:27 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJwcm9wZXJ0aWVzIjogeyJza3UiOiB7Im5hbWUiOiAic3RhbmRhcmQiLCAiZmFtaWx5IjogIkEi + fSwgInRlbmFudElkIjogIjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsICJh + Y2Nlc3NQb2xpY2llcyI6IFtdfSwgImxvY2F0aW9uIjogIndlc3R1cyJ9 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['156'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [94dd6bb0-8b3f-11e6-9faa-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-1?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t3c/Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwg0bbacZfXsI3qpzZfZsj0Dze7vH+x9Otnb2753MPt0e/98src9yWYP + tycPJg/vZffyh9P7GQHJptO8aV5WZTHlrr73/dFHBGRS5rNnVf00X5XV9SJfth89Os/KJh99xOh/ + VRfUxbxtV82ju1ECjfmvcfaDdZ2Pl3n70S/5Jf8PDSTP580BAAA= + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:28 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1198'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU2OTkyNjUsIm5iZiI6MTQ3NTY5OTI2NSwiZXhwIjoxNDc1NzAzMTY1LCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6IjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCIsInN1YiI6Inc3bHhjVDd4bGpOb2tBNkFNWUtiMzBZVXVOdXdfcE9VcVNhdVhKd0thWUkiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAifQ.CpDar_DCURn1Gv3rKgZKpjGTpn780JPapNBw4cevuOhFpMsT7DJ80TgExXPdNzhLESP9QZdNUN2gv2EspP76ZGexl1hIYGKumye-azQjAIzHVsseLhdh-JSDYQKkmG4iefvpC0NmPcSIzw5xHAD1RfzoQm9ozYGMYsENIK2yXxtw7ZBTIfU939E3nF9eV3BCUpuYTEsLJay2Rk9EolvjpfNsGuyF1AypzJ6EIYjDXd9GxNmstAG6Lin9vWxExNT0AWpSXciRcHHEd4ez-OUBtx5t2_e8nMLGgjEYNorrIvGLIAh769weSuCqQI2GLZtcSL2D3cUHJmT7UBcFurnKVw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [95bad76c-8b3f-11e6-b5e8-a0b3ccf7272a] + method: GET + uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 + response: + body: {string: '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-10-04T18:51:09Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} + headers: + Access-Control-Allow-Origin: ['*'] + Cache-Control: [no-cache] + Content-Length: ['1208'] + Content-Type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] + DataServiceVersion: [3.0;] + Date: ['Wed, 05 Oct 2016 21:06:29 GMT'] + Duration: ['5622112'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET, ASP.NET] + ocp-aad-diagnostics-server-name: [kizqbWR/KeylpM8cFecPprS5E/uaQ4yALSy/Hz4fcwc=] + ocp-aad-session-key: [mxlolq32bRMFZRsecNTUsQxhTlBmXN2yjUTBuenUvZBN3F-XTo30ttbctb7MA9NSGgngBF147Gi01IpPA_GCgnoYjHlEKC9252QtfUKwzDZ0V6NvDHMVw-8-ojVrsSKV.HbIMhQAB-Gb95X_dDL6TVqYW7Imj2Kt0ur2MujcFcyQ] + request-id: [7c525176-5a1e-4a75-be4f-142575f50c79] + x-ms-dirapi-data-contract-version: ['1.6'] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJwcm9wZXJ0aWVzIjogeyJ0ZW5hbnRJZCI6ICI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5 + M2EzZTljNWEiLCAiZW5hYmxlZEZvclRlbXBsYXRlRGVwbG95bWVudCI6IHRydWUsICJhY2Nlc3NQ + b2xpY2llcyI6IFt7InRlbmFudElkIjogIjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNl + OWM1YSIsICJwZXJtaXNzaW9ucyI6IHsiY2VydGlmaWNhdGVzIjogWyJhbGwiXSwgInNlY3JldHMi + OiBbImFsbCJdLCAia2V5cyI6IFsiZ2V0IiwgImNyZWF0ZSIsICJkZWxldGUiLCAibGlzdCIsICJ1 + cGRhdGUiLCAiaW1wb3J0IiwgImJhY2t1cCIsICJyZXN0b3JlIl19LCAib2JqZWN0SWQiOiAiNTk2 + M2Y1MGMtN2M0My00MDVjLWFmN2UtNTMyOTRkZTc2YWJkIn1dLCAic2t1IjogeyJuYW1lIjogInN0 + YW5kYXJkIiwgImZhbWlseSI6ICJBIn0sICJlbmFibGVkRm9yRGVwbG95bWVudCI6IHRydWUsICJl + bmFibGVkRm9yRGlza0VuY3J5cHRpb24iOiB0cnVlfSwgImxvY2F0aW9uIjogIndlc3R1cyJ9 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['510'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [9629bacc-8b3f-11e6-b864-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-2?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t/c+Gn20zBY54TbwbXu9wreDUKlJWU0zDIiaXRFma3zWZhfNR49+8S8ZfUSYrfK6LXL8 + /VHzdo0f59miKK/phWNqqwg0bbacZfXsI3qpzZfZsj0Dze7vH+x9Otnb2753MPt0e/98src9yWYP + tycPJg/vZffyh9P7GQHJptO8aV5WZTHlrr73i78GkGry0/lU33j46b3z+zvT7QfT/Xvb+zv3p9vZ + +YN8+/69vYf7s/zBp9lkRm/Q0BZF09Doqc9f/NEUIz0viB6Mw0dZWX70/dFHTT6tc6KV+4QozX9e + 5C1BoW/pDfpllpc5/1IWDb5Yr2byRbFYVTU+mWTTt+sV/UJ80VZ1/tH3f8kvIXg01EmZz55V9dN8 + VVbXi3zZfvSordd58F3RvD1dTutrZsD+92/yxaqkDvsweLK/qguizLxtV82ju1F2GvNf4+wH6zof + L2lsv+SX/D+IIeYS+wIAAA== + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:30 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL2dyYXBoLndpbmRvd3MubmV0LyIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU2OTkyNjUsIm5iZiI6MTQ3NTY5OTI2NSwiZXhwIjoxNDc1NzAzMTY1LCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6IjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCIsInN1YiI6Inc3bHhjVDd4bGpOb2tBNkFNWUtiMzBZVXVOdXdfcE9VcVNhdVhKd0thWUkiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAifQ.CpDar_DCURn1Gv3rKgZKpjGTpn780JPapNBw4cevuOhFpMsT7DJ80TgExXPdNzhLESP9QZdNUN2gv2EspP76ZGexl1hIYGKumye-azQjAIzHVsseLhdh-JSDYQKkmG4iefvpC0NmPcSIzw5xHAD1RfzoQm9ozYGMYsENIK2yXxtw7ZBTIfU939E3nF9eV3BCUpuYTEsLJay2Rk9EolvjpfNsGuyF1AypzJ6EIYjDXd9GxNmstAG6Lin9vWxExNT0AWpSXciRcHHEd4ez-OUBtx5t2_e8nMLGgjEYNorrIvGLIAh769weSuCqQI2GLZtcSL2D3cUHJmT7UBcFurnKVw] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 graphrbacmanagementclient/0.30.0rc6 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [972364fa-8b3f-11e6-bab2-a0b3ccf7272a] + method: GET + uri: https://graph.windows.net/00000000-0000-0000-0000-000000000000/me?api-version=1.6 + response: + body: {string: '{"odata.metadata":"https://graph.windows.net/54826b22-38d6-4fb2-bad9-b7b93a3e9c5a/$metadata#directoryObjects/Microsoft.DirectoryServices.User/@Element","odata.type":"Microsoft.DirectoryServices.User","objectType":"User","objectId":"5963f50c-7c43-405c-af7e-53294de76abd","deletionTimestamp":null,"accountEnabled":true,"signInNames":[],"assignedLicenses":[],"assignedPlans":[],"city":null,"companyName":null,"country":null,"creationType":null,"department":null,"dirSyncEnabled":null,"displayName":"Admin2","facsimileTelephoneNumber":null,"givenName":"Admin2","immutableId":null,"isCompromised":null,"jobTitle":null,"lastDirSyncTime":null,"mail":null,"mailNickname":"admin2","mobile":null,"onPremisesSecurityIdentifier":null,"otherMails":["destanko@microsoft.com"],"passwordPolicies":"None","passwordProfile":null,"physicalDeliveryOfficeName":null,"postalCode":null,"preferredLanguage":null,"provisionedPlans":[],"provisioningErrors":[],"proxyAddresses":[],"refreshTokensValidFromDateTime":"2016-10-04T18:51:09Z","sipProxyAddress":null,"state":null,"streetAddress":null,"surname":"Admin2","telephoneNumber":null,"usageLocation":null,"userPrincipalName":"admin2@AzureSDKTeam.onmicrosoft.com","userType":"Member"}'} + headers: + Access-Control-Allow-Origin: ['*'] + Cache-Control: [no-cache] + Content-Length: ['1208'] + Content-Type: [application/json;odata=minimalmetadata;streaming=true;charset=utf-8] + DataServiceVersion: [3.0;] + Date: ['Wed, 05 Oct 2016 21:06:31 GMT'] + Duration: ['1155426'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET, ASP.NET] + ocp-aad-diagnostics-server-name: [VEgnt9IZLieYw/YGLtI1o42g8XkOiLSJUp8j6kseWdU=] + ocp-aad-session-key: [iJ7_MImwudP93k8Y_Jvwfc0M7Ls2hos_JUL7_gIph0-ids5MVy7Ho-Z4Y_41MZcbOkmsQYYY_4oKb-tGe8LFJAQCdZvaWkhCZeLf84hS98oxB50kuT5oTvmFd65v_py1.NYQq-fjSu3BYsxBF0aqLpdin-Kgx_t2GJPW_HTcKV88] + request-id: [5774156a-e5ab-4583-8639-78ad80d031cc] + x-ms-dirapi-data-contract-version: ['1.6'] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJwcm9wZXJ0aWVzIjogeyJza3UiOiB7Im5hbWUiOiAicHJlbWl1bSIsICJmYW1pbHkiOiAiQSJ9 + LCAidGVuYW50SWQiOiAiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdiOTNhM2U5YzVhIiwgImFj + Y2Vzc1BvbGljaWVzIjogW3sidGVuYW50SWQiOiAiNTQ4MjZiMjItMzhkNi00ZmIyLWJhZDktYjdi + OTNhM2U5YzVhIiwgInBlcm1pc3Npb25zIjogeyJjZXJ0aWZpY2F0ZXMiOiBbImFsbCJdLCAic2Vj + cmV0cyI6IFsiYWxsIl0sICJrZXlzIjogWyJnZXQiLCAiY3JlYXRlIiwgImRlbGV0ZSIsICJsaXN0 + IiwgInVwZGF0ZSIsICJpbXBvcnQiLCAiYmFja3VwIiwgInJlc3RvcmUiXX0sICJvYmplY3RJZCI6 + ICI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQifV19LCAibG9jYXRpb24iOiAi + d2VzdHVzIn0= + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL21hbmFnZW1lbnQuY29yZS53aW5kb3dzLm5ldC8iLCJpc3MiOiJodHRwczovL3N0cy53aW5kb3dzLm5ldC81NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEvIiwiaWF0IjoxNDc1Njk4OTU3LCJuYmYiOjE0NzU2OTg5NTcsImV4cCI6MTQ3NTcwMjg1NywiYWNyIjoiMSIsImFtciI6WyJwd2QiXSwiYXBwaWQiOiIwNGIwNzc5NS04ZGRiLTQ2MWEtYmJlZS0wMmY5ZTFiZjdiNDYiLCJhcHBpZGFjciI6IjAiLCJlX2V4cCI6MTA4MDAsImZhbWlseV9uYW1lIjoiQWRtaW4yIiwiZ2l2ZW5fbmFtZSI6IkFkbWluMiIsImdyb3VwcyI6WyJlNGJiMGI1Ni0xMDE0LTQwZjgtODhhYi0zZDhhOGNiMGUwODYiLCI2Yjk3NzYxYS1kN2QwLTQ4ZjYtYWQ1Ni1mMzhkMzI3Yzg1NTMiXSwiaXBhZGRyIjoiMTY3LjIyMC4xLjE4NiIsIm5hbWUiOiJBZG1pbjIiLCJvaWQiOiI1OTYzZjUwYy03YzQzLTQwNWMtYWY3ZS01MzI5NGRlNzZhYmQiLCJwdWlkIjoiMTAwM0JGRkQ5NTlGODQyMyIsInNjcCI6InVzZXJfaW1wZXJzb25hdGlvbiIsInN1YiI6InNEZ2V4UndDTklmWS1oelFqakNEdlpUN0l6ZGZvNFN5cnI0eDBkRE56UjQiLCJ0aWQiOiI1NDgyNmIyMi0zOGQ2LTRmYjItYmFkOS1iN2I5M2EzZTljNWEiLCJ1bmlxdWVfbmFtZSI6ImFkbWluMkBBenVyZVNES1RlYW0ub25taWNyb3NvZnQuY29tIiwidXBuIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ2ZXIiOiIxLjAiLCJ3aWRzIjpbIjYyZTkwMzk0LTY5ZjUtNDIzNy05MTkwLTAxMjE3NzE0NWUxMCJdfQ.lpKmfD1cf29e7UTi0gPDMwJwMhZt28yDRYu_Ie4eoP6A8uy6KL8h33YQZSGVu0Zcp48y0KSn5USbKsvmmUh0hQwiGYgy4656XW08ZNnrBJ2hDUz8JnU3YfBJYOH8eE0RCO3xTWIx7YyzWPmdpa1qP7CZA0uGFwRhSkM3CBYPSN4aeFoKATipclzAnNhf-5tJ0hbdTNfPpgnO6n4o-hu6KQOwyYNb_eJm8hcYq-Crcbnwf8-2LlzvqVQJedDyVqPE8XM_uqE4uWNnPZOQaZX-pRg6bjpKANiw6aHCNykEmvFrJwEMTw5ekE9prahUpGl2ptOXK_av08Ez98V9j9IekQ] + Connection: [keep-alive] + Content-Length: ['407'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultmanagementclient/0.30.0 Azure-SDK-For-Python + AZURECLI/TEST/0.1.0b7] + accept-language: [en-US] + x-ms-client-request-id: [974a7bdc-8b3f-11e6-84b6-a0b3ccf7272a] + method: PUT + uri: https://management.azure.com/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/cli-test-keyvault-mgmt/providers/Microsoft.KeyVault/vaults/cli-keyvault-12345-3?api-version=2015-06-01 + response: + body: + string: !!binary | + H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcpl + VmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/In7xR8Xs + o0cf3W3Wk2ZaF6u2qJbN3Z3J7vmn+w92t3cn5zvb+7NZtp3l03vb08nDvQd75zsP7z/cuVvnTbWu + p/nndbVeNXenZbHd5k27/Ta/vszWZbu9uFi0d1d1dVnM8rq5+0UxraumOm/Hv1d+/ZNocZfbyav2 + rd29e/v3t+99NPpomS1ywm3g2/Z6hW8HoVKTsppmGBA1uyLM1viszS6ajx794l8y+ogwW+V1W+T4 + +6Pm7Ro/zrNFUV7TC8fUVhFY1fmiWC8+onfafJkt2zOQ7P7+wd6nk7297XsHs0+3988ne9uTbPZw + e/Jg8vBedi9/OL2fEYxsOs2b5mVVFlPu6Xu/+GsAqSY/nU/1jYef3ju/vzPdfjDdv7e9v3N/up2d + P8i379/be7g/yx98mk1m9AaNbFE0DQ2e+vzFH00x0POCyME4fJSV5UffH33U5NM6J1K5T4jQ/OdF + 3hIU+pbeoF9meZnzL2XR4Iv1aiZfFItVVeOTSTZ9u17RL8QWbVXnH33/l/wSgkdDnZT57FlVP81X + ZXW9yJftR4/Os7LJRx/xRH1VFzSseduumkd3o6ww5r/G2Q/WdT5eEmK/5Jf8P+FU1oK3AgAA + headers: + Cache-Control: [no-cache] + Content-Encoding: [gzip] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 21:06:51 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000; includeSubDomains] + Vary: [Accept-Encoding] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-service-version: [1.0.0.143] + x-ms-ratelimit-remaining-subscription-writes: ['1196'] + status: {code: 200, message: OK} +version: 1 diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_secret.yaml b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_secret.yaml new file mode 100644 index 00000000000..ca484317ec2 --- /dev/null +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/recordings/test_keyvault_secret.yaml @@ -0,0 +1,289 @@ +interactions: +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogdHJ1ZX0sICJ2YWx1ZSI6ICJBQkMxMjMifQ== + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Length: ['52'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fb677a88-8b53-11e6-99bf-a0b3ccf7272a] + method: PUT + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1?api-version=2015-06-01 + response: + body: {string: '{"value":"ABC123","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/63b10af9e2c84b23b79f957f5b2d098d","attributes":{"enabled":true,"created":1475710349,"updated":1475710349}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['195'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:29 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fbe309a2-8b53-11e6-a3e7-a0b3ccf7272a] + method: GET + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets?api-version=2015-06-01 + response: + body: {string: '{"value":[{"id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1","attributes":{"enabled":true,"created":1475710349,"updated":1475710349}}],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['173'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:29 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogdHJ1ZX0sICJ0YWdzIjogeyJ0ZXN0IjogImZvbyJ9 + LCAidmFsdWUiOiAiREVGNDU2IiwgImNvbnRlbnRUeXBlIjogInRlc3QgdHlwZSJ9 + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Length: ['105'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fc05d918-8b53-11e6-99b5-a0b3ccf7272a] + method: PUT + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1?api-version=2015-06-01 + response: + body: {string: '{"value":"DEF456","contentType":"test type","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/382b2185019241bfaa7787b920534173","attributes":{"enabled":true,"created":1475710350,"updated":1475710350},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['243'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:29 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fc441c5e-8b53-11e6-a951-a0b3ccf7272a] + method: GET + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/versions?api-version=2015-06-01 + response: + body: {string: '{"value":[{"contentType":"test type","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/382b2185019241bfaa7787b920534173","attributes":{"enabled":true,"created":1475710350,"updated":1475710350},"tags":{"test":"foo"}},{"id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/63b10af9e2c84b23b79f957f5b2d098d","attributes":{"enabled":true,"created":1475710349,"updated":1475710349}}],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['433'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:30 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fc6b1d22-8b53-11e6-8ac2-a0b3ccf7272a] + method: GET + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/?api-version=2015-06-01 + response: + body: {string: '{"value":"DEF456","contentType":"test type","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/382b2185019241bfaa7787b920534173","attributes":{"enabled":true,"created":1475710350,"updated":1475710350},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['243'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:30 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fc8f0d80-8b53-11e6-8d8a-a0b3ccf7272a] + method: GET + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/63b10af9e2c84b23b79f957f5b2d098d?api-version=2015-06-01 + response: + body: {string: '{"value":"ABC123","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/63b10af9e2c84b23b79f957f5b2d098d","attributes":{"enabled":true,"created":1475710349,"updated":1475710349}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['195'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:30 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: !!binary | + eyJhdHRyaWJ1dGVzIjogeyJlbmFibGVkIjogZmFsc2V9fQ== + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Length: ['34'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fcb2e682-8b53-11e6-a8a5-a0b3ccf7272a] + method: PATCH + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/?api-version=2015-06-01 + response: + body: {string: '{"contentType":"test type","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/382b2185019241bfaa7787b920534173","attributes":{"enabled":false,"created":1475710350,"updated":1475710352},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['227'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:32 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Length: ['0'] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fce2993a-8b53-11e6-b85f-a0b3ccf7272a] + method: DELETE + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1?api-version=2015-06-01 + response: + body: {string: '{"contentType":"test type","id":"https://cli-test-keyvault-secret.vault.azure.net/secrets/secret1/382b2185019241bfaa7787b920534173","attributes":{"enabled":false,"created":1475710350,"updated":1475710352},"tags":{"test":"foo"}}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['227'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:31 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +- request: + body: null + headers: + Accept: [application/json] + Accept-Encoding: ['gzip, deflate'] + Authorization: [Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyIsImtpZCI6Ikk2b0J3NFZ6QkhPcWxlR3JWMkFKZEE1RW1YYyJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0LzU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YS8iLCJpYXQiOjE0NzU3MTAwNDEsIm5iZiI6MTQ3NTcxMDA0MSwiZXhwIjoxNDc1NzEzOTQxLCJhY3IiOiIxIiwiYW1yIjpbInB3ZCJdLCJhcHBpZCI6IjA0YjA3Nzk1LThkZGItNDYxYS1iYmVlLTAyZjllMWJmN2I0NiIsImFwcGlkYWNyIjoiMCIsImVfZXhwIjoxMDgwMCwiZmFtaWx5X25hbWUiOiJBZG1pbjIiLCJnaXZlbl9uYW1lIjoiQWRtaW4yIiwiZ3JvdXBzIjpbImU0YmIwYjU2LTEwMTQtNDBmOC04OGFiLTNkOGE4Y2IwZTA4NiIsIjZiOTc3NjFhLWQ3ZDAtNDhmNi1hZDU2LWYzOGQzMjdjODU1MyJdLCJpcGFkZHIiOiIxNjcuMjIwLjEuMTg2IiwibmFtZSI6IkFkbWluMiIsIm9pZCI6IjU5NjNmNTBjLTdjNDMtNDA1Yy1hZjdlLTUzMjk0ZGU3NmFiZCIsInB1aWQiOiIxMDAzQkZGRDk1OUY4NDIzIiwic2NwIjoidXNlcl9pbXBlcnNvbmF0aW9uIiwic3ViIjoicHVBaUtHNEEwYTdVQTRkeFkzVU1YRjhqa3FkdFZIOGgxUDNjS00wMmhxayIsInRpZCI6IjU0ODI2YjIyLTM4ZDYtNGZiMi1iYWQ5LWI3YjkzYTNlOWM1YSIsInVuaXF1ZV9uYW1lIjoiYWRtaW4yQEF6dXJlU0RLVGVhbS5vbm1pY3Jvc29mdC5jb20iLCJ1cG4iOiJhZG1pbjJAQXp1cmVTREtUZWFtLm9ubWljcm9zb2Z0LmNvbSIsInZlciI6IjEuMCJ9.cBVNDvxzPlMZhrEkg-aOzZUqLYMYpobYIAn-3WT2AjDUjPgw9MnER6TqfreofalX3qDkfZ1xSlGo0_gau5mHw69spkeIX1hxPBstrpW4Gfhdk-cUGWUHQg_2GcErGxJ1Okkfiys-4iylV8p4U0PGaxaphkDI0m9qCdgxD36Jxek4iEcX3C1FOLtY-bHes3EosPxqJdjgEFz4M1hOJa6B-nTqvcMAQfrj0ZmpYY-mBdO3eYy4r7r3BgiJPVDhjUg1_qtVn_y1hBEG-66BOIT8MhItHfpAJvkMpJBjBxb0vpiHQ6qKOIAvxwriV0itkKle-B8nem_k93Dln2fIb0jMsA] + Connection: [keep-alive] + Content-Type: [application/json; charset=utf-8] + User-Agent: [python/3.5.1 (Windows-10-10.0.14393-SP0) requests/2.11.1 msrest/0.4.4 + msrest_azure/0.4.3 keyvaultclient/2015-06-01 Azure-SDK-For-Python] + accept-language: [en-US] + x-ms-client-request-id: [fd1052f4-8b53-11e6-bcdc-a0b3ccf7272a] + method: GET + uri: https://cli-test-keyvault-secret.vault.azure.net/secrets?api-version=2015-06-01 + response: + body: {string: '{"value":[],"nextLink":null}'} + headers: + Cache-Control: [no-cache] + Content-Length: ['28'] + Content-Type: [application/json; charset=utf-8] + Date: ['Wed, 05 Oct 2016 23:32:31 GMT'] + Expires: ['-1'] + Pragma: [no-cache] + Server: [Microsoft-IIS/8.5] + Strict-Transport-Security: [max-age=31536000;includeSubDomains] + X-AspNet-Version: [4.0.30319] + X-Content-Type-Options: [nosniff] + X-Powered-By: [ASP.NET] + x-ms-keyvault-region: [westus] + x-ms-keyvault-service-version: [1.0.0.778] + status: {code: 200, message: OK} +version: 1 diff --git a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/test_keyvault_commands.py b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/test_keyvault_commands.py index e45c459e595..ecc6ede8d93 100644 --- a/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/test_keyvault_commands.py +++ b/src/command_modules/azure-cli-keyvault/azure/cli/command_modules/keyvault/tests/test_keyvault_commands.py @@ -17,15 +17,14 @@ class KeyVaultMgmtScenarioTest(ResourceGroupVCRTestBase): def __init__(self, test_method): super(KeyVaultMgmtScenarioTest, self).__init__(__file__, test_method) - self.resource_group = 'keyvault1rg' + self.resource_group = 'cli-test-keyvault-mgmt' self.keyvault_names = ['cli-keyvault-12345-0', 'cli-keyvault-12345-1', 'cli-keyvault-12345-2', 'cli-keyvault-12345-3'] self.location = 'westus' - self.mock_object_id = '00000000-0000-0000-0000-000000000000' - def test_key_vault_mgmt(self): + def test_keyvault_mgmt(self): self.execute() def body(self): @@ -33,14 +32,16 @@ def body(self): kv = self.keyvault_names[0] loc = self.location # test create keyvault with default access policy set - self.cmd('keyvault create -g {} -n {} -l {}'.format(rg, kv, loc), checks=[ + keyvault = self.cmd('keyvault create -g {} -n {} -l {}'.format(rg, kv, loc), checks=[ JMESPathCheck('name', kv), JMESPathCheck('location', loc), JMESPathCheck('resourceGroup', rg), JMESPathCheck('type(properties.accessPolicies)', 'array'), JMESPathCheck('length(properties.accessPolicies)', 1), + JMESPathCheck('properties.sku.name', 'standard') ]) - self.cmd('keyvault show -g {} -n {}'.format(rg, kv), checks=[ + policy_id = keyvault['properties']['accessPolicies'][0]['objectId'] + self.cmd('keyvault show -n {}'.format(kv), checks=[ JMESPathCheck('name', kv), JMESPathCheck('location', loc), JMESPathCheck('resourceGroup', rg), @@ -55,39 +56,157 @@ def body(self): JMESPathCheck('[0].resourceGroup', rg), ]) # test updating keyvault sku name - self.cmd('keyvault show -g {} -n {}'.format(rg, kv), checks=[ - JMESPathCheck('name', kv), - JMESPathCheck('properties.sku.name', 'standard'), - ]) - self.cmd('keyvault update -g {} -n {} --set properties.sku.name=premium'.format(rg, kv), - checks=[ + self.cmd('keyvault update -g {} -n {} --set properties.sku.name=premium'.format(rg, kv), checks=[ JMESPathCheck('name', kv), JMESPathCheck('properties.sku.name', 'premium'), ]) # test policy set/delete - # the object id is mocked so we expect the service raise an error - self.cmd('keyvault set-policy -g {} -n {} --object-id {} --perms-to-secrets get list'.format(rg, kv, self.mock_object_id), - allowed_exceptions="An invalid value was provided for 'accessPolicies'.") - self.cmd('keyvault delete-policy -g {} -n {} --object-id {}'.format(rg, kv, self.mock_object_id), - allowed_exceptions="No matching policies found") + self.cmd('keyvault set-policy -g {} -n {} --object-id {} --certificate-permissions get list'.format(rg, kv, policy_id), + checks=JMESPathCheck('length(properties.accessPolicies[0].permissions.certificates)', 2)) + self.cmd('keyvault delete-policy -g {} -n {} --object-id {}'.format(rg, kv, policy_id), checks=[ + JMESPathCheck('type(properties.accessPolicies)', 'array'), + JMESPathCheck('length(properties.accessPolicies)', 0) + ]) + # test keyvault delete - self.cmd('keyvault delete -g {} -n {}'.format(rg, kv)) + self.cmd('keyvault delete -n {}'.format(kv)) self.cmd('keyvault list -g {}'.format(rg), checks=NoneCheck()) # test create keyvault further self.cmd('keyvault create -g {} -n {} -l {} --no-self-perms'.format(rg, self.keyvault_names[1], loc), checks=[ JMESPathCheck('type(properties.accessPolicies)', 'array'), - JMESPathCheck('length(properties.accessPolicies)', 0), + JMESPathCheck('length(properties.accessPolicies)', 0) ]) self.cmd('keyvault create -g {} -n {} -l {} --enabled-for-deployment true '\ '--enabled-for-disk-encryption true --enabled-for-template-deployment true'.format(rg, self.keyvault_names[2], loc), checks=[ JMESPathCheck('properties.enabledForDeployment', True), JMESPathCheck('properties.enabledForDiskEncryption', True), - JMESPathCheck('properties.enabledForTemplateDeployment', True), + JMESPathCheck('properties.enabledForTemplateDeployment', True) ]) self.cmd('keyvault create -g {} -n {} -l {} --sku premium'.format(rg, self.keyvault_names[3], loc), checks=[ - JMESPathCheck('properties.sku.name', 'premium'), + JMESPathCheck('properties.sku.name', 'premium') + ]) + +class KeyVaultKeyScenarioTest(ResourceGroupVCRTestBase): + + def __init__(self, test_method): + super(KeyVaultKeyScenarioTest, self).__init__(__file__, test_method) + self.resource_group = 'cli-test-keyvault-key' + self.keyvault_name = 'cli-keyvault-test-key' + self.location = 'westus' + + def set_up(self): + super(KeyVaultKeyScenarioTest, self).set_up() + self.cmd('keyvault create -g {} -n {} -l {}'.format(self.resource_group, self.keyvault_name, self.location)) + + def test_keyvault_key(self): + self.execute() + + def body(self): + kv = self.keyvault_name + # create a key + key = self.cmd('keyvault key create --vault-name {} -n key1 -p software'.format(kv), + checks=JMESPathCheck('attributes.enabled', True)) + first_kid = key['key']['kid'] + first_version = first_kid.rsplit('/', 1)[1] + + # list keys + self.cmd('keyvault key list --vault-name {}'.format(kv), + checks=JMESPathCheck('length(@)', 1)) + + # create a new key version + key = self.cmd('keyvault key create --vault-name {} -n key1 -p software --disabled --ops encrypt decrypt --tags test=foo'.format(kv), checks=[ + JMESPathCheck('attributes.enabled', False), + JMESPathCheck('length(key.keyOps)', 2), + JMESPathCheck('tags', {'test':'foo'}) + ]) + second_kid = key['key']['kid'] + # list key versions + self.cmd('keyvault key list-versions --vault-name {} -n key1'.format(kv), + checks=JMESPathCheck('length(@)', 2)) + + # show key (latest) + self.cmd('keyvault key show --vault-name {} -n key1'.format(kv), + checks=JMESPathCheck('key.kid', second_kid)) + + # show key (specific version) + self.cmd('keyvault key show --vault-name {} -n key1 -v {}'.format(kv, first_version), + checks=JMESPathCheck('key.kid', first_kid)) + + # set key attributes + self.cmd('keyvault key set-attributes --vault-name {} -n key1 --enabled true'.format(kv), checks=[ + JMESPathCheck('key.kid', second_kid), + JMESPathCheck('attributes.enabled', True) + ]) + + # delete key + self.cmd('keyvault key delete --vault-name {} -n key1'.format(kv)) + self.cmd('keyvault key list --vault-name {}'.format(kv), + checks=NoneCheck()) + + # PHASE 2 COMMANDS + # TODO: import PEM key + # TODO: import BYOK key + # TODO: backup key + # TODO: restore key backup + +class KeyVaultSecretScenarioTest(ResourceGroupVCRTestBase): + + def __init__(self, test_method): + super(KeyVaultSecretScenarioTest, self).__init__(__file__, test_method) + self.resource_group = 'cli-test-keyvault-secret' + self.keyvault_name = 'cli-test-keyvault-secret' + self.location = 'westus' + + def set_up(self): + super(KeyVaultSecretScenarioTest, self).set_up() + self.cmd('keyvault create -g {} -n {} -l {}'.format(self.resource_group, self.keyvault_name, self.location)) + + def test_keyvault_secret(self): + self.execute() + + def body(self): + kv = self.keyvault_name + # create a secret + secret = self.cmd('keyvault secret set --vault-name {} -n secret1 --value ABC123'.format(kv), + checks=JMESPathCheck('value', 'ABC123')) + first_kid = secret['id'] + first_version = first_kid.rsplit('/', 1)[1] + + # list secrets + self.cmd('keyvault secret list --vault-name {}'.format(kv), + checks=JMESPathCheck('length(@)', 1)) + + # create a new secret version + secret = self.cmd('keyvault secret set --vault-name {} -n secret1 --value DEF456 --tags test=foo --content-type "test type"'.format(kv), checks=[ + JMESPathCheck('value', 'DEF456'), + JMESPathCheck('tags', {'test':'foo'}), + JMESPathCheck('contentType', 'test type') ]) + second_kid = secret['id'] + + # list secret versions + self.cmd('keyvault secret list-versions --vault-name {} -n secret1'.format(kv), + checks=JMESPathCheck('length(@)', 2)) + + # show secret (latest) + self.cmd('keyvault secret show --vault-name {} -n secret1'.format(kv), + checks=JMESPathCheck('id', second_kid)) + # show secret (specific version) + self.cmd('keyvault secret show --vault-name {} -n secret1 -v {}'.format(kv, first_version), + checks=JMESPathCheck('id', first_kid)) + + # set secret attributes + self.cmd('keyvault secret set-attributes --vault-name {} -n secret1 --enabled false'.format(kv), checks=[ + JMESPathCheck('id', second_kid), + JMESPathCheck('attributes.enabled', False) + ]) + # delete secret + self.cmd('keyvault secret delete --vault-name {} -n secret1'.format(kv)) + self.cmd('keyvault secret list --vault-name {}'.format(kv), + checks=NoneCheck()) + # PHASE 2 COMMANDS + # TODO: download secret diff --git a/src/command_modules/azure-cli-keyvault/requirements.txt b/src/command_modules/azure-cli-keyvault/requirements.txt index 525837d8ad6..3a61569cd5e 100644 --- a/src/command_modules/azure-cli-keyvault/requirements.txt +++ b/src/command_modules/azure-cli-keyvault/requirements.txt @@ -1 +1 @@ -azure==2.0.0rc6 +azure-mgmt-keyvault==0.30.0 diff --git a/src/command_modules/azure-cli-keyvault/setup.py b/src/command_modules/azure-cli-keyvault/setup.py index 4ef2c806d04..503b84414c6 100644 --- a/src/command_modules/azure-cli-keyvault/setup.py +++ b/src/command_modules/azure-cli-keyvault/setup.py @@ -27,7 +27,7 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', + 'azure-mgmt-keyvault==0.30.0', 'azure-cli-core', ] @@ -47,10 +47,14 @@ namespace_packages = [ 'azure', 'azure.cli', - 'azure.cli.command_modules', + 'azure.cli.command_modules' ], packages=[ 'azure.cli.command_modules.keyvault', + 'azure.cli.command_modules.keyvault.keyvaultclient', + 'azure.cli.command_modules.keyvault.convenience', + 'azure.cli.command_modules.keyvault.convenience.http_bearer_challenge_cache', + 'azure.cli.command_modules.keyvault.keyvaultclient.models' ], install_requires=DEPENDENCIES, ) diff --git a/src/command_modules/azure-cli-network/requirements.txt b/src/command_modules/azure-cli-network/requirements.txt index 525837d8ad6..7a4a9016747 100644 --- a/src/command_modules/azure-cli-network/requirements.txt +++ b/src/command_modules/azure-cli-network/requirements.txt @@ -1 +1 @@ -azure==2.0.0rc6 +azure-mgmt-network==0.30.0rc6 \ No newline at end of file diff --git a/src/command_modules/azure-cli-network/setup.py b/src/command_modules/azure-cli-network/setup.py index b64c1841dc5..228fabf0556 100644 --- a/src/command_modules/azure-cli-network/setup.py +++ b/src/command_modules/azure-cli-network/setup.py @@ -24,10 +24,10 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', - 'azure-cli-core', + 'azure-mgmt-network==0.30.0rc6', 'azure-mgmt-trafficmanager==0.30.0rc6', - 'azure-mgmt-dns==0.30.0rc6' + 'azure-mgmt-dns==0.30.0rc6', + 'azure-cli-core' ] with open('README.rst', 'r', encoding='utf-8') as f: diff --git a/src/command_modules/azure-cli-profile/requirements.txt b/src/command_modules/azure-cli-profile/requirements.txt index 525837d8ad6..9610ff01056 100644 --- a/src/command_modules/azure-cli-profile/requirements.txt +++ b/src/command_modules/azure-cli-profile/requirements.txt @@ -1 +1 @@ -azure==2.0.0rc6 +azure-mgmt==0.30.0rc6 diff --git a/src/command_modules/azure-cli-profile/setup.py b/src/command_modules/azure-cli-profile/setup.py index 3b0f78a094b..2a3dddba49c 100644 --- a/src/command_modules/azure-cli-profile/setup.py +++ b/src/command_modules/azure-cli-profile/setup.py @@ -25,7 +25,6 @@ DEPENDENCIES = [ 'adal>=0.4.1', - 'azure==2.0.0rc6', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-redis/requirements.txt b/src/command_modules/azure-cli-redis/requirements.txt index 525837d8ad6..6951559576a 100644 --- a/src/command_modules/azure-cli-redis/requirements.txt +++ b/src/command_modules/azure-cli-redis/requirements.txt @@ -1 +1 @@ -azure==2.0.0rc6 +azure-mgmt-redis==1.0.0 diff --git a/src/command_modules/azure-cli-redis/setup.py b/src/command_modules/azure-cli-redis/setup.py index a1287febce3..360b269302e 100644 --- a/src/command_modules/azure-cli-redis/setup.py +++ b/src/command_modules/azure-cli-redis/setup.py @@ -27,7 +27,7 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', + 'azure-mgmt-redis==1.0.0', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-resource/requirements.txt b/src/command_modules/azure-cli-resource/requirements.txt index 525837d8ad6..068567601d5 100644 --- a/src/command_modules/azure-cli-resource/requirements.txt +++ b/src/command_modules/azure-cli-resource/requirements.txt @@ -1 +1 @@ -azure==2.0.0rc6 +azure-mgmt-resource==0.30.0rc6 diff --git a/src/command_modules/azure-cli-resource/setup.py b/src/command_modules/azure-cli-resource/setup.py index 58ed4c0a476..b2eeec8a806 100644 --- a/src/command_modules/azure-cli-resource/setup.py +++ b/src/command_modules/azure-cli-resource/setup.py @@ -24,7 +24,7 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', + 'azure-mgmt-resource==0.30.0rc6', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-role/azure/cli/command_modules/role/custom.py b/src/command_modules/azure-cli-role/azure/cli/command_modules/role/custom.py index e61e4866f4c..721714d4669 100644 --- a/src/command_modules/azure-cli-role/azure/cli/command_modules/role/custom.py +++ b/src/command_modules/azure-cli-role/azure/cli/command_modules/role/custom.py @@ -12,6 +12,7 @@ from azure.cli.core._util import CLIError, todict, get_file_json import azure.cli.core._logging as _logging +from azure.cli.core._profile import CredentialType from azure.cli.core.help_files import helps from azure.cli.core.commands.client_factory import (get_mgmt_service_client, @@ -46,7 +47,7 @@ def _auth_client_factory(scope=None): def _graph_client_factory(**_): from azure.cli.core._profile import Profile profile = Profile() - cred, _, tenant_id = profile.get_login_credentials(True) + cred, _, tenant_id = profile.get_login_credentials(credential_type=CredentialType.rbac) client = GraphRbacManagementClient(cred, tenant_id) configure_common_settings(client) return client diff --git a/src/command_modules/azure-cli-role/requirements.txt b/src/command_modules/azure-cli-role/requirements.txt index ead816199b9..bcdfd621136 100644 --- a/src/command_modules/azure-cli-role/requirements.txt +++ b/src/command_modules/azure-cli-role/requirements.txt @@ -1,3 +1,2 @@ -azure==2.0.0rc6 azure-mgmt-authorization==0.30.0rc6 azure-graphrbac==0.30.0rc6 diff --git a/src/command_modules/azure-cli-role/setup.py b/src/command_modules/azure-cli-role/setup.py index 8851926fc59..8e3e860fea2 100644 --- a/src/command_modules/azure-cli-role/setup.py +++ b/src/command_modules/azure-cli-role/setup.py @@ -24,7 +24,6 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', 'azure-cli-core', 'azure-mgmt-authorization==0.30.0rc6', 'azure-graphrbac==0.30.0rc6', diff --git a/src/command_modules/azure-cli-storage/requirements.txt b/src/command_modules/azure-cli-storage/requirements.txt index 525837d8ad6..a8e3375c976 100644 --- a/src/command_modules/azure-cli-storage/requirements.txt +++ b/src/command_modules/azure-cli-storage/requirements.txt @@ -1 +1,2 @@ -azure==2.0.0rc6 +azure-storage==0.33.0 +azure-mgmt-storage==0.30.0rc6 diff --git a/src/command_modules/azure-cli-storage/setup.py b/src/command_modules/azure-cli-storage/setup.py index 1ebe9c598ed..0cdf93e25e7 100644 --- a/src/command_modules/azure-cli-storage/setup.py +++ b/src/command_modules/azure-cli-storage/setup.py @@ -24,7 +24,8 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', + 'azure-storage==0.33.0', + 'azure-mgmt-storage==0.30.0rc6', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-vm/requirements.txt b/src/command_modules/azure-cli-vm/requirements.txt index 525837d8ad6..577ce3d5b34 100644 --- a/src/command_modules/azure-cli-vm/requirements.txt +++ b/src/command_modules/azure-cli-vm/requirements.txt @@ -1 +1,3 @@ -azure==2.0.0rc6 +azure-mgmt-compute==0.30.0rc6 +azure-mgmt-network==0.30.0rc6 +azure-mgmt-resource==0.30.0rc6 \ No newline at end of file diff --git a/src/command_modules/azure-cli-vm/setup.py b/src/command_modules/azure-cli-vm/setup.py index d4568df9e30..6e29a965705 100644 --- a/src/command_modules/azure-cli-vm/setup.py +++ b/src/command_modules/azure-cli-vm/setup.py @@ -24,7 +24,9 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', + 'azure-mgmt-compute==0.30.0rc6', + 'azure-mgmt-network==0.30.0rc6', + 'azure-mgmt-resource==0.30.0rc6', 'azure-cli-core', ] diff --git a/src/command_modules/azure-cli-webapp/requirements.txt b/src/command_modules/azure-cli-webapp/requirements.txt index bac6b86f8a7..2d87befeb93 100644 --- a/src/command_modules/azure-cli-webapp/requirements.txt +++ b/src/command_modules/azure-cli-webapp/requirements.txt @@ -1,2 +1 @@ -azure==2.0.0rc6 azure-mgmt-web==0.30.0rc6 diff --git a/src/command_modules/azure-cli-webapp/setup.py b/src/command_modules/azure-cli-webapp/setup.py index 301170ed78d..e067f3c48f3 100644 --- a/src/command_modules/azure-cli-webapp/setup.py +++ b/src/command_modules/azure-cli-webapp/setup.py @@ -24,7 +24,6 @@ ] DEPENDENCIES = [ - 'azure==2.0.0rc6', 'azure-cli-core', 'azure-mgmt-web==0.30.0rc6', # v1.17 breaks on wildcard cert https://github.com/shazow/urllib3/issues/981