diff --git a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md index 74f978807282..a6e077f7d63f 100644 --- a/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md +++ b/sdk/keyvault/azure-keyvault-administration/CHANGELOG.md @@ -1,16 +1,17 @@ # Release History -## 4.3.0b1 (Unreleased) +## 4.3.0b1 (2022-11-15) ### Features Added - -### Breaking Changes - -### Bugs Fixed +- Added sync and async `KeyVaultSettingsClient`s for getting and updating Managed HSM settings. +- Added support for service API version `7.4-preview.1` ### Other Changes +- Python 3.6 is no longer supported. Please use Python version 3.7 or later. +- Key Vault API version `7.4-preview.1` is now the default - Updated minimum `azure-core` version to 1.24.0 - Dropped `msrest` requirement +- Dropped `six` requirement - Added requirement for `isodate>=0.6.1` (`isodate` was required by `msrest`) - Added requirement for `typing-extensions>=4.0.1` diff --git a/sdk/keyvault/azure-keyvault-administration/README.md b/sdk/keyvault/azure-keyvault-administration/README.md index 3422d69a07b9..a2c43bf6ab81 100644 --- a/sdk/keyvault/azure-keyvault-administration/README.md +++ b/sdk/keyvault/azure-keyvault-administration/README.md @@ -18,7 +18,8 @@ create, manage, and deploy public and private SSL/TLS certificates ## _Disclaimer_ -_Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691_. +_Azure SDK Python packages support for Python 2.7 has ended 01 January 2022. For more information and questions, please refer to https://github.com/Azure/azure-sdk-for-python/issues/20691._ +_Python 3.7 or later is required to use this package. For more details, please refer to [Azure SDK for Python version support policy](https://github.com/Azure/azure-sdk-for-python/wiki/Azure-SDKs-Python-version-support-policy)._ ## Getting started ### Install packages @@ -32,7 +33,7 @@ authentication as demonstrated below. ### Prerequisites * An [Azure subscription][azure_sub] -* Python 3.6 or later +* Python 3.7 or later * An existing [Key Vault Managed HSM][managed_hsm]. If you need to create one, you can do so using the Azure CLI by following the steps in [this document][managed_hsm_cli]. ### Authenticate the client diff --git a/sdk/keyvault/azure-keyvault-administration/assets.json b/sdk/keyvault/azure-keyvault-administration/assets.json index d3c1bee492da..78acaf1c7701 100644 --- a/sdk/keyvault/azure-keyvault-administration/assets.json +++ b/sdk/keyvault/azure-keyvault-administration/assets.json @@ -2,5 +2,5 @@ "AssetsRepo": "Azure/azure-sdk-assets", "AssetsRepoPrefixPath": "python", "TagPrefix": "python/keyvault/azure-keyvault-administration", - "Tag": "python/keyvault/azure-keyvault-administration_d3a997562c" + "Tag": "python/keyvault/azure-keyvault-administration_ed5ac87a41" } diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py index b58200d00948..172c30bee403 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/__init__.py @@ -4,7 +4,7 @@ # ------------------------------------ from ._access_control_client import KeyVaultAccessControlClient from ._backup_client import KeyVaultBackupClient -from ._enums import KeyVaultRoleScope, KeyVaultDataAction +from ._enums import KeyVaultRoleScope, KeyVaultDataAction, SettingType from ._internal.client_base import ApiVersion from ._models import ( KeyVaultBackupResult, @@ -12,7 +12,9 @@ KeyVaultRoleAssignment, KeyVaultRoleAssignmentProperties, KeyVaultRoleDefinition, + KeyVaultSetting, ) +from ._settings_client import KeyVaultSettingsClient __all__ = [ @@ -26,6 +28,9 @@ "KeyVaultRoleAssignmentProperties", "KeyVaultRoleDefinition", "KeyVaultRoleScope", + "KeyVaultSetting", + "KeyVaultSettingsClient", + "SettingType", ] from ._version import VERSION diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py index ce21fb4110ac..98376695c967 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_enums.py @@ -85,3 +85,9 @@ class KeyVaultDataAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): READ_HSM_RESTORE_STATUS = "Microsoft.KeyVault/managedHsm/restore/status/action" #: Generate random numbers. RANDOM_NUMBERS_GENERATE = "Microsoft.KeyVault/managedHsm/rng/action" + + +class SettingType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type specifier of the setting value.""" + + BOOLEAN = "boolean" diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py index 63dc06f9a882..5e4dacf1d404 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_key_vault_client.py @@ -43,7 +43,7 @@ class KeyVaultClient(KeyVaultClientOperationsMixin, MultiApiClientMixin, _SDKCli :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ - DEFAULT_API_VERSION = '7.3' + DEFAULT_API_VERSION = '7.4-preview.1' _PROFILE_TAG = "azure.keyvault.KeyVaultClient" LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py index 1ee9c6c4184c..c8c3cd1c6306 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/_operations_mixin.py @@ -24,8 +24,7 @@ def begin_full_backup( azure_storage_blob_container_uri: Optional[Union[_models.SASTokenParameter, IO]] = None, **kwargs: Any ) -> LROPoller[_models.FullBackupOperation]: - """Creates a full backup using a user-provided SAS token to an Azure blob storage container. This - operation is supported only by the Managed HSM service. + """Creates a full backup using a user-provided SAS token to an Azure blob storage container. :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str @@ -33,7 +32,8 @@ def begin_full_backup( valid Azure blob container where full backup needs to be stored. This token needs to be valid for at least next 24 hours from the time of making this call. Is either a model type or a IO type. Default value is None. - :type azure_storage_blob_container_uri: ~azure.keyvault.v7_3.models.SASTokenParameter or IO + :type azure_storage_blob_container_uri: ~azure.keyvault.v7_4_preview_1.models.SASTokenParameter + or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -47,7 +47,8 @@ def begin_full_backup( Retry-After header is present. :return: An instance of LROPoller that returns either FullBackupOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.FullBackupOperation] + :rtype: + ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.FullBackupOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_backup') @@ -81,7 +82,8 @@ def begin_full_restore_operation( :type vault_base_url: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.RestoreOperationParameters or IO + :type restore_blob_details: ~azure.keyvault.v7_4_preview_1.models.RestoreOperationParameters or + IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -95,7 +97,7 @@ def begin_full_restore_operation( Retry-After header is present. :return: An instance of LROPoller that returns either RestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.RestoreOperation] + :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.RestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_restore_operation') @@ -132,8 +134,8 @@ def begin_selective_key_restore_operation( :type key_name: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperationParameters - or IO + :type restore_blob_details: + ~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperationParameters or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -147,7 +149,8 @@ def begin_selective_key_restore_operation( Retry-After header is present. :return: An instance of LROPoller that returns either SelectiveKeyRestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperation] + :rtype: + ~azure.core.polling.LROPoller[~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_selective_key_restore_operation') @@ -182,7 +185,7 @@ def full_backup_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FullBackupOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.FullBackupOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.FullBackupOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('full_backup_status') @@ -203,6 +206,70 @@ def full_backup_status( mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return mixin_instance.full_backup_status(vault_base_url, job_id, **kwargs) + def get_setting_value( + self, + vault_base_url: str, + setting_name: str, + **kwargs: Any + ) -> _models.Setting: + """Get specified account setting value. + + Retrieves the value of a specified, value account setting. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_setting_value') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_setting_value'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.get_setting_value(vault_base_url, setting_name, **kwargs) + + def get_settings( + self, + vault_base_url: str, + **kwargs: Any + ) -> _models.SettingsListResult: + """List account settings. + + Retrieves a list of all the available account settings that can be configured. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingsListResult or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.SettingsListResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_settings') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.get_settings(vault_base_url, **kwargs) + def restore_status( self, vault_base_url: str, @@ -217,7 +284,7 @@ def restore_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RestoreOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.RestoreOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.RestoreOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('restore_status') @@ -237,3 +304,45 @@ def restore_status( mixin_instance._serialize.client_side_validation = False mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return mixin_instance.restore_status(vault_base_url, job_id, **kwargs) + + def update_settings( + self, + vault_base_url: str, + setting_name: str, + parameters: Union[_models.UpdateSettingsRequest, IO], + **kwargs: Any + ) -> _models.Setting: + """Updates key vault account setting, stores it, then returns the setting name and value to the + client. + + Description of the pool setting to be updated. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :param parameters: The parameters to update an account setting. Is either a model type or a IO + type. Required. + :type parameters: ~azure.keyvault.v7_4_preview_1.models.UpdateSettingsRequest or IO + :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. + Default value is None. + :paramtype content_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('update_settings') + if api_version == '7.4-preview.1': + from .v7_4_preview_1.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'update_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return mixin_instance.update_settings(vault_base_url, setting_name, parameters, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py index 548f8432a870..2152c21dfcfd 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_key_vault_client.py @@ -43,7 +43,7 @@ class KeyVaultClient(KeyVaultClientOperationsMixin, MultiApiClientMixin, _SDKCli :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ - DEFAULT_API_VERSION = '7.3' + DEFAULT_API_VERSION = '7.4-preview.1' _PROFILE_TAG = "azure.keyvault.KeyVaultClient" LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py index 3199461d9c79..9fd40b0355a2 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/aio/_operations_mixin.py @@ -24,8 +24,7 @@ async def begin_full_backup( azure_storage_blob_container_uri: Optional[Union[_models.SASTokenParameter, IO]] = None, **kwargs: Any ) -> AsyncLROPoller[_models.FullBackupOperation]: - """Creates a full backup using a user-provided SAS token to an Azure blob storage container. This - operation is supported only by the Managed HSM service. + """Creates a full backup using a user-provided SAS token to an Azure blob storage container. :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. :type vault_base_url: str @@ -33,7 +32,8 @@ async def begin_full_backup( valid Azure blob container where full backup needs to be stored. This token needs to be valid for at least next 24 hours from the time of making this call. Is either a model type or a IO type. Default value is None. - :type azure_storage_blob_container_uri: ~azure.keyvault.v7_3.models.SASTokenParameter or IO + :type azure_storage_blob_container_uri: ~azure.keyvault.v7_4_preview_1.models.SASTokenParameter + or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -47,7 +47,8 @@ async def begin_full_backup( Retry-After header is present. :return: An instance of AsyncLROPoller that returns either FullBackupOperation or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.FullBackupOperation] + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.FullBackupOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_backup') @@ -81,7 +82,8 @@ async def begin_full_restore_operation( :type vault_base_url: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.RestoreOperationParameters or IO + :type restore_blob_details: ~azure.keyvault.v7_4_preview_1.models.RestoreOperationParameters or + IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -95,7 +97,8 @@ async def begin_full_restore_operation( Retry-After header is present. :return: An instance of AsyncLROPoller that returns either RestoreOperation or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.RestoreOperation] + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.RestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_full_restore_operation') @@ -132,8 +135,8 @@ async def begin_selective_key_restore_operation( :type key_name: str :param restore_blob_details: The Azure blob SAS token pointing to a folder where the previous successful full backup was stored. Is either a model type or a IO type. Default value is None. - :type restore_blob_details: ~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperationParameters - or IO + :type restore_blob_details: + ~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperationParameters or IO :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. Default value is None. :paramtype content_type: str @@ -148,7 +151,7 @@ async def begin_selective_key_restore_operation( :return: An instance of AsyncLROPoller that returns either SelectiveKeyRestoreOperation or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_3.models.SelectiveKeyRestoreOperation] + ~azure.core.polling.AsyncLROPoller[~azure.keyvault.v7_4_preview_1.models.SelectiveKeyRestoreOperation] :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('begin_selective_key_restore_operation') @@ -183,7 +186,7 @@ async def full_backup_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FullBackupOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.FullBackupOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.FullBackupOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('full_backup_status') @@ -204,6 +207,70 @@ async def full_backup_status( mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return await mixin_instance.full_backup_status(vault_base_url, job_id, **kwargs) + async def get_setting_value( + self, + vault_base_url: str, + setting_name: str, + **kwargs: Any + ) -> _models.Setting: + """Get specified account setting value. + + Retrieves the value of a specified, value account setting. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_setting_value') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_setting_value'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.get_setting_value(vault_base_url, setting_name, **kwargs) + + async def get_settings( + self, + vault_base_url: str, + **kwargs: Any + ) -> _models.SettingsListResult: + """List account settings. + + Retrieves a list of all the available account settings that can be configured. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: SettingsListResult or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.SettingsListResult + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('get_settings') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'get_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.get_settings(vault_base_url, **kwargs) + async def restore_status( self, vault_base_url: str, @@ -218,7 +285,7 @@ async def restore_status( :type job_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RestoreOperation or the result of cls(response) - :rtype: ~azure.keyvault.v7_3.models.RestoreOperation + :rtype: ~azure.keyvault.v7_4_preview_1.models.RestoreOperation :raises ~azure.core.exceptions.HttpResponseError: """ api_version = self._get_api_version('restore_status') @@ -238,3 +305,45 @@ async def restore_status( mixin_instance._serialize.client_side_validation = False mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) return await mixin_instance.restore_status(vault_base_url, job_id, **kwargs) + + async def update_settings( + self, + vault_base_url: str, + setting_name: str, + parameters: Union[_models.UpdateSettingsRequest, IO], + **kwargs: Any + ) -> _models.Setting: + """Updates key vault account setting, stores it, then returns the setting name and value to the + client. + + Description of the pool setting to be updated. + + :param vault_base_url: The vault name, for example https://myvault.vault.azure.net. Required. + :type vault_base_url: str + :param setting_name: The name of the account setting. Must be a valid settings option. + Required. + :type setting_name: str + :param parameters: The parameters to update an account setting. Is either a model type or a IO + type. Required. + :type parameters: ~azure.keyvault.v7_4_preview_1.models.UpdateSettingsRequest or IO + :keyword content_type: Body Parameter content-type. Known values are: 'application/json'. + Default value is None. + :paramtype content_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Setting or the result of cls(response) + :rtype: ~azure.keyvault.v7_4_preview_1.models.Setting + :raises ~azure.core.exceptions.HttpResponseError: + """ + api_version = self._get_api_version('update_settings') + if api_version == '7.4-preview.1': + from ..v7_4_preview_1.aio.operations import KeyVaultClientOperationsMixin as OperationClass + else: + raise ValueError("API version {} does not have operation 'update_settings'".format(api_version)) + mixin_instance = OperationClass() + mixin_instance._client = self._client + mixin_instance._config = self._config + mixin_instance._config.api_version = api_version + mixin_instance._serialize = Serializer(self._models_dict(api_version)) + mixin_instance._serialize.client_side_validation = False + mixin_instance._deserialize = Deserializer(self._models_dict(api_version)) + return await mixin_instance.update_settings(vault_base_url, setting_name, parameters, **kwargs) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py index 000bcdc107ad..f4ea33207336 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/models.py @@ -4,4 +4,4 @@ # Licensed under the MIT License. See License.txt in the project root for # license information. # -------------------------------------------------------------------------- -from .v7_3.models import * +from .v7_4_preview_1.models import * diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py index 9cf9f190557c..7587d147981b 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated/v7_4_preview_1/models/_models_py3.py @@ -903,23 +903,23 @@ class SettingsListResult(_serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. - :ivar value: A response message containing a list of account settings with their associated + :ivar settings: A response message containing a list of account settings with their associated value. - :vartype value: list[~azure.keyvault.v7_4_preview_1.models.Setting] + :vartype settings: list[~azure.keyvault.v7_4_preview_1.models.Setting] """ _validation = { - "value": {"readonly": True}, + "settings": {"readonly": True}, } _attribute_map = { - "value": {"key": "value", "type": "[Setting]"}, + "settings": {"key": "settings", "type": "[Setting]"}, } def __init__(self, **kwargs): """ """ super().__init__(**kwargs) - self.value = None + self.settings = None class UpdateSettingsRequest(_serialization.Model): diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py new file mode 100644 index 000000000000..03d9c11758d6 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_generated_models.py @@ -0,0 +1,1050 @@ +# coding=utf-8 +# pylint: disable=too-many-lines,redefined-builtin +# -------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from enum import Enum +import datetime +from typing import List, Optional, Union + +from azure.core import CaseInsensitiveEnumMeta + +from ._generated import _serialization + + +class Attributes(_serialization.Model): + """The object attributes managed by the KeyVault service. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar enabled: Determines whether the object is enabled. + :vartype enabled: bool + :ivar not_before: Not before date in UTC. + :vartype not_before: ~datetime.datetime + :ivar expires: Expiry date in UTC. + :vartype expires: ~datetime.datetime + :ivar created: Creation time in UTC. + :vartype created: ~datetime.datetime + :ivar updated: Last updated time in UTC. + :vartype updated: ~datetime.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: Optional[bool] = None, + not_before: Optional[datetime.datetime] = None, + expires: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword enabled: Determines whether the object is enabled. + :paramtype enabled: bool + :keyword not_before: Not before date in UTC. + :paramtype not_before: ~datetime.datetime + :keyword expires: Expiry date in UTC. + :paramtype expires: ~datetime.datetime + """ + super().__init__(**kwargs) + self.enabled = enabled + self.not_before = not_before + self.expires = expires + self.created = None + self.updated = None + + +class Error(_serialization.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 + :ivar inner_error: The key vault server error. + :vartype inner_error: ~azure.keyvault.administration._generated_models.Error + """ + + _validation = { + "code": {"readonly": True}, + "message": {"readonly": True}, + "inner_error": {"readonly": True}, + } + + _attribute_map = { + "code": {"key": "code", "type": "str"}, + "message": {"key": "message", "type": "str"}, + "inner_error": {"key": "innererror", "type": "Error"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.code = None + self.message = None + self.inner_error = None + + +class FullBackupOperation(_serialization.Model): + """Full backup operation. + + :ivar status: Status of the backup operation. + :vartype status: str + :ivar status_details: The status details of backup operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the full backup operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar start_time: The start time of the backup operation in UTC. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the backup operation in UTC. + :vartype end_time: ~datetime.datetime + :ivar job_id: Identifier for the full backup operation. + :vartype job_id: str + :ivar azure_storage_blob_container_uri: The Azure blob storage container Uri which contains the + full backup. + :vartype azure_storage_blob_container_uri: str + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + "job_id": {"key": "jobId", "type": "str"}, + "azure_storage_blob_container_uri": {"key": "azureStorageBlobContainerUri", "type": "str"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + job_id: Optional[str] = None, + azure_storage_blob_container_uri: Optional[str] = None, + **kwargs + ): + """ + :keyword status: Status of the backup operation. + :paramtype status: str + :keyword status_details: The status details of backup operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the full backup operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword start_time: The start time of the backup operation in UTC. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the backup operation in UTC. + :paramtype end_time: ~datetime.datetime + :keyword job_id: Identifier for the full backup operation. + :paramtype job_id: str + :keyword azure_storage_blob_container_uri: The Azure blob storage container Uri which contains + the full backup. + :paramtype azure_storage_blob_container_uri: str + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.start_time = start_time + self.end_time = end_time + self.job_id = job_id + self.azure_storage_blob_container_uri = azure_storage_blob_container_uri + + +class KeyVaultError(_serialization.Model): + """The key vault error exception. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar error: The key vault server error. + :vartype error: ~azure.keyvault.administration._generated_models.Error + """ + + _validation = { + "error": {"readonly": True}, + } + + _attribute_map = { + "error": {"key": "error", "type": "Error"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.error = None + + +class Permission(_serialization.Model): + """Role definition permissions. + + :ivar actions: Action permissions that are granted. + :vartype actions: list[str] + :ivar not_actions: Action permissions that are excluded but not denied. They may be granted by + other role definitions assigned to a principal. + :vartype not_actions: list[str] + :ivar data_actions: Data action permissions that are granted. + :vartype data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + :ivar not_data_actions: Data action permissions that are excluded but not denied. They may be + granted by other role definitions assigned to a principal. + :vartype not_data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + """ + + _attribute_map = { + "actions": {"key": "actions", "type": "[str]"}, + "not_actions": {"key": "notActions", "type": "[str]"}, + "data_actions": {"key": "dataActions", "type": "[str]"}, + "not_data_actions": {"key": "notDataActions", "type": "[str]"}, + } + + def __init__( + self, + *, + actions: Optional[List[str]] = None, + not_actions: Optional[List[str]] = None, + data_actions: Optional[List[Union[str, "DataAction"]]] = None, + not_data_actions: Optional[List[Union[str, "DataAction"]]] = None, + **kwargs + ): + """ + :keyword actions: Action permissions that are granted. + :paramtype actions: list[str] + :keyword not_actions: Action permissions that are excluded but not denied. They may be granted + by other role definitions assigned to a principal. + :paramtype not_actions: list[str] + :keyword data_actions: Data action permissions that are granted. + :paramtype data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + :keyword not_data_actions: Data action permissions that are excluded but not denied. They may + be granted by other role definitions assigned to a principal. + :paramtype not_data_actions: list[str or ~azure.keyvault.administration._generated_models.DataAction] + """ + super().__init__(**kwargs) + self.actions = actions + self.not_actions = not_actions + self.data_actions = data_actions + self.not_data_actions = not_data_actions + + +class RestoreOperation(_serialization.Model): + """Restore operation. + + :ivar status: Status of the restore operation. + :vartype status: str + :ivar status_details: The status details of restore operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the restore operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar job_id: Identifier for the restore operation. + :vartype job_id: str + :ivar start_time: The start time of the restore operation. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the restore operation. + :vartype end_time: ~datetime.datetime + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "job_id": {"key": "jobId", "type": "str"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + job_id: Optional[str] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword status: Status of the restore operation. + :paramtype status: str + :keyword status_details: The status details of restore operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the restore operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword job_id: Identifier for the restore operation. + :paramtype job_id: str + :keyword start_time: The start time of the restore operation. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the restore operation. + :paramtype end_time: ~datetime.datetime + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.job_id = job_id + self.start_time = start_time + self.end_time = end_time + + +class RestoreOperationParameters(_serialization.Model): + """RestoreOperationParameters. + + All required parameters must be populated in order to send to Azure. + + :ivar sas_token_parameters: Required. + :vartype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :ivar folder_to_restore: The Folder name of the blob where the previous successful full backup + was stored. Required. + :vartype folder_to_restore: str + """ + + _validation = { + "sas_token_parameters": {"required": True}, + "folder_to_restore": {"required": True}, + } + + _attribute_map = { + "sas_token_parameters": {"key": "sasTokenParameters", "type": "SASTokenParameter"}, + "folder_to_restore": {"key": "folderToRestore", "type": "str"}, + } + + def __init__(self, *, sas_token_parameters: "SASTokenParameter", folder_to_restore: str, **kwargs): + """ + :keyword sas_token_parameters: Required. + :paramtype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :keyword folder_to_restore: The Folder name of the blob where the previous successful full + backup was stored. Required. + :paramtype folder_to_restore: str + """ + super().__init__(**kwargs) + self.sas_token_parameters = sas_token_parameters + self.folder_to_restore = folder_to_restore + + +class RoleAssignment(_serialization.Model): + """Role Assignments. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The role assignment ID. + :vartype id: str + :ivar name: The role assignment name. + :vartype name: str + :ivar type: The role assignment type. + :vartype type: str + :ivar properties: Role assignment properties. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentPropertiesWithScope + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "properties": {"key": "properties", "type": "RoleAssignmentPropertiesWithScope"}, + } + + def __init__(self, *, properties: Optional["RoleAssignmentPropertiesWithScope"] = None, **kwargs): + """ + :keyword properties: Role assignment properties. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentPropertiesWithScope + """ + super().__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.properties = properties + + +class RoleAssignmentCreateParameters(_serialization.Model): + """Role assignment create parameters. + + All required parameters must be populated in order to send to Azure. + + :ivar properties: Role assignment properties. Required. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentProperties + """ + + _validation = { + "properties": {"required": True}, + } + + _attribute_map = { + "properties": {"key": "properties", "type": "RoleAssignmentProperties"}, + } + + def __init__(self, *, properties: "RoleAssignmentProperties", **kwargs): + """ + :keyword properties: Role assignment properties. Required. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleAssignmentProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class RoleAssignmentFilter(_serialization.Model): + """Role Assignments filter. + + :ivar principal_id: Returns role assignment of the specific principal. + :vartype principal_id: str + """ + + _attribute_map = { + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__(self, *, principal_id: Optional[str] = None, **kwargs): + """ + :keyword principal_id: Returns role assignment of the specific principal. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.principal_id = principal_id + + +class RoleAssignmentListResult(_serialization.Model): + """Role assignment list operation result. + + :ivar value: Role assignment list. + :vartype value: list[~azure.keyvault.administration._generated_models.RoleAssignment] + :ivar next_link: The URL to use for getting the next set of results. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[RoleAssignment]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: Optional[List["RoleAssignment"]] = None, next_link: Optional[str] = None, **kwargs + ): + """ + :keyword value: Role assignment list. + :paramtype value: list[~azure.keyvault.administration._generated_models.RoleAssignment] + :keyword next_link: The URL to use for getting the next set of results. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RoleAssignmentProperties(_serialization.Model): + """Role assignment properties. + + All required parameters must be populated in order to send to Azure. + + :ivar role_definition_id: The role definition ID used in the role assignment. Required. + :vartype role_definition_id: str + :ivar principal_id: The principal ID assigned to the role. This maps to the ID inside the + Active Directory. It can point to a user, service principal, or security group. Required. + :vartype principal_id: str + """ + + _validation = { + "role_definition_id": {"required": True}, + "principal_id": {"required": True}, + } + + _attribute_map = { + "role_definition_id": {"key": "roleDefinitionId", "type": "str"}, + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__(self, *, role_definition_id: str, principal_id: str, **kwargs): + """ + :keyword role_definition_id: The role definition ID used in the role assignment. Required. + :paramtype role_definition_id: str + :keyword principal_id: The principal ID assigned to the role. This maps to the ID inside the + Active Directory. It can point to a user, service principal, or security group. Required. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.role_definition_id = role_definition_id + self.principal_id = principal_id + + +class RoleAssignmentPropertiesWithScope(_serialization.Model): + """Role assignment properties with scope. + + :ivar scope: The role scope. Known values are: "/" and "/keys". + :vartype scope: str or ~azure.keyvault.administration._generated_models.RoleScope + :ivar role_definition_id: The role definition ID. + :vartype role_definition_id: str + :ivar principal_id: The principal ID. + :vartype principal_id: str + """ + + _attribute_map = { + "scope": {"key": "scope", "type": "str"}, + "role_definition_id": {"key": "roleDefinitionId", "type": "str"}, + "principal_id": {"key": "principalId", "type": "str"}, + } + + def __init__( + self, + *, + scope: Optional[Union[str, "RoleScope"]] = None, + role_definition_id: Optional[str] = None, + principal_id: Optional[str] = None, + **kwargs + ): + """ + :keyword scope: The role scope. Known values are: "/" and "/keys". + :paramtype scope: str or ~azure.keyvault.administration._generated_models.RoleScope + :keyword role_definition_id: The role definition ID. + :paramtype role_definition_id: str + :keyword principal_id: The principal ID. + :paramtype principal_id: str + """ + super().__init__(**kwargs) + self.scope = scope + self.role_definition_id = role_definition_id + self.principal_id = principal_id + + +class RoleDefinition(_serialization.Model): + """Role definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The role definition ID. + :vartype id: str + :ivar name: The role definition name. + :vartype name: str + :ivar type: The role definition type. "Microsoft.Authorization/roleDefinitions" + :vartype type: str or ~azure.keyvault.administration._generated_models.RoleDefinitionType + :ivar role_name: The role name. + :vartype role_name: str + :ivar description: The role definition description. + :vartype description: str + :ivar role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :vartype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :ivar permissions: Role definition permissions. + :vartype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :ivar assignable_scopes: Role definition assignable scopes. + :vartype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + + _validation = { + "id": {"readonly": True}, + "name": {"readonly": True}, + "type": {"readonly": True}, + } + + _attribute_map = { + "id": {"key": "id", "type": "str"}, + "name": {"key": "name", "type": "str"}, + "type": {"key": "type", "type": "str"}, + "role_name": {"key": "properties.roleName", "type": "str"}, + "description": {"key": "properties.description", "type": "str"}, + "role_type": {"key": "properties.type", "type": "str"}, + "permissions": {"key": "properties.permissions", "type": "[Permission]"}, + "assignable_scopes": {"key": "properties.assignableScopes", "type": "[str]"}, + } + + def __init__( + self, + *, + role_name: Optional[str] = None, + description: Optional[str] = None, + role_type: Optional[Union[str, "RoleType"]] = None, + permissions: Optional[List["Permission"]] = None, + assignable_scopes: Optional[List[Union[str, "RoleScope"]]] = None, + **kwargs + ): + """ + :keyword role_name: The role name. + :paramtype role_name: str + :keyword description: The role definition description. + :paramtype description: str + :keyword role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :paramtype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :keyword permissions: Role definition permissions. + :paramtype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :keyword assignable_scopes: Role definition assignable scopes. + :paramtype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + super().__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.role_name = role_name + self.description = description + self.role_type = role_type + self.permissions = permissions + self.assignable_scopes = assignable_scopes + + +class RoleDefinitionCreateParameters(_serialization.Model): + """Role definition create parameters. + + All required parameters must be populated in order to send to Azure. + + :ivar properties: Role definition properties. Required. + :vartype properties: ~azure.keyvault.administration._generated_models.RoleDefinitionProperties + """ + + _validation = { + "properties": {"required": True}, + } + + _attribute_map = { + "properties": {"key": "properties", "type": "RoleDefinitionProperties"}, + } + + def __init__(self, *, properties: "RoleDefinitionProperties", **kwargs): + """ + :keyword properties: Role definition properties. Required. + :paramtype properties: ~azure.keyvault.administration._generated_models.RoleDefinitionProperties + """ + super().__init__(**kwargs) + self.properties = properties + + +class RoleDefinitionFilter(_serialization.Model): + """Role Definitions filter. + + :ivar role_name: Returns role definition with the specific name. + :vartype role_name: str + """ + + _attribute_map = { + "role_name": {"key": "roleName", "type": "str"}, + } + + def __init__(self, *, role_name: Optional[str] = None, **kwargs): + """ + :keyword role_name: Returns role definition with the specific name. + :paramtype role_name: str + """ + super().__init__(**kwargs) + self.role_name = role_name + + +class RoleDefinitionListResult(_serialization.Model): + """Role definition list operation result. + + :ivar value: Role definition list. + :vartype value: list[~azure.keyvault.administration._generated_models.RoleDefinition] + :ivar next_link: The URL to use for getting the next set of results. + :vartype next_link: str + """ + + _attribute_map = { + "value": {"key": "value", "type": "[RoleDefinition]"}, + "next_link": {"key": "nextLink", "type": "str"}, + } + + def __init__( + self, *, value: Optional[List["RoleDefinition"]] = None, next_link: Optional[str] = None, **kwargs + ): + """ + :keyword value: Role definition list. + :paramtype value: list[~azure.keyvault.administration._generated_models.RoleDefinition] + :keyword next_link: The URL to use for getting the next set of results. + :paramtype next_link: str + """ + super().__init__(**kwargs) + self.value = value + self.next_link = next_link + + +class RoleDefinitionProperties(_serialization.Model): + """Role definition properties. + + :ivar role_name: The role name. + :vartype role_name: str + :ivar description: The role definition description. + :vartype description: str + :ivar role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :vartype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :ivar permissions: Role definition permissions. + :vartype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :ivar assignable_scopes: Role definition assignable scopes. + :vartype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + + _attribute_map = { + "role_name": {"key": "roleName", "type": "str"}, + "description": {"key": "description", "type": "str"}, + "role_type": {"key": "type", "type": "str"}, + "permissions": {"key": "permissions", "type": "[Permission]"}, + "assignable_scopes": {"key": "assignableScopes", "type": "[str]"}, + } + + def __init__( + self, + *, + role_name: Optional[str] = None, + description: Optional[str] = None, + role_type: Optional[Union[str, "RoleType"]] = None, + permissions: Optional[List["Permission"]] = None, + assignable_scopes: Optional[List[Union[str, "RoleScope"]]] = None, + **kwargs + ): + """ + :keyword role_name: The role name. + :paramtype role_name: str + :keyword description: The role definition description. + :paramtype description: str + :keyword role_type: The role type. Known values are: "AKVBuiltInRole" and "CustomRole". + :paramtype role_type: str or ~azure.keyvault.administration._generated_models.RoleType + :keyword permissions: Role definition permissions. + :paramtype permissions: list[~azure.keyvault.administration._generated_models.Permission] + :keyword assignable_scopes: Role definition assignable scopes. + :paramtype assignable_scopes: list[str or ~azure.keyvault.administration._generated_models.RoleScope] + """ + super().__init__(**kwargs) + self.role_name = role_name + self.description = description + self.role_type = role_type + self.permissions = permissions + self.assignable_scopes = assignable_scopes + + +class SASTokenParameter(_serialization.Model): + """SASTokenParameter. + + All required parameters must be populated in order to send to Azure. + + :ivar storage_resource_uri: Azure Blob storage container Uri. Required. + :vartype storage_resource_uri: str + :ivar token: The SAS token pointing to an Azure Blob storage container. Required. + :vartype token: str + """ + + _validation = { + "storage_resource_uri": {"required": True}, + "token": {"required": True}, + } + + _attribute_map = { + "storage_resource_uri": {"key": "storageResourceUri", "type": "str"}, + "token": {"key": "token", "type": "str"}, + } + + def __init__(self, *, storage_resource_uri: str, token: str, **kwargs): + """ + :keyword storage_resource_uri: Azure Blob storage container Uri. Required. + :paramtype storage_resource_uri: str + :keyword token: The SAS token pointing to an Azure Blob storage container. Required. + :paramtype token: str + """ + super().__init__(**kwargs) + self.storage_resource_uri = storage_resource_uri + self.token = token + + +class SelectiveKeyRestoreOperation(_serialization.Model): + """Selective Key Restore operation. + + :ivar status: Status of the restore operation. + :vartype status: str + :ivar status_details: The status details of restore operation. + :vartype status_details: str + :ivar error: Error encountered, if any, during the selective key restore operation. + :vartype error: ~azure.keyvault.administration._generated_models.Error + :ivar job_id: Identifier for the selective key restore operation. + :vartype job_id: str + :ivar start_time: The start time of the restore operation. + :vartype start_time: ~datetime.datetime + :ivar end_time: The end time of the restore operation. + :vartype end_time: ~datetime.datetime + """ + + _attribute_map = { + "status": {"key": "status", "type": "str"}, + "status_details": {"key": "statusDetails", "type": "str"}, + "error": {"key": "error", "type": "Error"}, + "job_id": {"key": "jobId", "type": "str"}, + "start_time": {"key": "startTime", "type": "unix-time"}, + "end_time": {"key": "endTime", "type": "unix-time"}, + } + + def __init__( + self, + *, + status: Optional[str] = None, + status_details: Optional[str] = None, + error: Optional["Error"] = None, + job_id: Optional[str] = None, + start_time: Optional[datetime.datetime] = None, + end_time: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword status: Status of the restore operation. + :paramtype status: str + :keyword status_details: The status details of restore operation. + :paramtype status_details: str + :keyword error: Error encountered, if any, during the selective key restore operation. + :paramtype error: ~azure.keyvault.administration._generated_models.Error + :keyword job_id: Identifier for the selective key restore operation. + :paramtype job_id: str + :keyword start_time: The start time of the restore operation. + :paramtype start_time: ~datetime.datetime + :keyword end_time: The end time of the restore operation. + :paramtype end_time: ~datetime.datetime + """ + super().__init__(**kwargs) + self.status = status + self.status_details = status_details + self.error = error + self.job_id = job_id + self.start_time = start_time + self.end_time = end_time + + +class SelectiveKeyRestoreOperationParameters(_serialization.Model): + """SelectiveKeyRestoreOperationParameters. + + All required parameters must be populated in order to send to Azure. + + :ivar sas_token_parameters: Required. + :vartype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :ivar folder: The Folder name of the blob where the previous successful full backup was stored. + Required. + :vartype folder: str + """ + + _validation = { + "sas_token_parameters": {"required": True}, + "folder": {"required": True}, + } + + _attribute_map = { + "sas_token_parameters": {"key": "sasTokenParameters", "type": "SASTokenParameter"}, + "folder": {"key": "folder", "type": "str"}, + } + + def __init__(self, *, sas_token_parameters: "SASTokenParameter", folder: str, **kwargs): + """ + :keyword sas_token_parameters: Required. + :paramtype sas_token_parameters: ~azure.keyvault.administration._generated_models.SASTokenParameter + :keyword folder: The Folder name of the blob where the previous successful full backup was + stored. Required. + :paramtype folder: str + """ + super().__init__(**kwargs) + self.sas_token_parameters = sas_token_parameters + self.folder = folder + + +class Setting(_serialization.Model): + """Setting. + + All required parameters must be populated in order to send to Azure. + + :ivar name: The account setting to be updated. Required. + :vartype name: str + :ivar value: The value of the pool setting. Required. + :vartype value: str + :ivar type: The type specifier of the value. "boolean" + :vartype type: str or ~azure.keyvault.administration._generated_models.SettingTypeEnum + """ + + _validation = { + "name": {"required": True}, + "value": {"required": True}, + } + + _attribute_map = { + "name": {"key": "name", "type": "str"}, + "value": {"key": "value", "type": "str"}, + "type": {"key": "type", "type": "str"}, + } + + def __init__( + self, *, name: str, value: str, type: Optional[Union[str, "SettingTypeEnum"]] = None, **kwargs + ): + """ + :keyword name: The account setting to be updated. Required. + :paramtype name: str + :keyword value: The value of the pool setting. Required. + :paramtype value: str + :keyword type: The type specifier of the value. "boolean" + :paramtype type: str or ~azure.keyvault.administration._generated_models.SettingTypeEnum + """ + super().__init__(**kwargs) + self.name = name + self.value = value + self.type = type + + +class SettingsListResult(_serialization.Model): + """The settings list result. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar settings: A response message containing a list of account settings with their associated + value. + :vartype settings: list[~azure.keyvault.administration._generated_models.models.Setting] + """ + + _validation = { + "settings": {"readonly": True}, + } + + _attribute_map = { + "settings": {"key": "settings", "type": "[Setting]"}, + } + + def __init__(self, **kwargs): + """ """ + super().__init__(**kwargs) + self.settings = None + + +class UpdateSettingsRequest(_serialization.Model): + """The update settings request object. + + All required parameters must be populated in order to send to Azure. + + :ivar value: The value of the pool setting. Required. + :vartype value: str + """ + + _validation = { + "value": {"required": True}, + } + + _attribute_map = { + "value": {"key": "value", "type": "str"}, + } + + def __init__(self, *, value: str, **kwargs): + """ + :keyword value: The value of the pool setting. Required. + :paramtype value: str + """ + super().__init__(**kwargs) + self.value = value + + +class DataAction(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Supported permissions for data actions.""" + + #: Read HSM key metadata. + READ_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/read/action" + #: Update an HSM key. + WRITE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/write/action" + #: Read deleted HSM key. + READ_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/read/action" + #: Recover deleted HSM key. + RECOVER_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/recover/action" + #: Backup HSM keys. + BACKUP_HSM_KEYS = "Microsoft.KeyVault/managedHsm/keys/backup/action" + #: Restore HSM keys. + RESTORE_HSM_KEYS = "Microsoft.KeyVault/managedHsm/keys/restore/action" + #: Delete role assignment. + DELETE_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/delete/action" + #: Get role assignment. + GET_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/read/action" + #: Create or update role assignment. + WRITE_ROLE_ASSIGNMENT = "Microsoft.KeyVault/managedHsm/roleAssignments/write/action" + #: Get role definition. + READ_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/read/action" + #: Create or update role definition. + WRITE_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/write/action" + #: Delete role definition. + DELETE_ROLE_DEFINITION = "Microsoft.KeyVault/managedHsm/roleDefinitions/delete/action" + #: Encrypt using an HSM key. + ENCRYPT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/encrypt/action" + #: Decrypt using an HSM key. + DECRYPT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/decrypt/action" + #: Wrap using an HSM key. + WRAP_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/wrap/action" + #: Unwrap using an HSM key. + UNWRAP_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/unwrap/action" + #: Sign using an HSM key. + SIGN_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/sign/action" + #: Verify using an HSM key. + VERIFY_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/verify/action" + #: Create an HSM key. + CREATE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/create" + #: Delete an HSM key. + DELETE_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/delete" + #: Export an HSM key. + EXPORT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/export/action" + #: Release an HSM key using Secure Key Release. + RELEASE_KEY = "Microsoft.KeyVault/managedHsm/keys/release/action" + #: Import an HSM key. + IMPORT_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/import/action" + #: Purge a deleted HSM key. + PURGE_DELETED_HSM_KEY = "Microsoft.KeyVault/managedHsm/keys/deletedKeys/delete" + #: Download an HSM security domain. + DOWNLOAD_HSM_SECURITY_DOMAIN = "Microsoft.KeyVault/managedHsm/securitydomain/download/action" + #: Check status of HSM security domain download. + DOWNLOAD_HSM_SECURITY_DOMAIN_STATUS = "Microsoft.KeyVault/managedHsm/securitydomain/download/read" + #: Upload an HSM security domain. + UPLOAD_HSM_SECURITY_DOMAIN = "Microsoft.KeyVault/managedHsm/securitydomain/upload/action" + #: Check the status of the HSM security domain exchange file. + READ_HSM_SECURITY_DOMAIN_STATUS = "Microsoft.KeyVault/managedHsm/securitydomain/upload/read" + #: Download an HSM security domain transfer key. + READ_HSM_SECURITY_DOMAIN_TRANSFER_KEY = "Microsoft.KeyVault/managedHsm/securitydomain/transferkey/read" + #: Start an HSM backup. + START_HSM_BACKUP = "Microsoft.KeyVault/managedHsm/backup/start/action" + #: Start an HSM restore. + START_HSM_RESTORE = "Microsoft.KeyVault/managedHsm/restore/start/action" + #: Read an HSM backup status. + READ_HSM_BACKUP_STATUS = "Microsoft.KeyVault/managedHsm/backup/status/action" + #: Read an HSM restore status. + READ_HSM_RESTORE_STATUS = "Microsoft.KeyVault/managedHsm/restore/status/action" + #: Generate random numbers. + RANDOM_NUMBERS_GENERATE = "Microsoft.KeyVault/managedHsm/rng/action" + + +class RoleDefinitionType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role definition type.""" + + MICROSOFT_AUTHORIZATION_ROLE_DEFINITIONS = "Microsoft.Authorization/roleDefinitions" + + +class RoleScope(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role scope.""" + + #: Global scope + GLOBAL = "/" + #: Keys scope + KEYS = "/keys" + + +class RoleType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The role type.""" + + #: Built in role. + BUILT_IN_ROLE = "AKVBuiltInRole" + #: Custom role. + CUSTOM_ROLE = "CustomRole" + + +class SettingTypeEnum(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type specifier of the value.""" + + BOOLEAN = "boolean" diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py index 84e913a8c0df..21aa8df00b22 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_internal/client_base.py @@ -23,11 +23,12 @@ class ApiVersion(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Key Vault API versions supported by this package""" #: this is the default version + V7_4_PREVIEW_1 = "7.4-preview.1" V7_3 = "7.3" V7_2 = "7.2" -DEFAULT_VERSION = ApiVersion.V7_3 +DEFAULT_VERSION = ApiVersion.V7_4_PREVIEW_1 class KeyVaultClientBase(object): diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py index 63ad7be766d1..045962510ef0 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_models.py @@ -2,10 +2,9 @@ # Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # ------------------------------------ -from typing import TYPE_CHECKING +from typing import Any -if TYPE_CHECKING: - from typing import Any +from ._enums import SettingType class KeyVaultPermission(object): @@ -155,3 +154,21 @@ def __init__(self, **kwargs): @classmethod def _from_generated(cls, response, deserialized_operation, response_headers): # pylint:disable=unused-argument return cls(folder_url=deserialized_operation.azure_storage_blob_container_uri) + + +class KeyVaultSetting(object): + """A Key Vault setting. + + :ivar str name: The name of the account setting. + :ivar str value: The value of the pool setting. + :ivar SettingType type: The type specifier of the value. + """ + + def __init__(self, **kwargs): + self.name = kwargs.get("name") + self.value = kwargs.get("value") + self.type = kwargs.get("type") + + @classmethod + def _from_generated(cls, setting): + return cls(name=setting.name, value=setting.value, type=SettingType(setting.type)) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py new file mode 100644 index 000000000000..9760ad05f445 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/_settings_client.py @@ -0,0 +1,80 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from azure.core.paging import ItemPaged +from azure.core.tracing.decorator import distributed_trace + +from ._generated_models import UpdateSettingsRequest +from ._internal import KeyVaultClientBase +from ._models import KeyVaultSetting + +class KeyVaultSettingsClient(KeyVaultClientBase): + """Provides methods to update, get, and list settings for an Azure Key Vault. + + :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". + You should validate that this URL references a valid Key Vault or Managed HSM resource. + See https://aka.ms/azsdk/blog/vault-uri for details. + :param credential: An object which can provide an access token for the vault, such as a credential from + :mod:`azure.identity` + :type credential: :class:`~azure.core.credentials.TokenCredential` + + :keyword api_version: Version of the service API to use. Defaults to the most recent. + :paramtype api_version: ~azure.keyvault.administration.ApiVersion + :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key + Vault or Managed HSM domain. Defaults to True. + """ + # pylint:disable=protected-access + + @distributed_trace + def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: + """Gets the setting with the specified name. + + :param str name: The name of the account setting. + + :returns: The account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) + return KeyVaultSetting._from_generated(result) + + @distributed_trace + def list_settings(self, **kwargs) -> ItemPaged[KeyVaultSetting]: + """Lists all account settings. + + :returns: A paged object containing the account's settings. + :rtype: ~azure.core.paging.ItemPaged[~azure.keyvault.administration.KeyVaultSetting] + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] + + # We don't actually get a paged response from the generated method, so we mock the typical iteration methods + def get_next(_=None): + return converted_result + + def extract_data(_): + return None, converted_result + + return ItemPaged(get_next, extract_data) + + @distributed_trace + def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Updates a given account setting with the provided value. + + :param str name: The name of the account setting to update. + :param str value: The value to set. + + :returns: The updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py index af5affe57e5a..d1f1bd6d374a 100644 --- a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/__init__.py @@ -4,5 +4,6 @@ # ------------------------------------ from ._access_control_client import KeyVaultAccessControlClient from ._backup_client import KeyVaultBackupClient +from ._settings_client import KeyVaultSettingsClient -__all__ = ["KeyVaultAccessControlClient", "KeyVaultBackupClient"] +__all__ = ["KeyVaultAccessControlClient", "KeyVaultBackupClient", "KeyVaultSettingsClient"] diff --git a/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py new file mode 100644 index 000000000000..dd1cd16e715e --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/azure/keyvault/administration/aio/_settings_client.py @@ -0,0 +1,80 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.tracing.decorator_async import distributed_trace_async + +from .._generated_models import UpdateSettingsRequest +from .._internal import AsyncKeyVaultClientBase +from .._models import KeyVaultSetting + +class KeyVaultSettingsClient(AsyncKeyVaultClientBase): + """Provides methods to update, get, and list settings for an Azure Key Vault. + + :param str vault_url: URL of the vault on which the client will operate. This is also called the vault's "DNS Name". + You should validate that this URL references a valid Key Vault or Managed HSM resource. + See https://aka.ms/azsdk/blog/vault-uri for details. + :param credential: An object which can provide an access token for the vault, such as a credential from + :mod:`azure.identity.aio` + :type credential: :class:`~azure.core.credentials_async.AsyncTokenCredential` + + :keyword api_version: Version of the service API to use. Defaults to the most recent. + :paramtype api_version: ~azure.keyvault.administration.ApiVersion + :keyword bool verify_challenge_resource: Whether to verify the authentication challenge resource matches the Key + Vault or Managed HSM domain. Defaults to True. + """ + # pylint:disable=protected-access + + @distributed_trace_async + async def get_setting(self, name: str, **kwargs) -> KeyVaultSetting: + """Gets the setting with the specified name. + + :param str name: The name of the account setting. + + :returns: The account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = await self._client.get_setting_value(vault_base_url=self._vault_url, setting_name=name, **kwargs) + return KeyVaultSetting._from_generated(result) + + @distributed_trace_async + async def list_settings(self, **kwargs) -> AsyncItemPaged[KeyVaultSetting]: + """Lists all account settings. + + :returns: A :class:`~azure.keyvault.administration.GetSettingsResult` object containing the account's settings. + :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.keyvault.administration.KeyVaultSetting] + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + result = await self._client.get_settings(vault_base_url=self._vault_url, *kwargs) + converted_result = [KeyVaultSetting._from_generated(setting) for setting in result.settings] + + # We don't actually get a paged response from the generated method, so we mock the typical iteration methods + async def get_next(_=None): + return converted_result + + async def extract_data(_): + return None, AsyncList(converted_result) + + return AsyncItemPaged(get_next, extract_data) + + @distributed_trace_async + async def update_setting(self, name: str, value: str, **kwargs) -> KeyVaultSetting: + """Updates a given account setting with the provided value. + + :param str name: The name of the account setting to update. + :param str value: The value to set. + + :returns: The updated account setting, as a :class:`~azure.keyvault.administration.KeyVaultSetting`. + :rtype: ~azure.keyvault.administration.KeyVaultSetting + :raises: :class:`~azure.core.exceptions.HttpResponseError` + """ + parameters = UpdateSettingsRequest(value=value) + result = await self._client.update_settings( + vault_base_url=self._vault_url, + setting_name=name, + parameters=parameters, + **kwargs + ) + return KeyVaultSetting._from_generated(result) diff --git a/sdk/keyvault/azure-keyvault-administration/setup.py b/sdk/keyvault/azure-keyvault-administration/setup.py index ee818e4092a5..76cbc699a5de 100644 --- a/sdk/keyvault/azure-keyvault-administration/setup.py +++ b/sdk/keyvault/azure-keyvault-administration/setup.py @@ -44,15 +44,15 @@ author_email="azurekeyvault@microsoft.com", url="https://github.com/Azure/azure-sdk-for-python/tree/main/sdk/keyvault/azure-keyvault-administration", classifiers=[ - "Development Status :: 5 - Production/Stable", + "Development Status :: 4 - Beta", "Programming Language :: Python", "Programming Language :: Python :: 3 :: Only", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", "License :: OSI Approved :: MIT License", ], zip_safe=False, @@ -65,7 +65,7 @@ "azure.keyvault", ] ), - python_requires=">=3.6", + python_requires=">=3.7", install_requires=[ "azure-common~=1.1", "azure-core<2.0.0,>=1.24.0", diff --git a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py index d009b1518c03..2ae54bb8a057 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/_async_test_case.py @@ -45,7 +45,6 @@ def _set_mgmt_settings_real_values(self): os.environ["AZURE_CLIENT_SECRET"] = os.environ["KEYVAULT_CLIENT_SECRET"] - class KeyVaultBackupClientPreparer(BaseClientPreparer): def __call__(self, fn): async def _preparer(test_class, api_version, **kwargs): @@ -88,6 +87,25 @@ def create_access_control_client(self, **kwargs): ) +class KeyVaultSettingsClientPreparer(BaseClientPreparer): + def __call__(self, fn): + async def _preparer(test_class, api_version, **kwargs): + self._skip_if_not_configured(api_version) + client = self.create_access_control_client(api_version=api_version, **kwargs) + + async with client: + await fn(test_class, client, **kwargs) + return _preparer + + def create_access_control_client(self, **kwargs): + from azure.keyvault.administration.aio import \ + KeyVaultSettingsClient + + credential = self.get_credential(KeyVaultSettingsClient, is_async=True) + return self.create_client_from_credential( + KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + ) + def get_decorator(**kwargs): """returns a test decorator for test parameterization""" diff --git a/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py b/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py index daa95e3de0fb..2d9a03df29ef 100644 --- a/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py +++ b/sdk/keyvault/azure-keyvault-administration/tests/_test_case.py @@ -5,6 +5,7 @@ import os import pytest + from azure.keyvault.administration import ApiVersion from azure.keyvault.administration._internal.client_base import DEFAULT_VERSION from devtools_testutils import AzureRecordedTestCase @@ -45,7 +46,6 @@ def _set_mgmt_settings_real_values(self): os.environ["AZURE_CLIENT_SECRET"] = os.environ["KEYVAULT_CLIENT_SECRET"] - class KeyVaultBackupClientPreparer(BaseClientPreparer): def __init__(self, **kwargs) -> None: super().__init__(**kwargs) @@ -93,6 +93,27 @@ def create_access_control_client(self, **kwargs): ) +class KeyVaultSettingsClientPreparer(BaseClientPreparer): + def __init__(self, **kwargs) -> None: + super().__init__(**kwargs) + + def __call__(self, fn): + def _preparer(test_class, api_version, **kwargs): + self._skip_if_not_configured(api_version) + client = self.create_settings_client(api_version=api_version, **kwargs) + + with client: + fn(test_class, client, **kwargs) + return _preparer + + def create_settings_client(self, **kwargs): + from azure.keyvault.administration import KeyVaultSettingsClient + + credential = self.get_credential(KeyVaultSettingsClient) + return self.create_client_from_credential( + KeyVaultSettingsClient, credential=credential, vault_url=self.managed_hsm_url, **kwargs + ) + def get_decorator(**kwargs): """returns a test decorator for test parameterization""" diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py new file mode 100644 index 000000000000..fe531a2f048e --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client.py @@ -0,0 +1,35 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import pytest +from azure.keyvault.administration import ApiVersion +from devtools_testutils import recorded_by_proxy + +from _shared.test_case import KeyVaultTestCase +from _test_case import KeyVaultSettingsClientPreparer, get_decorator + +only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) + + +class TestSettings(KeyVaultTestCase): + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy + def test_list_settings(self, client, **kwargs): + default_settings = [setting for setting in client.list_settings()] + assert len(default_settings) + for setting in default_settings: + assert setting.name and setting.type and setting.value + + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy + def test_update_settings(self, client, **kwargs): + setting = client.get_setting("AllowKeyManagementOperationsThroughARM") + assert setting.name and setting.type and setting.value + + opposite_value = "false" if setting.value.lower() == "true" else "true" + updated = client.update_setting("AllowKeyManagementOperationsThroughARM", opposite_value) + assert updated.name == setting.name + assert updated.value != setting.value diff --git a/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py new file mode 100644 index 000000000000..a2959b5afab5 --- /dev/null +++ b/sdk/keyvault/azure-keyvault-administration/tests/test_settings_client_async.py @@ -0,0 +1,37 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +import pytest +from azure.keyvault.administration import ApiVersion +from devtools_testutils.aio import recorded_by_proxy_async + +from _async_test_case import KeyVaultSettingsClientPreparer, get_decorator +from _shared.test_case_async import KeyVaultTestCase + +only_7_4 = get_decorator(api_versions=[ApiVersion.V7_4_PREVIEW_1]) + + +class TestSettings(KeyVaultTestCase): + @pytest.mark.asyncio + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy_async + async def test_list_settings(self, client, **kwargs): + default_settings = [setting async for setting in await client.list_settings()] + assert len(default_settings) + for setting in default_settings: + assert setting.name and setting.type and setting.value + + @pytest.mark.asyncio + @pytest.mark.parametrize("api_version", only_7_4) + @KeyVaultSettingsClientPreparer() + @recorded_by_proxy_async + async def test_update_settings(self, client, **kwargs): + setting = await client.get_setting("AllowKeyManagementOperationsThroughARM") + assert setting.name and setting.type and setting.value + + opposite_value = "false" if setting.value.lower() == "true" else "true" + updated = await client.update_setting("AllowKeyManagementOperationsThroughARM", opposite_value) + assert updated.name == setting.name + assert updated.value != setting.value