From a1f5c1df4851827ffc2f5d0edb08f2636253adb7 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 2 Aug 2022 15:58:39 -0700 Subject: [PATCH 001/109] local copy of new api --- src/aks-preview/HISTORY.rst | 5 + .../_container_service_client.py | 73 +- .../azure_mgmt_preview_aks/_version.py | 2 +- .../azure_mgmt_preview_aks/models.py | 4 +- .../azure_mgmt_preview_aks/py.typed | 1 + .../__init__.py | 0 .../v2019_04_30/_configuration.py | 73 ++ .../v2019_04_30/_container_service_client.py | 101 ++ .../v2019_04_30/_patch.py | 31 + .../_vendor.py | 0 .../aio/__init__.py | 0 .../v2019_04_30/aio/_configuration.py | 72 ++ .../aio/_container_service_client.py | 98 ++ .../v2019_04_30/aio/_patch.py | 31 + .../v2019_04_30/aio/operations/__init__.py | 18 + ..._open_shift_managed_clusters_operations.py | 693 +++++++++++++ .../aio/operations}/_patch.py | 0 .../v2019_04_30/models/__init__.py | 53 + .../models/_container_service_client_enums.py | 63 ++ .../v2019_04_30/models/_models_py3.py | 760 ++++++++++++++ .../aio => v2019_04_30/models}/_patch.py | 0 .../v2019_04_30/operations/__init__.py | 18 + ..._open_shift_managed_clusters_operations.py | 927 ++++++++++++++++++ .../aio => v2019_04_30}/operations/_patch.py | 0 .../v2022_07_02_preview/__init__.py | 20 + .../_configuration.py | 4 +- .../_container_service_client.py | 28 +- .../models => v2022_07_02_preview}/_patch.py | 0 .../v2022_07_02_preview/_vendor.py | 27 + .../v2022_07_02_preview/aio/__init__.py | 20 + .../aio/_configuration.py | 4 +- .../aio/_container_service_client.py | 28 +- .../aio}/_patch.py | 0 .../aio/operations/__init__.py | 0 .../aio/operations/_agent_pools_operations.py | 36 +- .../operations/_fleet_members_operations.py | 22 +- .../aio/operations/_fleets_operations.py | 36 +- .../_maintenance_configurations_operations.py | 18 +- .../_managed_cluster_snapshots_operations.py | 28 +- .../_managed_clusters_operations.py | 104 +- .../aio/operations/_operations.py | 6 +- .../aio/operations/_patch.py | 19 + ...private_endpoint_connections_operations.py | 20 +- .../_private_link_resources_operations.py | 6 +- ...olve_private_link_service_id_operations.py | 8 +- .../aio/operations/_snapshots_operations.py | 28 +- ...trusted_access_role_bindings_operations.py | 18 +- .../_trusted_access_roles_operations.py | 6 +- .../models/__init__.py | 10 + .../models/_container_service_client_enums.py | 28 + .../models/_models_py3.py | 882 ++++++++++------- .../v2022_07_02_preview/models/_patch.py | 19 + .../operations/__init__.py | 0 .../operations/_agent_pools_operations.py | 50 +- .../operations/_fleet_members_operations.py | 30 +- .../operations/_fleets_operations.py | 50 +- .../_maintenance_configurations_operations.py | 26 +- .../_managed_cluster_snapshots_operations.py | 40 +- .../_managed_clusters_operations.py | 146 +-- .../operations/_operations.py | 8 +- .../v2022_07_02_preview/operations/_patch.py | 19 + ...private_endpoint_connections_operations.py | 28 +- .../_private_link_resources_operations.py | 8 +- ...olve_private_link_service_id_operations.py | 10 +- .../operations/_snapshots_operations.py | 40 +- ...trusted_access_role_bindings_operations.py | 26 +- .../_trusted_access_roles_operations.py | 8 +- src/aks-preview/setup.py | 2 +- 68 files changed, 4138 insertions(+), 801 deletions(-) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/py.typed rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2019_04_30}/__init__.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2019_04_30}/_vendor.py (100%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2019_04_30}/aio/__init__.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2019_04_30/aio/operations}/_patch.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview/aio => v2019_04_30/models}/_patch.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview/aio => v2019_04_30}/operations/_patch.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/__init__.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/_configuration.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/_container_service_client.py (89%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview/models => v2022_07_02_preview}/_patch.py (100%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_vendor.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/__init__.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/_configuration.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/_container_service_client.py (89%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview/operations => v2022_07_02_preview/aio}/_patch.py (100%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/__init__.py (100%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_agent_pools_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_fleet_members_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_fleets_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_maintenance_configurations_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_managed_cluster_snapshots_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_managed_clusters_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_operations.py (96%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_patch.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_private_endpoint_connections_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_private_link_resources_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_resolve_private_link_service_id_operations.py (95%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_snapshots_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_trusted_access_role_bindings_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/aio/operations/_trusted_access_roles_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/models/__init__.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/models/_container_service_client_enums.py (95%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/models/_models_py3.py (92%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_patch.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/__init__.py (100%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_agent_pools_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_fleet_members_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_fleets_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_maintenance_configurations_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_managed_cluster_snapshots_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_managed_clusters_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_operations.py (96%) create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_patch.py rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_private_endpoint_connections_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_private_link_resources_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_resolve_private_link_service_id_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_snapshots_operations.py (96%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_trusted_access_role_bindings_operations.py (97%) rename src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/{v2022_06_02_preview => v2022_07_02_preview}/operations/_trusted_access_roles_operations.py (96%) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index 696f43fde91..afb37789afb 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -12,6 +12,11 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ +0.5.93 +++++++ + +* Add support for AzureMonitorMetrics Addon (managed prometheus metrics in public preview) for AKS + 0.5.92 ++++++ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_container_service_client.py index 9d9028e0f7d..23091f00238 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_container_service_client.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_container_service_client.py @@ -56,7 +56,7 @@ class ContainerServiceClient(MultiApiClientMixin, _SDKClient): :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. """ - DEFAULT_API_VERSION = '2022-04-01' + DEFAULT_API_VERSION = '2022-06-01' _PROFILE_TAG = "azure.mgmt.containerservice.ContainerServiceClient" LATEST_PROFILE = ProfileDefinition({ _PROFILE_TAG: { @@ -130,7 +130,9 @@ def models(cls, api_version=DEFAULT_API_VERSION): * 2022-04-01: :mod:`v2022_04_01.models` * 2022-04-02-preview: :mod:`v2022_04_02_preview.models` * 2022-05-02-preview: :mod:`v2022_05_02_preview.models` + * 2022-06-01: :mod:`v2022_06_01.models` * 2022-06-02-preview: :mod:`v2022_06_02_preview.models` + * 2022-07-02-preview: :mod:`v2022_07_02_preview.models` """ if api_version == '2017-07-01': from .v2017_07_01 import models @@ -249,9 +251,15 @@ def models(cls, api_version=DEFAULT_API_VERSION): elif api_version == '2022-05-02-preview': from .v2022_05_02_preview import models return models + elif api_version == '2022-06-01': + from .v2022_06_01 import models + return models elif api_version == '2022-06-02-preview': from .v2022_06_02_preview import models return models + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview import models + return models raise ValueError("API version {} is not available".format(api_version)) @property @@ -290,7 +298,9 @@ def agent_pools(self): * 2022-04-01: :class:`AgentPoolsOperations` * 2022-04-02-preview: :class:`AgentPoolsOperations` * 2022-05-02-preview: :class:`AgentPoolsOperations` + * 2022-06-01: :class:`AgentPoolsOperations` * 2022-06-02-preview: :class:`AgentPoolsOperations` + * 2022-07-02-preview: :class:`AgentPoolsOperations` """ api_version = self._get_api_version('agent_pools') if api_version == '2019-02-01': @@ -357,8 +367,12 @@ def agent_pools(self): from .v2022_04_02_preview.operations import AgentPoolsOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import AgentPoolsOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import AgentPoolsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import AgentPoolsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import AgentPoolsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'agent_pools'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -381,10 +395,13 @@ def fleet_members(self): """Instance depends on the API version: * 2022-06-02-preview: :class:`FleetMembersOperations` + * 2022-07-02-preview: :class:`FleetMembersOperations` """ api_version = self._get_api_version('fleet_members') if api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import FleetMembersOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import FleetMembersOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'fleet_members'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -394,10 +411,13 @@ def fleets(self): """Instance depends on the API version: * 2022-06-02-preview: :class:`FleetsOperations` + * 2022-07-02-preview: :class:`FleetsOperations` """ api_version = self._get_api_version('fleets') if api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import FleetsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import FleetsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'fleets'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -424,7 +444,9 @@ def maintenance_configurations(self): * 2022-04-01: :class:`MaintenanceConfigurationsOperations` * 2022-04-02-preview: :class:`MaintenanceConfigurationsOperations` * 2022-05-02-preview: :class:`MaintenanceConfigurationsOperations` + * 2022-06-01: :class:`MaintenanceConfigurationsOperations` * 2022-06-02-preview: :class:`MaintenanceConfigurationsOperations` + * 2022-07-02-preview: :class:`MaintenanceConfigurationsOperations` """ api_version = self._get_api_version('maintenance_configurations') if api_version == '2020-12-01': @@ -463,8 +485,12 @@ def maintenance_configurations(self): from .v2022_04_02_preview.operations import MaintenanceConfigurationsOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import MaintenanceConfigurationsOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import MaintenanceConfigurationsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import MaintenanceConfigurationsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import MaintenanceConfigurationsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'maintenance_configurations'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -478,6 +504,7 @@ def managed_cluster_snapshots(self): * 2022-04-02-preview: :class:`ManagedClusterSnapshotsOperations` * 2022-05-02-preview: :class:`ManagedClusterSnapshotsOperations` * 2022-06-02-preview: :class:`ManagedClusterSnapshotsOperations` + * 2022-07-02-preview: :class:`ManagedClusterSnapshotsOperations` """ api_version = self._get_api_version('managed_cluster_snapshots') if api_version == '2022-02-02-preview': @@ -490,6 +517,8 @@ def managed_cluster_snapshots(self): from .v2022_05_02_preview.operations import ManagedClusterSnapshotsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import ManagedClusterSnapshotsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import ManagedClusterSnapshotsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'managed_cluster_snapshots'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -532,7 +561,9 @@ def managed_clusters(self): * 2022-04-01: :class:`ManagedClustersOperations` * 2022-04-02-preview: :class:`ManagedClustersOperations` * 2022-05-02-preview: :class:`ManagedClustersOperations` + * 2022-06-01: :class:`ManagedClustersOperations` * 2022-06-02-preview: :class:`ManagedClustersOperations` + * 2022-07-02-preview: :class:`ManagedClustersOperations` """ api_version = self._get_api_version('managed_clusters') if api_version == '2018-03-31': @@ -603,8 +634,12 @@ def managed_clusters(self): from .v2022_04_02_preview.operations import ManagedClustersOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import ManagedClustersOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import ManagedClustersOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import ManagedClustersOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import ManagedClustersOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'managed_clusters'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -669,7 +704,9 @@ def operations(self): * 2022-04-01: :class:`Operations` * 2022-04-02-preview: :class:`Operations` * 2022-05-02-preview: :class:`Operations` + * 2022-06-01: :class:`Operations` * 2022-06-02-preview: :class:`Operations` + * 2022-07-02-preview: :class:`Operations` """ api_version = self._get_api_version('operations') if api_version == '2018-03-31': @@ -740,8 +777,12 @@ def operations(self): from .v2022_04_02_preview.operations import Operations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import Operations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import Operations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import Operations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import Operations as OperationClass else: raise ValueError("API version {} does not have operation group 'operations'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -772,7 +813,9 @@ def private_endpoint_connections(self): * 2022-04-01: :class:`PrivateEndpointConnectionsOperations` * 2022-04-02-preview: :class:`PrivateEndpointConnectionsOperations` * 2022-05-02-preview: :class:`PrivateEndpointConnectionsOperations` + * 2022-06-01: :class:`PrivateEndpointConnectionsOperations` * 2022-06-02-preview: :class:`PrivateEndpointConnectionsOperations` + * 2022-07-02-preview: :class:`PrivateEndpointConnectionsOperations` """ api_version = self._get_api_version('private_endpoint_connections') if api_version == '2020-06-01': @@ -819,8 +862,12 @@ def private_endpoint_connections(self): from .v2022_04_02_preview.operations import PrivateEndpointConnectionsOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import PrivateEndpointConnectionsOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import PrivateEndpointConnectionsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import PrivateEndpointConnectionsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import PrivateEndpointConnectionsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'private_endpoint_connections'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -849,7 +896,9 @@ def private_link_resources(self): * 2022-04-01: :class:`PrivateLinkResourcesOperations` * 2022-04-02-preview: :class:`PrivateLinkResourcesOperations` * 2022-05-02-preview: :class:`PrivateLinkResourcesOperations` + * 2022-06-01: :class:`PrivateLinkResourcesOperations` * 2022-06-02-preview: :class:`PrivateLinkResourcesOperations` + * 2022-07-02-preview: :class:`PrivateLinkResourcesOperations` """ api_version = self._get_api_version('private_link_resources') if api_version == '2020-09-01': @@ -892,8 +941,12 @@ def private_link_resources(self): from .v2022_04_02_preview.operations import PrivateLinkResourcesOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import PrivateLinkResourcesOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import PrivateLinkResourcesOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import PrivateLinkResourcesOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import PrivateLinkResourcesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'private_link_resources'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -922,7 +975,9 @@ def resolve_private_link_service_id(self): * 2022-04-01: :class:`ResolvePrivateLinkServiceIdOperations` * 2022-04-02-preview: :class:`ResolvePrivateLinkServiceIdOperations` * 2022-05-02-preview: :class:`ResolvePrivateLinkServiceIdOperations` + * 2022-06-01: :class:`ResolvePrivateLinkServiceIdOperations` * 2022-06-02-preview: :class:`ResolvePrivateLinkServiceIdOperations` + * 2022-07-02-preview: :class:`ResolvePrivateLinkServiceIdOperations` """ api_version = self._get_api_version('resolve_private_link_service_id') if api_version == '2020-09-01': @@ -965,8 +1020,12 @@ def resolve_private_link_service_id(self): from .v2022_04_02_preview.operations import ResolvePrivateLinkServiceIdOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import ResolvePrivateLinkServiceIdOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import ResolvePrivateLinkServiceIdOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import ResolvePrivateLinkServiceIdOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import ResolvePrivateLinkServiceIdOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'resolve_private_link_service_id'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -988,7 +1047,9 @@ def snapshots(self): * 2022-04-01: :class:`SnapshotsOperations` * 2022-04-02-preview: :class:`SnapshotsOperations` * 2022-05-02-preview: :class:`SnapshotsOperations` + * 2022-06-01: :class:`SnapshotsOperations` * 2022-06-02-preview: :class:`SnapshotsOperations` + * 2022-07-02-preview: :class:`SnapshotsOperations` """ api_version = self._get_api_version('snapshots') if api_version == '2021-08-01': @@ -1017,8 +1078,12 @@ def snapshots(self): from .v2022_04_02_preview.operations import SnapshotsOperations as OperationClass elif api_version == '2022-05-02-preview': from .v2022_05_02_preview.operations import SnapshotsOperations as OperationClass + elif api_version == '2022-06-01': + from .v2022_06_01.operations import SnapshotsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import SnapshotsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import SnapshotsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'snapshots'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -1030,6 +1095,7 @@ def trusted_access_role_bindings(self): * 2022-04-02-preview: :class:`TrustedAccessRoleBindingsOperations` * 2022-05-02-preview: :class:`TrustedAccessRoleBindingsOperations` * 2022-06-02-preview: :class:`TrustedAccessRoleBindingsOperations` + * 2022-07-02-preview: :class:`TrustedAccessRoleBindingsOperations` """ api_version = self._get_api_version('trusted_access_role_bindings') if api_version == '2022-04-02-preview': @@ -1038,6 +1104,8 @@ def trusted_access_role_bindings(self): from .v2022_05_02_preview.operations import TrustedAccessRoleBindingsOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import TrustedAccessRoleBindingsOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import TrustedAccessRoleBindingsOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'trusted_access_role_bindings'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) @@ -1049,6 +1117,7 @@ def trusted_access_roles(self): * 2022-04-02-preview: :class:`TrustedAccessRolesOperations` * 2022-05-02-preview: :class:`TrustedAccessRolesOperations` * 2022-06-02-preview: :class:`TrustedAccessRolesOperations` + * 2022-07-02-preview: :class:`TrustedAccessRolesOperations` """ api_version = self._get_api_version('trusted_access_roles') if api_version == '2022-04-02-preview': @@ -1057,6 +1126,8 @@ def trusted_access_roles(self): from .v2022_05_02_preview.operations import TrustedAccessRolesOperations as OperationClass elif api_version == '2022-06-02-preview': from .v2022_06_02_preview.operations import TrustedAccessRolesOperations as OperationClass + elif api_version == '2022-07-02-preview': + from .v2022_07_02_preview.operations import TrustedAccessRolesOperations as OperationClass else: raise ValueError("API version {} does not have operation group 'trusted_access_roles'".format(api_version)) return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version))) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py index 4234ff290eb..c112ba26780 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py @@ -9,4 +9,4 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "20.0.0b" +VERSION = "20.2.0b" diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py index e0bf145b0b8..61abf39b2f7 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py @@ -5,4 +5,6 @@ # license information. # -------------------------------------------------------------------------- from .v2017_07_01.models import * -from .v2022_06_02_preview.models import * +from .v2022_07_02_preview.models import * +from .v2019_04_30.models import * +# from .v2022_06_01.models import * diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/py.typed b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/py.typed new file mode 100644 index 00000000000..e5aff4f83af --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/py.typed @@ -0,0 +1 @@ +# Marker file for PEP 561. \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py new file mode 100644 index 00000000000..2301b306f79 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py @@ -0,0 +1,73 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials import TokenCredential + +VERSION = "unknown" + +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes + """Configuration for ContainerServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. + :type subscription_id: str + :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str + """ + + def __init__( + self, + credential: "TokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) + api_version = kwargs.pop('api_version', "2019-04-30") # type: str + + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = api_version + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py new file mode 100644 index 00000000000..ec8f09f2259 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py @@ -0,0 +1,101 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 copy import deepcopy +from typing import Any, TYPE_CHECKING + +from msrest import Deserializer, Serializer + +from azure.core.rest import HttpRequest, HttpResponse +from azure.mgmt.core import ARMPipelineClient + +from . import models +from ._configuration import ContainerServiceClientConfiguration +from .operations import OpenShiftManagedClustersOperations + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials import TokenCredential + +class ContainerServiceClient: + """The Container Service Client. + + :ivar open_shift_managed_clusters: OpenShiftManagedClustersOperations operations + :vartype open_shift_managed_clusters: + azure.mgmt.containerservice.v2019_04_30.operations.OpenShiftManagedClustersOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. + :type subscription_id: str + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + """ + + def __init__( + self, + credential: "TokenCredential", + subscription_id: str, + base_url: str = "https://management.azure.com", + **kwargs: Any + ) -> None: + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) + self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + 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) + self._serialize.client_side_validation = False + self.open_shift_managed_clusters = OpenShiftManagedClustersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + + + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> ContainerServiceClient + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py new file mode 100644 index 00000000000..74e48ecd07c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +# This file is used for handwritten extensions to the generated code. Example: +# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md +def patch_sdk(): + pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py new file mode 100644 index 00000000000..dd0be08c423 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py @@ -0,0 +1,72 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +VERSION = "unknown" + +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes + """Configuration for ContainerServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. + :type subscription_id: str + :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) + api_version = kwargs.pop('api_version', "2019-04-30") # type: str + + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = api_version + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py new file mode 100644 index 00000000000..518b6b89f5c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py @@ -0,0 +1,98 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 copy import deepcopy +from typing import Any, Awaitable, TYPE_CHECKING + +from msrest import Deserializer, Serializer + +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.mgmt.core import AsyncARMPipelineClient + +from .. import models +from ._configuration import ContainerServiceClientConfiguration +from .operations import OpenShiftManagedClustersOperations + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +class ContainerServiceClient: + """The Container Service Client. + + :ivar open_shift_managed_clusters: OpenShiftManagedClustersOperations operations + :vartype open_shift_managed_clusters: + azure.mgmt.containerservice.v2019_04_30.aio.operations.OpenShiftManagedClustersOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. + :type subscription_id: str + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + base_url: str = "https://management.azure.com", + **kwargs: Any + ) -> None: + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) + self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + 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) + self._serialize.client_side_validation = False + self.open_shift_managed_clusters = OpenShiftManagedClustersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + + + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "ContainerServiceClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py new file mode 100644 index 00000000000..74e48ecd07c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +# This file is used for handwritten extensions to the generated code. Example: +# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md +def patch_sdk(): + pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py new file mode 100644 index 00000000000..211a8787980 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py @@ -0,0 +1,18 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._open_shift_managed_clusters_operations import OpenShiftManagedClustersOperations + +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'OpenShiftManagedClustersOperations', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py new file mode 100644 index 00000000000..f675bb3916d --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py @@ -0,0 +1,693 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._open_shift_managed_clusters_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_request, build_list_by_resource_group_request, build_list_request, build_update_tags_request_initial +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class OpenShiftManagedClustersOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2019_04_30.aio.ContainerServiceClient`'s + :attr:`open_shift_managed_clusters` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.OpenShiftManagedClusterListResult]: + """Gets a list of OpenShift managed clusters in the specified subscription. + + Gets a list of OpenShift managed clusters in the specified subscription. The operation returns + properties of each OpenShift managed cluster. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.OpenShiftManagedClusterListResult]: + """Lists OpenShift managed clusters in the specified subscription and resource group. + + Lists OpenShift managed clusters in the specified subscription and resource group. The + operation returns properties of each OpenShift managed cluster. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + """Gets a OpenShift managed cluster. + + Gets the details of the managed OpenShift cluster with a specified resource group and name. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OpenShiftManagedCluster, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + async def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.OpenShiftManagedCluster, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + _json = self._serialize.body(parameters, 'OpenShiftManagedCluster') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.OpenShiftManagedCluster, + **kwargs: Any + ) -> AsyncLROPoller[_models.OpenShiftManagedCluster]: + """Creates or updates an OpenShift managed cluster. + + Creates or updates a OpenShift managed cluster with the specified configuration for agents and + OpenShift version. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Create or Update an OpenShift Managed Cluster + operation. + :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either OpenShiftManagedCluster or the + result of cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + async def _update_tags_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._update_tags_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> AsyncLROPoller[_models.OpenShiftManagedCluster]: + """Updates tags on an OpenShift managed cluster. + + Updates an OpenShift managed cluster with the specified tags. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update OpenShift Managed Cluster Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either OpenShiftManagedCluster or the + result of cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_tags_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes an OpenShift managed cluster. + + Deletes the OpenShift managed cluster with a specified resource group and name. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py new file mode 100644 index 00000000000..421ce777c25 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py @@ -0,0 +1,53 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._models_py3 import CloudErrorBody +from ._models_py3 import NetworkProfile +from ._models_py3 import OpenShiftManagedCluster +from ._models_py3 import OpenShiftManagedClusterAADIdentityProvider +from ._models_py3 import OpenShiftManagedClusterAgentPoolProfile +from ._models_py3 import OpenShiftManagedClusterAuthProfile +from ._models_py3 import OpenShiftManagedClusterBaseIdentityProvider +from ._models_py3 import OpenShiftManagedClusterIdentityProvider +from ._models_py3 import OpenShiftManagedClusterListResult +from ._models_py3 import OpenShiftManagedClusterMasterPoolProfile +from ._models_py3 import OpenShiftRouterProfile +from ._models_py3 import PurchasePlan +from ._models_py3 import Resource +from ._models_py3 import TagsObject + + +from ._container_service_client_enums import ( + OSType, + OpenShiftAgentPoolProfileRole, + OpenShiftContainerServiceVMSize, +) +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'CloudErrorBody', + 'NetworkProfile', + 'OpenShiftManagedCluster', + 'OpenShiftManagedClusterAADIdentityProvider', + 'OpenShiftManagedClusterAgentPoolProfile', + 'OpenShiftManagedClusterAuthProfile', + 'OpenShiftManagedClusterBaseIdentityProvider', + 'OpenShiftManagedClusterIdentityProvider', + 'OpenShiftManagedClusterListResult', + 'OpenShiftManagedClusterMasterPoolProfile', + 'OpenShiftRouterProfile', + 'PurchasePlan', + 'Resource', + 'TagsObject', + 'OSType', + 'OpenShiftAgentPoolProfileRole', + 'OpenShiftContainerServiceVMSize', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py new file mode 100644 index 00000000000..6c64f62d066 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py @@ -0,0 +1,63 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 +from azure.core import CaseInsensitiveEnumMeta + + +class OpenShiftAgentPoolProfileRole(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """OpenShiftAgentPoolProfileRole represents the role of the AgentPoolProfile. + """ + + COMPUTE = "compute" + INFRA = "infra" + +class OpenShiftContainerServiceVMSize(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Size of OpenShift VMs. + """ + + STANDARD_D2_S_V3 = "Standard_D2s_v3" + STANDARD_D4_S_V3 = "Standard_D4s_v3" + STANDARD_D8_S_V3 = "Standard_D8s_v3" + STANDARD_D16_S_V3 = "Standard_D16s_v3" + STANDARD_D32_S_V3 = "Standard_D32s_v3" + STANDARD_D64_S_V3 = "Standard_D64s_v3" + STANDARD_DS4_V2 = "Standard_DS4_v2" + STANDARD_DS5_V2 = "Standard_DS5_v2" + STANDARD_F8_S_V2 = "Standard_F8s_v2" + STANDARD_F16_S_V2 = "Standard_F16s_v2" + STANDARD_F32_S_V2 = "Standard_F32s_v2" + STANDARD_F64_S_V2 = "Standard_F64s_v2" + STANDARD_F72_S_V2 = "Standard_F72s_v2" + STANDARD_F8_S = "Standard_F8s" + STANDARD_F16_S = "Standard_F16s" + STANDARD_E4_S_V3 = "Standard_E4s_v3" + STANDARD_E8_S_V3 = "Standard_E8s_v3" + STANDARD_E16_S_V3 = "Standard_E16s_v3" + STANDARD_E20_S_V3 = "Standard_E20s_v3" + STANDARD_E32_S_V3 = "Standard_E32s_v3" + STANDARD_E64_S_V3 = "Standard_E64s_v3" + STANDARD_GS2 = "Standard_GS2" + STANDARD_GS3 = "Standard_GS3" + STANDARD_GS4 = "Standard_GS4" + STANDARD_GS5 = "Standard_GS5" + STANDARD_DS12_V2 = "Standard_DS12_v2" + STANDARD_DS13_V2 = "Standard_DS13_v2" + STANDARD_DS14_V2 = "Standard_DS14_v2" + STANDARD_DS15_V2 = "Standard_DS15_v2" + STANDARD_L4_S = "Standard_L4s" + STANDARD_L8_S = "Standard_L8s" + STANDARD_L16_S = "Standard_L16s" + STANDARD_L32_S = "Standard_L32s" + +class OSType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. + """ + + LINUX = "Linux" + WINDOWS = "Windows" diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py new file mode 100644 index 00000000000..47a7d05afb3 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py @@ -0,0 +1,760 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Dict, List, Optional, TYPE_CHECKING, Union + +import msrest.serialization + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + import __init__ as _models + + +class CloudErrorBody(msrest.serialization.Model): + """An error response from the Container service. + + :ivar code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :vartype code: str + :ivar message: A message describing the error, intended to be suitable for display in a user + interface. + :vartype message: str + :ivar target: The target of the particular error. For example, the name of the property in + error. + :vartype target: str + :ivar details: A list of additional details about the error. + :vartype details: list[~azure.mgmt.containerservice.v2019_04_30.models.CloudErrorBody] + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[CloudErrorBody]'}, + } + + def __init__( + self, + *, + code: Optional[str] = None, + message: Optional[str] = None, + target: Optional[str] = None, + details: Optional[List["_models.CloudErrorBody"]] = None, + **kwargs + ): + """ + :keyword code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :paramtype code: str + :keyword message: A message describing the error, intended to be suitable for display in a user + interface. + :paramtype message: str + :keyword target: The target of the particular error. For example, the name of the property in + error. + :paramtype target: str + :keyword details: A list of additional details about the error. + :paramtype details: list[~azure.mgmt.containerservice.v2019_04_30.models.CloudErrorBody] + """ + super(CloudErrorBody, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + self.details = details + + +class NetworkProfile(msrest.serialization.Model): + """Represents the OpenShift networking configuration. + + :ivar vnet_cidr: CIDR for the OpenShift Vnet. + :vartype vnet_cidr: str + :ivar peer_vnet_id: CIDR of the Vnet to peer. + :vartype peer_vnet_id: str + :ivar vnet_id: ID of the Vnet created for OSA cluster. + :vartype vnet_id: str + """ + + _attribute_map = { + 'vnet_cidr': {'key': 'vnetCidr', 'type': 'str'}, + 'peer_vnet_id': {'key': 'peerVnetId', 'type': 'str'}, + 'vnet_id': {'key': 'vnetId', 'type': 'str'}, + } + + def __init__( + self, + *, + vnet_cidr: Optional[str] = "10.0.0.0/8", + peer_vnet_id: Optional[str] = None, + vnet_id: Optional[str] = None, + **kwargs + ): + """ + :keyword vnet_cidr: CIDR for the OpenShift Vnet. + :paramtype vnet_cidr: str + :keyword peer_vnet_id: CIDR of the Vnet to peer. + :paramtype peer_vnet_id: str + :keyword vnet_id: ID of the Vnet created for OSA cluster. + :paramtype vnet_id: str + """ + super(NetworkProfile, self).__init__(**kwargs) + self.vnet_cidr = vnet_cidr + self.peer_vnet_id = peer_vnet_id + self.vnet_id = vnet_id + + +class Resource(msrest.serialization.Model): + """The Resource model definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar location: Required. Resource location. + :vartype location: str + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword location: Required. Resource location. + :paramtype location: str + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + """ + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.location = location + self.tags = tags + + +class OpenShiftManagedCluster(Resource): + """OpenShift Managed cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Resource Id. + :vartype id: str + :ivar name: Resource name. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar location: Required. Resource location. + :vartype location: str + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar plan: Define the resource plan as required by ARM for billing purposes. + :vartype plan: ~azure.mgmt.containerservice.v2019_04_30.models.PurchasePlan + :ivar provisioning_state: The current deployment or provisioning state, which only appears in + the response. + :vartype provisioning_state: str + :ivar open_shift_version: Version of OpenShift specified when creating the cluster. + :vartype open_shift_version: str + :ivar cluster_version: Version of OpenShift specified when creating the cluster. + :vartype cluster_version: str + :ivar public_hostname: Service generated FQDN for OpenShift API server. + :vartype public_hostname: str + :ivar fqdn: Service generated FQDN for OpenShift API server loadbalancer internal hostname. + :vartype fqdn: str + :ivar network_profile: Configuration for OpenShift networking. + :vartype network_profile: ~azure.mgmt.containerservice.v2019_04_30.models.NetworkProfile + :ivar router_profiles: Configuration for OpenShift router(s). + :vartype router_profiles: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftRouterProfile] + :ivar master_pool_profile: Configuration for OpenShift master VMs. + :vartype master_pool_profile: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterMasterPoolProfile + :ivar agent_pool_profiles: Configuration of OpenShift cluster VMs. + :vartype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAgentPoolProfile] + :ivar auth_profile: Configures OpenShift authentication. + :vartype auth_profile: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAuthProfile + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'cluster_version': {'readonly': True}, + 'public_hostname': {'readonly': True}, + 'fqdn': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'location': {'key': 'location', 'type': 'str'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'plan': {'key': 'plan', 'type': 'PurchasePlan'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'open_shift_version': {'key': 'properties.openShiftVersion', 'type': 'str'}, + 'cluster_version': {'key': 'properties.clusterVersion', 'type': 'str'}, + 'public_hostname': {'key': 'properties.publicHostname', 'type': 'str'}, + 'fqdn': {'key': 'properties.fqdn', 'type': 'str'}, + 'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'}, + 'router_profiles': {'key': 'properties.routerProfiles', 'type': '[OpenShiftRouterProfile]'}, + 'master_pool_profile': {'key': 'properties.masterPoolProfile', 'type': 'OpenShiftManagedClusterMasterPoolProfile'}, + 'agent_pool_profiles': {'key': 'properties.agentPoolProfiles', 'type': '[OpenShiftManagedClusterAgentPoolProfile]'}, + 'auth_profile': {'key': 'properties.authProfile', 'type': 'OpenShiftManagedClusterAuthProfile'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + plan: Optional["_models.PurchasePlan"] = None, + open_shift_version: Optional[str] = None, + network_profile: Optional["_models.NetworkProfile"] = None, + router_profiles: Optional[List["_models.OpenShiftRouterProfile"]] = None, + master_pool_profile: Optional["_models.OpenShiftManagedClusterMasterPoolProfile"] = None, + agent_pool_profiles: Optional[List["_models.OpenShiftManagedClusterAgentPoolProfile"]] = None, + auth_profile: Optional["_models.OpenShiftManagedClusterAuthProfile"] = None, + **kwargs + ): + """ + :keyword location: Required. Resource location. + :paramtype location: str + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword plan: Define the resource plan as required by ARM for billing purposes. + :paramtype plan: ~azure.mgmt.containerservice.v2019_04_30.models.PurchasePlan + :keyword open_shift_version: Version of OpenShift specified when creating the cluster. + :paramtype open_shift_version: str + :keyword network_profile: Configuration for OpenShift networking. + :paramtype network_profile: ~azure.mgmt.containerservice.v2019_04_30.models.NetworkProfile + :keyword router_profiles: Configuration for OpenShift router(s). + :paramtype router_profiles: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftRouterProfile] + :keyword master_pool_profile: Configuration for OpenShift master VMs. + :paramtype master_pool_profile: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterMasterPoolProfile + :keyword agent_pool_profiles: Configuration of OpenShift cluster VMs. + :paramtype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAgentPoolProfile] + :keyword auth_profile: Configures OpenShift authentication. + :paramtype auth_profile: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAuthProfile + """ + super(OpenShiftManagedCluster, self).__init__(location=location, tags=tags, **kwargs) + self.plan = plan + self.provisioning_state = None + self.open_shift_version = open_shift_version + self.cluster_version = None + self.public_hostname = None + self.fqdn = None + self.network_profile = network_profile + self.router_profiles = router_profiles + self.master_pool_profile = master_pool_profile + self.agent_pool_profiles = agent_pool_profiles + self.auth_profile = auth_profile + + +class OpenShiftManagedClusterBaseIdentityProvider(msrest.serialization.Model): + """Structure for any Identity provider. + + You probably want to use the sub-classes and not this class directly. Known + sub-classes are: OpenShiftManagedClusterAADIdentityProvider. + + All required parameters must be populated in order to send to Azure. + + :ivar kind: Required. The kind of the provider.Constant filled by server. + :vartype kind: str + """ + + _validation = { + 'kind': {'required': True}, + } + + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + } + + _subtype_map = { + 'kind': {'AADIdentityProvider': 'OpenShiftManagedClusterAADIdentityProvider'} + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(OpenShiftManagedClusterBaseIdentityProvider, self).__init__(**kwargs) + self.kind = None # type: Optional[str] + + +class OpenShiftManagedClusterAADIdentityProvider(OpenShiftManagedClusterBaseIdentityProvider): + """Defines the Identity provider for MS AAD. + + All required parameters must be populated in order to send to Azure. + + :ivar kind: Required. The kind of the provider.Constant filled by server. + :vartype kind: str + :ivar client_id: The clientId password associated with the provider. + :vartype client_id: str + :ivar secret: The secret password associated with the provider. + :vartype secret: str + :ivar tenant_id: The tenantId associated with the provider. + :vartype tenant_id: str + :ivar customer_admin_group_id: The groupId to be granted cluster admin role. + :vartype customer_admin_group_id: str + """ + + _validation = { + 'kind': {'required': True}, + } + + _attribute_map = { + 'kind': {'key': 'kind', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + 'customer_admin_group_id': {'key': 'customerAdminGroupId', 'type': 'str'}, + } + + def __init__( + self, + *, + client_id: Optional[str] = None, + secret: Optional[str] = None, + tenant_id: Optional[str] = None, + customer_admin_group_id: Optional[str] = None, + **kwargs + ): + """ + :keyword client_id: The clientId password associated with the provider. + :paramtype client_id: str + :keyword secret: The secret password associated with the provider. + :paramtype secret: str + :keyword tenant_id: The tenantId associated with the provider. + :paramtype tenant_id: str + :keyword customer_admin_group_id: The groupId to be granted cluster admin role. + :paramtype customer_admin_group_id: str + """ + super(OpenShiftManagedClusterAADIdentityProvider, self).__init__(**kwargs) + self.kind = 'AADIdentityProvider' # type: str + self.client_id = client_id + self.secret = secret + self.tenant_id = tenant_id + self.customer_admin_group_id = customer_admin_group_id + + +class OpenShiftManagedClusterAgentPoolProfile(msrest.serialization.Model): + """Defines the configuration of the OpenShift cluster VMs. + + All required parameters must be populated in order to send to Azure. + + :ivar name: Required. Unique name of the pool profile in the context of the subscription and + resource group. + :vartype name: str + :ivar count: Required. Number of agents (VMs) to host docker containers. + :vartype count: int + :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", + "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", + "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", + "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", + "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", + "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", + "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", + "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". + :vartype vm_size: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize + :ivar subnet_cidr: Subnet CIDR for the peering. + :vartype subnet_cidr: str + :ivar os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to + Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType + :ivar role: Define the role of the AgentPoolProfile. Known values are: "compute", "infra". + :vartype role: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftAgentPoolProfileRole + """ + + _validation = { + 'name': {'required': True}, + 'count': {'required': True}, + 'vm_size': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'count': {'key': 'count', 'type': 'int'}, + 'vm_size': {'key': 'vmSize', 'type': 'str'}, + 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, + 'os_type': {'key': 'osType', 'type': 'str'}, + 'role': {'key': 'role', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + count: int, + vm_size: Union[str, "_models.OpenShiftContainerServiceVMSize"], + subnet_cidr: Optional[str] = "10.0.0.0/24", + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", + role: Optional[Union[str, "_models.OpenShiftAgentPoolProfileRole"]] = None, + **kwargs + ): + """ + :keyword name: Required. Unique name of the pool profile in the context of the subscription and + resource group. + :paramtype name: str + :keyword count: Required. Number of agents (VMs) to host docker containers. + :paramtype count: int + :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", + "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", + "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", + "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", + "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", + "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", + "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", + "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". + :paramtype vm_size: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize + :keyword subnet_cidr: Subnet CIDR for the peering. + :paramtype subnet_cidr: str + :keyword os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default + to Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType + :keyword role: Define the role of the AgentPoolProfile. Known values are: "compute", "infra". + :paramtype role: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftAgentPoolProfileRole + """ + super(OpenShiftManagedClusterAgentPoolProfile, self).__init__(**kwargs) + self.name = name + self.count = count + self.vm_size = vm_size + self.subnet_cidr = subnet_cidr + self.os_type = os_type + self.role = role + + +class OpenShiftManagedClusterAuthProfile(msrest.serialization.Model): + """Defines all possible authentication profiles for the OpenShift cluster. + + :ivar identity_providers: Type of authentication profile to use. + :vartype identity_providers: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterIdentityProvider] + """ + + _attribute_map = { + 'identity_providers': {'key': 'identityProviders', 'type': '[OpenShiftManagedClusterIdentityProvider]'}, + } + + def __init__( + self, + *, + identity_providers: Optional[List["_models.OpenShiftManagedClusterIdentityProvider"]] = None, + **kwargs + ): + """ + :keyword identity_providers: Type of authentication profile to use. + :paramtype identity_providers: + list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterIdentityProvider] + """ + super(OpenShiftManagedClusterAuthProfile, self).__init__(**kwargs) + self.identity_providers = identity_providers + + +class OpenShiftManagedClusterIdentityProvider(msrest.serialization.Model): + """Defines the configuration of the identity providers to be used in the OpenShift cluster. + + :ivar name: Name of the provider. + :vartype name: str + :ivar provider: Configuration of the provider. + :vartype provider: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterBaseIdentityProvider + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'provider': {'key': 'provider', 'type': 'OpenShiftManagedClusterBaseIdentityProvider'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + provider: Optional["_models.OpenShiftManagedClusterBaseIdentityProvider"] = None, + **kwargs + ): + """ + :keyword name: Name of the provider. + :paramtype name: str + :keyword provider: Configuration of the provider. + :paramtype provider: + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterBaseIdentityProvider + """ + super(OpenShiftManagedClusterIdentityProvider, self).__init__(**kwargs) + self.name = name + self.provider = provider + + +class OpenShiftManagedClusterListResult(msrest.serialization.Model): + """The response from the List OpenShift Managed Clusters operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of OpenShift managed clusters. + :vartype value: list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + :ivar next_link: The URL to get the next set of OpenShift managed cluster results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OpenShiftManagedCluster]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.OpenShiftManagedCluster"]] = None, + **kwargs + ): + """ + :keyword value: The list of OpenShift managed clusters. + :paramtype value: list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + """ + super(OpenShiftManagedClusterListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class OpenShiftManagedClusterMasterPoolProfile(msrest.serialization.Model): + """OpenShiftManagedClusterMaterPoolProfile contains configuration for OpenShift master VMs. + + All required parameters must be populated in order to send to Azure. + + :ivar name: Unique name of the master pool profile in the context of the subscription and + resource group. + :vartype name: str + :ivar count: Required. Number of masters (VMs) to host docker containers. The default value is + 3. + :vartype count: int + :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", + "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", + "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", + "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", + "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", + "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", + "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", + "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". + :vartype vm_size: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize + :ivar subnet_cidr: Subnet CIDR for the peering. + :vartype subnet_cidr: str + :ivar os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to + Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType + """ + + _validation = { + 'count': {'required': True}, + 'vm_size': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'count': {'key': 'count', 'type': 'int'}, + 'vm_size': {'key': 'vmSize', 'type': 'str'}, + 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, + 'os_type': {'key': 'osType', 'type': 'str'}, + } + + def __init__( + self, + *, + count: int, + vm_size: Union[str, "_models.OpenShiftContainerServiceVMSize"], + name: Optional[str] = None, + subnet_cidr: Optional[str] = None, + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", + **kwargs + ): + """ + :keyword name: Unique name of the master pool profile in the context of the subscription and + resource group. + :paramtype name: str + :keyword count: Required. Number of masters (VMs) to host docker containers. The default value + is 3. + :paramtype count: int + :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", + "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", + "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", + "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", + "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", + "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", + "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", + "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". + :paramtype vm_size: str or + ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize + :keyword subnet_cidr: Subnet CIDR for the peering. + :paramtype subnet_cidr: str + :keyword os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default + to Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType + """ + super(OpenShiftManagedClusterMasterPoolProfile, self).__init__(**kwargs) + self.name = name + self.count = count + self.vm_size = vm_size + self.subnet_cidr = subnet_cidr + self.os_type = os_type + + +class OpenShiftRouterProfile(msrest.serialization.Model): + """Represents an OpenShift router. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: Name of the router profile. + :vartype name: str + :ivar public_subdomain: DNS subdomain for OpenShift router. + :vartype public_subdomain: str + :ivar fqdn: Auto-allocated FQDN for the OpenShift router. + :vartype fqdn: str + """ + + _validation = { + 'public_subdomain': {'readonly': True}, + 'fqdn': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'public_subdomain': {'key': 'publicSubdomain', 'type': 'str'}, + 'fqdn': {'key': 'fqdn', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + **kwargs + ): + """ + :keyword name: Name of the router profile. + :paramtype name: str + """ + super(OpenShiftRouterProfile, self).__init__(**kwargs) + self.name = name + self.public_subdomain = None + self.fqdn = None + + +class PurchasePlan(msrest.serialization.Model): + """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace. + + :ivar name: The plan ID. + :vartype name: str + :ivar product: Specifies the product of the image from the marketplace. This is the same value + as Offer under the imageReference element. + :vartype product: str + :ivar promotion_code: The promotion code. + :vartype promotion_code: str + :ivar publisher: The plan ID. + :vartype publisher: str + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'product': {'key': 'product', 'type': 'str'}, + 'promotion_code': {'key': 'promotionCode', 'type': 'str'}, + 'publisher': {'key': 'publisher', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + product: Optional[str] = None, + promotion_code: Optional[str] = None, + publisher: Optional[str] = None, + **kwargs + ): + """ + :keyword name: The plan ID. + :paramtype name: str + :keyword product: Specifies the product of the image from the marketplace. This is the same + value as Offer under the imageReference element. + :paramtype product: str + :keyword promotion_code: The promotion code. + :paramtype promotion_code: str + :keyword publisher: The plan ID. + :paramtype publisher: str + """ + super(PurchasePlan, self).__init__(**kwargs) + self.name = name + self.product = product + self.promotion_code = promotion_code + self.publisher = publisher + + +class TagsObject(msrest.serialization.Model): + """Tags object for patch operations. + + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + """ + super(TagsObject, self).__init__(**kwargs) + self.tags = tags diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py new file mode 100644 index 00000000000..211a8787980 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py @@ -0,0 +1,18 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._open_shift_managed_clusters_operations import OpenShiftManagedClustersOperations + +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'OpenShiftManagedClustersOperations', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py new file mode 100644 index 00000000000..97238bf9951 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py @@ -0,0 +1,927 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_resource_group_request( + subscription_id: str, + resource_group_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.OpenShiftManagedCluster] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_update_tags_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.TagsObject] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PATCH", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class OpenShiftManagedClustersOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2019_04_30.ContainerServiceClient`'s + :attr:`open_shift_managed_clusters` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.OpenShiftManagedClusterListResult]: + """Gets a list of OpenShift managed clusters in the specified subscription. + + Gets a list of OpenShift managed clusters in the specified subscription. The operation returns + properties of each OpenShift managed cluster. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.OpenShiftManagedClusterListResult]: + """Lists OpenShift managed clusters in the specified subscription and resource group. + + Lists OpenShift managed clusters in the specified subscription and resource group. The + operation returns properties of each OpenShift managed cluster. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + """Gets a OpenShift managed cluster. + + Gets the details of the managed OpenShift cluster with a specified resource group and name. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OpenShiftManagedCluster, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.OpenShiftManagedCluster, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + _json = self._serialize.body(parameters, 'OpenShiftManagedCluster') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.OpenShiftManagedCluster, + **kwargs: Any + ) -> LROPoller[_models.OpenShiftManagedCluster]: + """Creates or updates an OpenShift managed cluster. + + Creates or updates a OpenShift managed cluster with the specified configuration for agents and + OpenShift version. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Create or Update an OpenShift Managed Cluster + operation. + :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either OpenShiftManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + def _update_tags_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.OpenShiftManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._update_tags_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> LROPoller[_models.OpenShiftManagedCluster]: + """Updates tags on an OpenShift managed cluster. + + Updates an OpenShift managed cluster with the specified tags. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update OpenShift Managed Cluster Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either OpenShiftManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_tags_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes an OpenShift managed cluster. + + Deletes the OpenShift managed cluster with a specified resource group and name. + + :param resource_group_name: The name of the resource group. + :type resource_group_name: str + :param resource_name: The name of the OpenShift managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/__init__.py new file mode 100644 index 00000000000..37a5f9e02e6 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/__init__.py @@ -0,0 +1,20 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._container_service_client import ContainerServiceClient + +try: + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk +__all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_configuration.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_configuration.py index 0ea5a338f54..35677f6c629 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_configuration.py @@ -28,7 +28,7 @@ class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: The ID of the target subscription. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + :keyword api_version: Api Version. Default value is "2022-07-02-preview". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ @@ -40,7 +40,7 @@ def __init__( **kwargs: Any ) -> None: super(ContainerServiceClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop('api_version', "2022-06-02-preview") # type: str + api_version = kwargs.pop('api_version', "2022-07-02-preview") # type: str if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_container_service_client.py similarity index 89% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_container_service_client.py index 8f81cd2f200..1c0eb6e2cb3 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_container_service_client.py @@ -26,49 +26,49 @@ class ContainerServiceClient: # pylint: disable=too-many-instance-attributes """The Container Service Client. :ivar operations: Operations operations - :vartype operations: azure.mgmt.containerservice.v2022_06_02_preview.operations.Operations + :vartype operations: azure.mgmt.containerservice.v2022_07_02_preview.operations.Operations :ivar managed_clusters: ManagedClustersOperations operations :vartype managed_clusters: - azure.mgmt.containerservice.v2022_06_02_preview.operations.ManagedClustersOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.ManagedClustersOperations :ivar maintenance_configurations: MaintenanceConfigurationsOperations operations :vartype maintenance_configurations: - azure.mgmt.containerservice.v2022_06_02_preview.operations.MaintenanceConfigurationsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.MaintenanceConfigurationsOperations :ivar agent_pools: AgentPoolsOperations operations :vartype agent_pools: - azure.mgmt.containerservice.v2022_06_02_preview.operations.AgentPoolsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.AgentPoolsOperations :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations :vartype private_endpoint_connections: - azure.mgmt.containerservice.v2022_06_02_preview.operations.PrivateEndpointConnectionsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.PrivateEndpointConnectionsOperations :ivar private_link_resources: PrivateLinkResourcesOperations operations :vartype private_link_resources: - azure.mgmt.containerservice.v2022_06_02_preview.operations.PrivateLinkResourcesOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.PrivateLinkResourcesOperations :ivar resolve_private_link_service_id: ResolvePrivateLinkServiceIdOperations operations :vartype resolve_private_link_service_id: - azure.mgmt.containerservice.v2022_06_02_preview.operations.ResolvePrivateLinkServiceIdOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.ResolvePrivateLinkServiceIdOperations :ivar snapshots: SnapshotsOperations operations :vartype snapshots: - azure.mgmt.containerservice.v2022_06_02_preview.operations.SnapshotsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.SnapshotsOperations :ivar managed_cluster_snapshots: ManagedClusterSnapshotsOperations operations :vartype managed_cluster_snapshots: - azure.mgmt.containerservice.v2022_06_02_preview.operations.ManagedClusterSnapshotsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.ManagedClusterSnapshotsOperations :ivar trusted_access_roles: TrustedAccessRolesOperations operations :vartype trusted_access_roles: - azure.mgmt.containerservice.v2022_06_02_preview.operations.TrustedAccessRolesOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.TrustedAccessRolesOperations :ivar trusted_access_role_bindings: TrustedAccessRoleBindingsOperations operations :vartype trusted_access_role_bindings: - azure.mgmt.containerservice.v2022_06_02_preview.operations.TrustedAccessRoleBindingsOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.TrustedAccessRoleBindingsOperations :ivar fleets: FleetsOperations operations - :vartype fleets: azure.mgmt.containerservice.v2022_06_02_preview.operations.FleetsOperations + :vartype fleets: azure.mgmt.containerservice.v2022_07_02_preview.operations.FleetsOperations :ivar fleet_members: FleetMembersOperations operations :vartype fleet_members: - azure.mgmt.containerservice.v2022_06_02_preview.operations.FleetMembersOperations + azure.mgmt.containerservice.v2022_07_02_preview.operations.FleetMembersOperations :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials.TokenCredential :param subscription_id: The ID of the target subscription. :type subscription_id: str :param base_url: Service URL. Default value is "https://management.azure.com". :type base_url: str - :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + :keyword api_version: Api Version. Default value is "2022-07-02-preview". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_patch.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_patch.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_vendor.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_vendor.py new file mode 100644 index 00000000000..138f663c53a --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/_vendor.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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.pipeline.transport import HttpRequest + +def _convert_request(request, files=None): + data = request.content if not files else None + request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) + if files: + request.set_formdata_body(files) + return request + +def _format_url_section(template, **kwargs): + components = template.split("/") + while components: + try: + return template.format(**kwargs) + except KeyError as key: + formatted_components = template.split("/") + components = [ + c for c in formatted_components if "{}".format(key.args[0]) not in c + ] + template = "/".join(components) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/__init__.py new file mode 100644 index 00000000000..37a5f9e02e6 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/__init__.py @@ -0,0 +1,20 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._container_service_client import ContainerServiceClient + +try: + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk +__all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_configuration.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_configuration.py index e84eaf42ba4..75386d19af7 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_configuration.py @@ -28,7 +28,7 @@ class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: The ID of the target subscription. :type subscription_id: str - :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + :keyword api_version: Api Version. Default value is "2022-07-02-preview". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str """ @@ -40,7 +40,7 @@ def __init__( **kwargs: Any ) -> None: super(ContainerServiceClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop('api_version', "2022-06-02-preview") # type: str + api_version = kwargs.pop('api_version', "2022-07-02-preview") # type: str if credential is None: raise ValueError("Parameter 'credential' must not be None.") diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_container_service_client.py similarity index 89% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_container_service_client.py index 92f54272638..d61d2b42078 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_container_service_client.py @@ -26,50 +26,50 @@ class ContainerServiceClient: # pylint: disable=too-many-instance-attributes """The Container Service Client. :ivar operations: Operations operations - :vartype operations: azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.Operations + :vartype operations: azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.Operations :ivar managed_clusters: ManagedClustersOperations operations :vartype managed_clusters: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ManagedClustersOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.ManagedClustersOperations :ivar maintenance_configurations: MaintenanceConfigurationsOperations operations :vartype maintenance_configurations: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.MaintenanceConfigurationsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.MaintenanceConfigurationsOperations :ivar agent_pools: AgentPoolsOperations operations :vartype agent_pools: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.AgentPoolsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.AgentPoolsOperations :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations :vartype private_endpoint_connections: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.PrivateEndpointConnectionsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.PrivateEndpointConnectionsOperations :ivar private_link_resources: PrivateLinkResourcesOperations operations :vartype private_link_resources: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.PrivateLinkResourcesOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.PrivateLinkResourcesOperations :ivar resolve_private_link_service_id: ResolvePrivateLinkServiceIdOperations operations :vartype resolve_private_link_service_id: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ResolvePrivateLinkServiceIdOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.ResolvePrivateLinkServiceIdOperations :ivar snapshots: SnapshotsOperations operations :vartype snapshots: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.SnapshotsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.SnapshotsOperations :ivar managed_cluster_snapshots: ManagedClusterSnapshotsOperations operations :vartype managed_cluster_snapshots: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ManagedClusterSnapshotsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.ManagedClusterSnapshotsOperations :ivar trusted_access_roles: TrustedAccessRolesOperations operations :vartype trusted_access_roles: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.TrustedAccessRolesOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.TrustedAccessRolesOperations :ivar trusted_access_role_bindings: TrustedAccessRoleBindingsOperations operations :vartype trusted_access_role_bindings: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.TrustedAccessRoleBindingsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.TrustedAccessRoleBindingsOperations :ivar fleets: FleetsOperations operations :vartype fleets: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.FleetsOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.FleetsOperations :ivar fleet_members: FleetMembersOperations operations :vartype fleet_members: - azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.FleetMembersOperations + azure.mgmt.containerservice.v2022_07_02_preview.aio.operations.FleetMembersOperations :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials_async.AsyncTokenCredential :param subscription_id: The ID of the target subscription. :type subscription_id: str :param base_url: Service URL. Default value is "https://management.azure.com". :type base_url: str - :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + :keyword api_version: Api Version. Default value is "2022-07-02-preview". Note that overriding this default value may result in unsupported behavior. :paramtype api_version: str :keyword int polling_interval: Default waiting time between two polls for LRO operations if no diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_patch.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/_patch.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/__init__.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/__init__.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py index 4bb851949e2..71a75097bd4 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py @@ -32,7 +32,7 @@ class AgentPoolsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`agent_pools` attribute. """ @@ -64,13 +64,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolListResult] error_map = { @@ -157,7 +157,7 @@ async def get( :type agent_pool_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPool, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -168,7 +168,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] @@ -222,7 +222,7 @@ async def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] @@ -288,7 +288,7 @@ async def begin_create_or_update( :param agent_pool_name: The name of the agent pool. :type agent_pool_name: str :param parameters: The agent pool to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -300,13 +300,13 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either AgentPool or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -373,7 +373,7 @@ async def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -445,7 +445,7 @@ async def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -512,7 +512,7 @@ async def get_upgrade_profile( :type agent_pool_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPoolUpgradeProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -523,7 +523,7 @@ async def get_upgrade_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolUpgradeProfile] @@ -580,7 +580,7 @@ async def get_available_agent_pool_versions( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPoolAvailableVersions, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersions + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolAvailableVersions :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -591,7 +591,7 @@ async def get_available_agent_pool_versions( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolAvailableVersions] @@ -643,7 +643,7 @@ async def _upgrade_node_image_version_initial( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.AgentPool]] @@ -717,13 +717,13 @@ async def begin_upgrade_node_image_version( :return: An instance of AsyncLROPoller that returns either AgentPool or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleet_members_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleet_members_operations.py index 725d03cd0df..2051a03059f 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleet_members_operations.py @@ -32,7 +32,7 @@ class FleetMembersOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`fleet_members` attribute. """ @@ -64,7 +64,7 @@ async def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] @@ -135,7 +135,7 @@ async def begin_create_or_update( :param fleet_member_name: The name of the Fleet member resource. :type fleet_member_name: str :param parameters: The Fleet member to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember :param if_match: Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -155,13 +155,13 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either FleetMember or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -234,7 +234,7 @@ async def get( :type fleet_member_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FleetMember, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -245,7 +245,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] @@ -300,7 +300,7 @@ async def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -374,7 +374,7 @@ async def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -440,13 +440,13 @@ def list_by_fleet( :return: An iterator like instance of either FleetMembersListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMembersListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMembersListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMembersListResult] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleets_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleets_operations.py index ce009db6def..92868aa4183 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_fleets_operations.py @@ -32,7 +32,7 @@ class FleetsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`fleets` attribute. """ @@ -63,7 +63,7 @@ async def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -129,7 +129,7 @@ async def begin_create_or_update( :param fleet_name: The name of the Fleet resource. :type fleet_name: str :param parameters: The Fleet to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :param if_match: Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -148,13 +148,13 @@ async def begin_create_or_update( Retry-After header is present. :return: An instance of AsyncLROPoller that returns either Fleet or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -228,10 +228,10 @@ async def update( None. :type if_match: str :param parameters: The properties of a Fleet to update. Default value is None. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetPatch + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetPatch :keyword callable cls: A custom type or function that will be passed the direct response :return: Fleet, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -242,7 +242,7 @@ async def update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -305,7 +305,7 @@ async def get( :type fleet_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: Fleet, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -316,7 +316,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -369,7 +369,7 @@ async def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -438,7 +438,7 @@ async def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -499,13 +499,13 @@ def list_by_resource_group( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either FleetListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] error_map = { @@ -583,13 +583,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either FleetListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] error_map = { @@ -670,7 +670,7 @@ async def list_credentials( :type fleet_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FleetCredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetCredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -681,7 +681,7 @@ async def list_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetCredentialResults] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_maintenance_configurations_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_maintenance_configurations_operations.py index 92b8694edde..0f17632cd03 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_maintenance_configurations_operations.py @@ -30,7 +30,7 @@ class MaintenanceConfigurationsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`maintenance_configurations` attribute. """ @@ -63,13 +63,13 @@ def list_by_managed_cluster( :return: An iterator like instance of either MaintenanceConfigurationListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfigurationListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfigurationListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfigurationListResult] error_map = { @@ -156,7 +156,7 @@ async def get( :type config_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: MaintenanceConfiguration, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -167,7 +167,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] @@ -226,10 +226,10 @@ async def create_or_update( :type config_name: str :param parameters: The maintenance configuration to create or update. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :keyword callable cls: A custom type or function that will be passed the direct response :return: MaintenanceConfiguration, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -240,7 +240,7 @@ async def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] @@ -313,7 +313,7 @@ async def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_cluster_snapshots_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_cluster_snapshots_operations.py index b7703f90f60..5ebe125cbe7 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_cluster_snapshots_operations.py @@ -30,7 +30,7 @@ class ManagedClusterSnapshotsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`managed_cluster_snapshots` attribute. """ @@ -57,13 +57,13 @@ def list( :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] error_map = { @@ -142,13 +142,13 @@ def list_by_resource_group( :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] error_map = { @@ -230,7 +230,7 @@ async def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -241,7 +241,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -296,10 +296,10 @@ async def create_or_update( :type resource_name: str :param parameters: The managed cluster snapshot to create or update. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -310,7 +310,7 @@ async def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -372,10 +372,10 @@ async def update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update managed cluster snapshot Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -386,7 +386,7 @@ async def update_tags( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -455,7 +455,7 @@ async def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py index 1af3f180a76..824779ef48e 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py @@ -32,7 +32,7 @@ class ManagedClustersOperations: # pylint: disable=too-many-public-methods **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`managed_clusters` attribute. """ @@ -64,7 +64,7 @@ async def get_os_options( :type resource_type: str :keyword callable cls: A custom type or function that will be passed the direct response :return: OSOptionProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSOptionProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -75,7 +75,7 @@ async def get_os_options( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OSOptionProfile] @@ -125,13 +125,13 @@ def list( :return: An iterator like instance of either ManagedClusterListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] error_map = { @@ -210,13 +210,13 @@ def list_by_resource_group( :return: An iterator like instance of either ManagedClusterListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] error_map = { @@ -298,7 +298,7 @@ async def get_upgrade_profile( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterUpgradeProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterUpgradeProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterUpgradeProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -309,7 +309,7 @@ async def get_upgrade_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterUpgradeProfile] @@ -369,7 +369,7 @@ async def get_access_profile( :type role_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterAccessProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAccessProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAccessProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -380,7 +380,7 @@ async def get_access_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterAccessProfile] @@ -438,7 +438,7 @@ async def list_cluster_admin_credentials( :type server_fqdn: str :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -449,7 +449,7 @@ async def list_cluster_admin_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -509,10 +509,10 @@ async def list_cluster_user_credentials( :param format: Only apply to AAD clusters, specifies the format of returned kubeconfig. Format 'azure' will return azure auth-provider kubeconfig; format 'exec' will return exec format kubeconfig, which requires kubelogin binary in the path. Default value is None. - :type format: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Format + :type format: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Format :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -523,7 +523,7 @@ async def list_cluster_user_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -582,7 +582,7 @@ async def list_cluster_monitoring_user_credentials( :type server_fqdn: str :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -593,7 +593,7 @@ async def list_cluster_monitoring_user_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -648,7 +648,7 @@ async def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedCluster, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -659,7 +659,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -711,7 +711,7 @@ async def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -773,7 +773,7 @@ async def begin_create_or_update( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: The managed cluster to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -785,13 +785,13 @@ async def begin_create_or_update( :return: An instance of AsyncLROPoller that returns either ManagedCluster or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -856,7 +856,7 @@ async def _update_tags_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -914,7 +914,7 @@ async def begin_update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update Managed Cluster Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -926,13 +926,13 @@ async def begin_update_tags( :return: An instance of AsyncLROPoller that returns either ManagedCluster or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -997,7 +997,7 @@ async def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1065,7 +1065,7 @@ async def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -1126,7 +1126,7 @@ async def _reset_service_principal_profile_initial( # pylint: disable=inconsist _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1181,7 +1181,7 @@ async def begin_reset_service_principal_profile( # pylint: disable=inconsistent :type resource_name: str :param parameters: The service principal profile to set on the managed cluster. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterServicePrincipalProfile :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -1197,7 +1197,7 @@ async def begin_reset_service_principal_profile( # pylint: disable=inconsistent _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -1260,7 +1260,7 @@ async def _reset_aad_profile_initial( # pylint: disable=inconsistent-return-sta _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1315,7 +1315,7 @@ async def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statem :type resource_name: str :param parameters: The AAD profile to set on the Managed Cluster. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAADProfile :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -1331,7 +1331,7 @@ async def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statem _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -1393,7 +1393,7 @@ async def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent- _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1457,7 +1457,7 @@ async def begin_rotate_cluster_certificates( # pylint: disable=inconsistent-ret _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -1516,7 +1516,7 @@ async def _rotate_service_account_signing_keys_initial( # pylint: disable=incon _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1579,7 +1579,7 @@ async def begin_rotate_service_account_signing_keys( # pylint: disable=inconsis _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -1638,7 +1638,7 @@ async def _stop_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1705,7 +1705,7 @@ async def begin_stop( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -1764,7 +1764,7 @@ async def _start_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1828,7 +1828,7 @@ async def begin_start( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( @@ -1888,7 +1888,7 @@ async def _run_command_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] @@ -1951,7 +1951,7 @@ async def begin_run_command( :type resource_name: str :param request_payload: The run command request. :type request_payload: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandRequest + ~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandRequest :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for @@ -1963,13 +1963,13 @@ async def begin_run_command( :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult] + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.RunCommandResult] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] @@ -2039,7 +2039,7 @@ async def get_command_result( :type command_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RunCommandResult, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult or None + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandResult or None :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -2050,7 +2050,7 @@ async def get_command_result( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] @@ -2111,13 +2111,13 @@ def list_outbound_network_dependencies_endpoints( :return: An iterator like instance of either OutboundEnvironmentEndpointCollection or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpointCollection] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.OutboundEnvironmentEndpointCollection] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OutboundEnvironmentEndpointCollection] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_operations.py index 0531804ec4d..2637900d606 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_operations.py @@ -29,7 +29,7 @@ class Operations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`operations` attribute. """ @@ -55,13 +55,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either OperationListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OperationListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.OperationListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OperationListResult] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_endpoint_connections_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_endpoint_connections_operations.py index b4123e1f596..22f3bb596e8 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_endpoint_connections_operations.py @@ -30,7 +30,7 @@ class PrivateEndpointConnectionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`private_endpoint_connections` attribute. """ @@ -63,7 +63,7 @@ async def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnectionListResult, or the result of cls(response) :rtype: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnectionListResult + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnectionListResult :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -74,7 +74,7 @@ async def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnectionListResult] @@ -132,7 +132,7 @@ async def get( :type private_endpoint_connection_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnection, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -143,7 +143,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] @@ -202,10 +202,10 @@ async def update( :type private_endpoint_connection_name: str :param parameters: The updated private endpoint connection. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnection, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -216,7 +216,7 @@ async def update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] @@ -273,7 +273,7 @@ async def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -340,7 +340,7 @@ async def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_link_resources_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_link_resources_operations.py index 5666ff99f71..fe75c64a8cc 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_private_link_resources_operations.py @@ -28,7 +28,7 @@ class PrivateLinkResourcesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`private_link_resources` attribute. """ @@ -60,7 +60,7 @@ async def list( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateLinkResourcesListResult, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResourcesListResult + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResourcesListResult :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -71,7 +71,7 @@ async def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResourcesListResult] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_resolve_private_link_service_id_operations.py similarity index 95% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_resolve_private_link_service_id_operations.py index 6cdb62e23c4..299f800841f 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_resolve_private_link_service_id_operations.py @@ -28,7 +28,7 @@ class ResolvePrivateLinkServiceIdOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`resolve_private_link_service_id` attribute. """ @@ -59,10 +59,10 @@ async def post( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters required in order to resolve a private link service ID. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateLinkResource, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -73,7 +73,7 @@ async def post( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResource] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_snapshots_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_snapshots_operations.py index 7774f20edc4..d58df0d2434 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_snapshots_operations.py @@ -30,7 +30,7 @@ class SnapshotsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`snapshots` attribute. """ @@ -56,13 +56,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SnapshotListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] error_map = { @@ -140,13 +140,13 @@ def list_by_resource_group( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SnapshotListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] error_map = { @@ -228,7 +228,7 @@ async def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -239,7 +239,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -293,10 +293,10 @@ async def create_or_update( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: The snapshot to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -307,7 +307,7 @@ async def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -369,10 +369,10 @@ async def update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update snapshot Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -383,7 +383,7 @@ async def update_tags( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -452,7 +452,7 @@ async def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_role_bindings_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_role_bindings_operations.py index e1f0dc3dd2c..c4505b99753 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_role_bindings_operations.py @@ -30,7 +30,7 @@ class TrustedAccessRoleBindingsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`trusted_access_role_bindings` attribute. """ @@ -63,13 +63,13 @@ def list( :return: An iterator like instance of either TrustedAccessRoleBindingListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBindingListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBindingListResult] error_map = { @@ -156,7 +156,7 @@ async def get( :type trusted_access_role_binding_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: TrustedAccessRoleBinding, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -167,7 +167,7 @@ async def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] @@ -226,10 +226,10 @@ async def create_or_update( :type trusted_access_role_binding_name: str :param trusted_access_role_binding: A trusted access role binding. :type trusted_access_role_binding: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :keyword callable cls: A custom type or function that will be passed the direct response :return: TrustedAccessRoleBinding, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -240,7 +240,7 @@ async def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] @@ -313,7 +313,7 @@ async def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_roles_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_roles_operations.py index 762e95d442b..9f951e73930 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_trusted_access_roles_operations.py @@ -29,7 +29,7 @@ class TrustedAccessRolesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.aio.ContainerServiceClient`'s :attr:`trusted_access_roles` attribute. """ @@ -59,13 +59,13 @@ def list( :return: An iterator like instance of either TrustedAccessRoleListResult or the result of cls(response) :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleListResult] + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleListResult] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py index ed73aaf1cee..71cc173f171 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py @@ -53,6 +53,8 @@ from ._models_py3 import ManagedClusterAgentPoolProfile from ._models_py3 import ManagedClusterAgentPoolProfileProperties from ._models_py3 import ManagedClusterAutoUpgradeProfile +from ._models_py3 import ManagedClusterAzureMonitorMetricsProfile +from ._models_py3 import ManagedClusterAzureMonitorMetricsProfileMetrics from ._models_py3 import ManagedClusterHTTPProxyConfig from ._models_py3 import ManagedClusterIdentity from ._models_py3 import ManagedClusterIngressProfile @@ -93,6 +95,7 @@ from ._models_py3 import ManagedClusterWindowsProfile from ._models_py3 import ManagedClusterWorkloadAutoScalerProfile from ._models_py3 import ManagedClusterWorkloadAutoScalerProfileKeda +from ._models_py3 import ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler from ._models_py3 import ManagedServiceIdentityUserAssignedIdentitiesValue from ._models_py3 import NetworkProfileForSnapshot from ._models_py3 import OSOptionProfile @@ -137,6 +140,7 @@ ConnectionStatus, ContainerServiceStorageProfileTypes, ContainerServiceVMSizeTypes, + ControlledValues, Count, CreatedByType, Expander, @@ -169,6 +173,7 @@ ScaleSetPriority, SnapshotType, TrustedAccessRoleBindingProvisioningState, + UpdateMode, UpgradeChannel, WeekDay, WorkloadRuntime, @@ -224,6 +229,8 @@ 'ManagedClusterAgentPoolProfile', 'ManagedClusterAgentPoolProfileProperties', 'ManagedClusterAutoUpgradeProfile', + 'ManagedClusterAzureMonitorMetricsProfile', + 'ManagedClusterAzureMonitorMetricsProfileMetrics', 'ManagedClusterHTTPProxyConfig', 'ManagedClusterIdentity', 'ManagedClusterIngressProfile', @@ -264,6 +271,7 @@ 'ManagedClusterWindowsProfile', 'ManagedClusterWorkloadAutoScalerProfile', 'ManagedClusterWorkloadAutoScalerProfileKeda', + 'ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler', 'ManagedServiceIdentityUserAssignedIdentitiesValue', 'NetworkProfileForSnapshot', 'OSOptionProfile', @@ -305,6 +313,7 @@ 'ConnectionStatus', 'ContainerServiceStorageProfileTypes', 'ContainerServiceVMSizeTypes', + 'ControlledValues', 'Count', 'CreatedByType', 'Expander', @@ -337,6 +346,7 @@ 'ScaleSetPriority', 'SnapshotType', 'TrustedAccessRoleBindingProvisioningState', + 'UpdateMode', 'UpgradeChannel', 'WeekDay', 'WorkloadRuntime', diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py similarity index 95% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py index bf773613491..057ed9ee143 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py @@ -237,6 +237,15 @@ class ContainerServiceVMSizeTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): STANDARD_NV24 = "Standard_NV24" STANDARD_NV6 = "Standard_NV6" +class ControlledValues(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Controls which resource value autoscaler will change. Default value is RequestsAndLimits. + """ + + #: Autoscaler will control resource requests and limits. + REQUESTS_AND_LIMITS = "RequestsAndLimits" + #: Autoscaler will control resource requests only. + REQUESTS_ONLY = "RequestsOnly" + class Count(int, Enum, metaclass=CaseInsensitiveEnumMeta): """Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1. @@ -587,6 +596,25 @@ class TrustedAccessRoleBindingProvisioningState(str, Enum, metaclass=CaseInsensi UPDATING = "Updating" DELETING = "Deleting" +class UpdateMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Each update mode level is a superset of the lower levels. Off`_. diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py similarity index 92% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py index 519a0d572f2..ca225df9c98 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py @@ -85,15 +85,15 @@ class AgentPool(SubResource): `_. Known values are: "Managed", "Ephemeral". :vartype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :vartype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :ivar workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :vartype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -112,12 +112,12 @@ class AgentPool(SubResource): :vartype max_pods: int :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :ivar max_count: The maximum number of nodes for auto-scaling. :vartype max_count: int :ivar min_count: The minimum number of nodes for auto-scaling. @@ -127,15 +127,15 @@ class AgentPool(SubResource): :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :vartype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :ivar type_properties_type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". :vartype type_properties_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :vartype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :ivar orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -154,14 +154,14 @@ class AgentPool(SubResource): :vartype node_image_version: str :ivar upgrade_settings: Settings for upgrading the agentpool. :vartype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :ivar provisioning_state: The current deployment or provisioning state. :vartype provisioning_state: str :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :vartype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :ivar availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :vartype availability_zones: list[str] @@ -182,12 +182,12 @@ class AgentPool(SubResource): :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :vartype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :vartype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -203,9 +203,9 @@ class AgentPool(SubResource): :ivar proximity_placement_group_id: The ID for Proximity Placement Group. :vartype proximity_placement_group_id: str :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. - :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :ivar linux_os_config: The OS configuration of Linux agent nodes. - :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -219,10 +219,10 @@ class AgentPool(SubResource): :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :vartype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :vartype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :vartype capacity_reservation_group_id: str @@ -358,15 +358,15 @@ def __init__( `_. Known values are: "Managed", "Ephemeral". :paramtype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :paramtype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :keyword workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :paramtype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -385,12 +385,12 @@ def __init__( :paramtype max_pods: int :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :keyword max_count: The maximum number of nodes for auto-scaling. :paramtype max_count: int :keyword min_count: The minimum number of nodes for auto-scaling. @@ -400,15 +400,15 @@ def __init__( :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :paramtype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :keyword type_properties_type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". :paramtype type_properties_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :keyword orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -421,12 +421,12 @@ def __init__( :paramtype orchestrator_version: str :keyword upgrade_settings: Settings for upgrading the agentpool. :paramtype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :paramtype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :keyword availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :paramtype availability_zones: list[str] @@ -447,12 +447,12 @@ def __init__( :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :paramtype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :paramtype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -469,10 +469,10 @@ def __init__( :paramtype proximity_placement_group_id: str :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. :paramtype kubelet_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :keyword linux_os_config: The OS configuration of Linux agent nodes. :paramtype linux_os_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -487,10 +487,10 @@ def __init__( profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :paramtype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :paramtype capacity_reservation_group_id: str @@ -560,7 +560,7 @@ class AgentPoolAvailableVersions(msrest.serialization.Model): :vartype type: str :ivar agent_pool_versions: List of versions available for agent pool. :vartype agent_pool_versions: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] """ _validation = { @@ -585,7 +585,7 @@ def __init__( """ :keyword agent_pool_versions: List of versions available for agent pool. :paramtype agent_pool_versions: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] """ super(AgentPoolAvailableVersions, self).__init__(**kwargs) self.id = None @@ -639,7 +639,7 @@ class AgentPoolListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: The list of agent pools. - :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :vartype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] :ivar next_link: The URL to get the next set of agent pool results. :vartype next_link: str """ @@ -661,7 +661,7 @@ def __init__( ): """ :keyword value: The list of agent pools. - :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :paramtype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] """ super(AgentPoolListResult, self).__init__(**kwargs) self.value = value @@ -685,10 +685,10 @@ class AgentPoolUpgradeProfile(msrest.serialization.Model): :vartype kubernetes_version: str :ivar os_type: Required. The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :ivar upgrades: List of orchestrator types and versions available for upgrade. :vartype upgrades: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] :ivar latest_node_image_version: The latest AKS supported node image version. :vartype latest_node_image_version: str """ @@ -725,10 +725,10 @@ def __init__( :paramtype kubernetes_version: str :keyword os_type: Required. The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :keyword upgrades: List of orchestrator types and versions available for upgrade. :paramtype upgrades: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] :keyword latest_node_image_version: The latest AKS supported node image version. :paramtype latest_node_image_version: str """ @@ -822,7 +822,7 @@ class Resource(msrest.serialization.Model): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData """ _validation = { @@ -867,7 +867,7 @@ class AzureEntityResource(Resource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar etag: Resource Etag. :vartype etag: str """ @@ -914,7 +914,7 @@ class AzureKeyVaultKms(msrest.serialization.Model): ``Private`` means the key vault disables public access and enables private link. The default value is ``Public``. Known values are: "Public", "Private". Default value: "Public". :vartype key_vault_network_access: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KeyVaultNetworkAccessTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KeyVaultNetworkAccessTypes :ivar key_vault_resource_id: Resource ID of key vault. When keyVaultNetworkAccess is ``Private``\ , this field is required and must be a valid resource ID. When keyVaultNetworkAccess is ``Public``\ , leave the field empty. @@ -952,7 +952,7 @@ def __init__( networks. ``Private`` means the key vault disables public access and enables private link. The default value is ``Public``. Known values are: "Public", "Private". Default value: "Public". :paramtype key_vault_network_access: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KeyVaultNetworkAccessTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KeyVaultNetworkAccessTypes :keyword key_vault_resource_id: Resource ID of key vault. When keyVaultNetworkAccess is ``Private``\ , this field is required and must be a valid resource ID. When keyVaultNetworkAccess is ``Public``\ , leave the field empty. @@ -978,7 +978,7 @@ class CloudErrorBody(msrest.serialization.Model): error. :vartype target: str :ivar details: A list of additional details about the error. - :vartype details: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CloudErrorBody] + :vartype details: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.CloudErrorBody] """ _attribute_map = { @@ -1009,7 +1009,7 @@ def __init__( :paramtype target: str :keyword details: A list of additional details about the error. :paramtype details: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CloudErrorBody] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.CloudErrorBody] """ super(CloudErrorBody, self).__init__(**kwargs) self.code = code @@ -1025,7 +1025,7 @@ class ContainerServiceDiagnosticsProfile(msrest.serialization.Model): :ivar vm_diagnostics: Required. Profile for diagnostics on the container service VMs. :vartype vm_diagnostics: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMDiagnostics + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceVMDiagnostics """ _validation = { @@ -1045,7 +1045,7 @@ def __init__( """ :keyword vm_diagnostics: Required. Profile for diagnostics on the container service VMs. :paramtype vm_diagnostics: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMDiagnostics + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceVMDiagnostics """ super(ContainerServiceDiagnosticsProfile, self).__init__(**kwargs) self.vm_diagnostics = vm_diagnostics @@ -1060,7 +1060,7 @@ class ContainerServiceLinuxProfile(msrest.serialization.Model): :vartype admin_username: str :ivar ssh: Required. The SSH configuration for Linux-based VMs running on Azure. :vartype ssh: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshConfiguration + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceSshConfiguration """ _validation = { @@ -1085,7 +1085,7 @@ def __init__( :paramtype admin_username: str :keyword ssh: Required. The SSH configuration for Linux-based VMs running on Azure. :paramtype ssh: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshConfiguration + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceSshConfiguration """ super(ContainerServiceLinuxProfile, self).__init__(**kwargs) self.admin_username = admin_username @@ -1101,7 +1101,7 @@ class ContainerServiceMasterProfile(msrest.serialization.Model): :ivar count: Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". - :vartype count: int or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Count + :vartype count: int or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Count :ivar dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. :vartype dns_prefix: str :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", @@ -1143,7 +1143,7 @@ class ContainerServiceMasterProfile(msrest.serialization.Model): "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". :vartype vm_size: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMSizeTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceVMSizeTypes :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified. @@ -1157,7 +1157,7 @@ class ContainerServiceMasterProfile(msrest.serialization.Model): StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". :vartype storage_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceStorageProfileTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceStorageProfileTypes :ivar fqdn: FQDN for the master pool. :vartype fqdn: str """ @@ -1195,7 +1195,7 @@ def __init__( """ :keyword count: Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". - :paramtype count: int or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Count + :paramtype count: int or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Count :keyword dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. :paramtype dns_prefix: str :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", @@ -1237,7 +1237,7 @@ def __init__( "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". :paramtype vm_size: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMSizeTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceVMSizeTypes :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine in this master/agent pool. If you specify 0, it will apply the default osDisk size according to the vmSize specified. @@ -1251,7 +1251,7 @@ def __init__( StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". :paramtype storage_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceStorageProfileTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceStorageProfileTypes """ super(ContainerServiceMasterProfile, self).__init__(**kwargs) self.count = count @@ -1270,19 +1270,19 @@ class ContainerServiceNetworkProfile(msrest.serialization.Model): :ivar network_plugin: Network plugin used for building the Kubernetes network. Known values are: "azure", "kubenet", "none". Default value: "kubenet". :vartype network_plugin: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPlugin :ivar network_plugin_mode: Network plugin mode used for building the Kubernetes network. Known values are: "Overlay". :vartype network_plugin_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPluginMode :ivar network_policy: Network policy used for building the Kubernetes network. Known values are: "calico", "azure". :vartype network_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPolicy :ivar network_mode: This cannot be specified if networkPlugin is anything other than 'azure'. Known values are: "transparent", "bridge". :vartype network_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkMode :ivar pod_cidr: A CIDR notation IP range from which to assign pod IPs when kubenet is used. :vartype pod_cidr: str :ivar service_cidr: A CIDR notation IP range from which to assign service cluster IPs. It must @@ -1300,18 +1300,18 @@ class ContainerServiceNetworkProfile(msrest.serialization.Model): "userDefinedRouting", "managedNATGateway", "userAssignedNATGateway". Default value: "loadBalancer". :vartype outbound_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OutboundType :ivar load_balancer_sku: The default is 'standard'. See `Azure Load Balancer SKUs `_ for more information about the differences between load balancer SKUs. Known values are: "standard", "basic". :vartype load_balancer_sku: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LoadBalancerSku :ivar load_balancer_profile: Profile of the cluster load balancer. :vartype load_balancer_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfile :ivar nat_gateway_profile: Profile of the cluster NAT gateway. :vartype nat_gateway_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterNATGatewayProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterNATGatewayProfile :ivar pod_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one for each IP family (IPv4/IPv6), is expected for dual-stack networking. :vartype pod_cidrs: list[str] @@ -1323,7 +1323,7 @@ class ContainerServiceNetworkProfile(msrest.serialization.Model): single-stack, the expected value is IPv4. For dual-stack, the expected values are IPv4 and IPv6. :vartype ip_families: list[str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.IpFamily] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.IpFamily] """ _validation = { @@ -1375,19 +1375,19 @@ def __init__( :keyword network_plugin: Network plugin used for building the Kubernetes network. Known values are: "azure", "kubenet", "none". Default value: "kubenet". :paramtype network_plugin: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPlugin :keyword network_plugin_mode: Network plugin mode used for building the Kubernetes network. Known values are: "Overlay". :paramtype network_plugin_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPluginMode :keyword network_policy: Network policy used for building the Kubernetes network. Known values are: "calico", "azure". :paramtype network_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkPolicy :keyword network_mode: This cannot be specified if networkPlugin is anything other than 'azure'. Known values are: "transparent", "bridge". :paramtype network_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkMode :keyword pod_cidr: A CIDR notation IP range from which to assign pod IPs when kubenet is used. :paramtype pod_cidr: str :keyword service_cidr: A CIDR notation IP range from which to assign service cluster IPs. It @@ -1405,18 +1405,18 @@ def __init__( "userDefinedRouting", "managedNATGateway", "userAssignedNATGateway". Default value: "loadBalancer". :paramtype outbound_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OutboundType :keyword load_balancer_sku: The default is 'standard'. See `Azure Load Balancer SKUs `_ for more information about the differences between load balancer SKUs. Known values are: "standard", "basic". :paramtype load_balancer_sku: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LoadBalancerSku :keyword load_balancer_profile: Profile of the cluster load balancer. :paramtype load_balancer_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfile :keyword nat_gateway_profile: Profile of the cluster NAT gateway. :paramtype nat_gateway_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterNATGatewayProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterNATGatewayProfile :keyword pod_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one for each IP family (IPv4/IPv6), is expected for dual-stack networking. :paramtype pod_cidrs: list[str] @@ -1428,7 +1428,7 @@ def __init__( For single-stack, the expected value is IPv4. For dual-stack, the expected values are IPv4 and IPv6. :paramtype ip_families: list[str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.IpFamily] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.IpFamily] """ super(ContainerServiceNetworkProfile, self).__init__(**kwargs) self.network_plugin = network_plugin @@ -1456,7 +1456,7 @@ class ContainerServiceSshConfiguration(msrest.serialization.Model): :ivar public_keys: Required. The list of SSH public keys used to authenticate with Linux-based VMs. A maximum of 1 key may be specified. :vartype public_keys: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshPublicKey] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceSshPublicKey] """ _validation = { @@ -1477,7 +1477,7 @@ def __init__( :keyword public_keys: Required. The list of SSH public keys used to authenticate with Linux-based VMs. A maximum of 1 key may be specified. :paramtype public_keys: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshPublicKey] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceSshPublicKey] """ super(ContainerServiceSshConfiguration, self).__init__(**kwargs) self.public_keys = public_keys @@ -1620,7 +1620,7 @@ class CredentialResults(msrest.serialization.Model): :ivar kubeconfigs: Base64-encoded Kubernetes configuration file. :vartype kubeconfigs: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResult] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResult] """ _validation = { @@ -1648,7 +1648,7 @@ class EndpointDependency(msrest.serialization.Model): :vartype domain_name: str :ivar endpoint_details: The Ports and Protocols used when connecting to domainName. :vartype endpoint_details: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDetail] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.EndpointDetail] """ _attribute_map = { @@ -1668,7 +1668,7 @@ def __init__( :paramtype domain_name: str :keyword endpoint_details: The Ports and Protocols used when connecting to domainName. :paramtype endpoint_details: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDetail] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.EndpointDetail] """ super(EndpointDependency, self).__init__(**kwargs) self.domain_name = domain_name @@ -1765,10 +1765,10 @@ class ErrorDetail(msrest.serialization.Model): :ivar target: The error target. :vartype target: str :ivar details: The error details. - :vartype details: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail] + :vartype details: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ErrorDetail] :ivar additional_info: The error additional info. :vartype additional_info: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorAdditionalInfo] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ErrorAdditionalInfo] """ _validation = { @@ -1805,7 +1805,7 @@ class ErrorResponse(msrest.serialization.Model): """Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.). :ivar error: The error object. - :vartype error: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail + :vartype error: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ErrorDetail """ _attribute_map = { @@ -1820,7 +1820,7 @@ def __init__( ): """ :keyword error: The error object. - :paramtype error: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail + :paramtype error: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ErrorDetail """ super(ErrorResponse, self).__init__(**kwargs) self.error = error @@ -1833,7 +1833,7 @@ class ExtendedLocation(msrest.serialization.Model): :vartype name: str :ivar type: The type of the extended location. Known values are: "EdgeZone". :vartype type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocationTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ExtendedLocationTypes """ _attribute_map = { @@ -1853,7 +1853,7 @@ def __init__( :paramtype name: str :keyword type: The type of the extended location. Known values are: "EdgeZone". :paramtype type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocationTypes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ExtendedLocationTypes """ super(ExtendedLocation, self).__init__(**kwargs) self.name = name @@ -1877,7 +1877,7 @@ class TrackedResource(Resource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar tags: A set of tags. Resource tags. :vartype tags: dict[str, str] :ivar location: Required. The geo-location where the resource lives. @@ -1936,7 +1936,7 @@ class Fleet(TrackedResource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar tags: A set of tags. Resource tags. :vartype tags: dict[str, str] :ivar location: Required. The geo-location where the resource lives. @@ -1944,11 +1944,11 @@ class Fleet(TrackedResource): :ivar etag: Resource Etag. :vartype etag: str :ivar hub_profile: The FleetHubProfile configures the Fleet's hub. - :vartype hub_profile: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetHubProfile + :vartype hub_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetHubProfile :ivar provisioning_state: The provisioning state of the last accepted operation. Known values are: "Succeeded", "Failed", "Canceled", "Creating", "Deleting", "Updating". :vartype provisioning_state: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetProvisioningState + ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetProvisioningState """ _validation = { @@ -1987,7 +1987,7 @@ def __init__( :keyword location: Required. The geo-location where the resource lives. :paramtype location: str :keyword hub_profile: The FleetHubProfile configures the Fleet's hub. - :paramtype hub_profile: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetHubProfile + :paramtype hub_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetHubProfile """ super(Fleet, self).__init__(tags=tags, location=location, **kwargs) self.etag = None @@ -2034,7 +2034,7 @@ class FleetCredentialResults(msrest.serialization.Model): :ivar kubeconfigs: Base64-encoded Kubernetes configuration file. :vartype kubeconfigs: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResult] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetCredentialResult] """ _validation = { @@ -2101,7 +2101,7 @@ class FleetListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: The list of Fleets. - :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + :vartype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet] :ivar next_link: The URL to get the next page of Fleets. :vartype next_link: str """ @@ -2123,7 +2123,7 @@ def __init__( ): """ :keyword value: The list of Fleets. - :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + :paramtype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet] """ super(FleetListResult, self).__init__(**kwargs) self.value = value @@ -2145,7 +2145,7 @@ class FleetMember(AzureEntityResource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar etag: Resource Etag. :vartype etag: str :ivar cluster_resource_id: The ARM resource id of the cluster that joins the Fleet. Must be a @@ -2155,7 +2155,7 @@ class FleetMember(AzureEntityResource): :ivar provisioning_state: The provisioning state of the last accepted operation. Known values are: "Succeeded", "Failed", "Canceled", "Joining", "Leaving", "Updating". :vartype provisioning_state: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMemberProvisioningState + ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMemberProvisioningState """ _validation = { @@ -2200,7 +2200,7 @@ class FleetMembersListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: The list of members in a given Fleet. - :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + :vartype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember] :ivar next_link: The URL to get the next page of Fleet members. :vartype next_link: str """ @@ -2222,7 +2222,7 @@ def __init__( ): """ :keyword value: The list of members in a given Fleet. - :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + :paramtype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember] """ super(FleetMembersListResult, self).__init__(**kwargs) self.value = value @@ -2381,7 +2381,7 @@ class LinuxOSConfig(msrest.serialization.Model): """See `AKS custom node configuration `_ for more details. :ivar sysctls: Sysctl settings for Linux agent nodes. - :vartype sysctls: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SysctlConfig + :vartype sysctls: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SysctlConfig :ivar transparent_huge_page_enabled: Valid values are 'always', 'madvise', and 'never'. The default is 'always'. For more information see `Transparent Hugepages `_. @@ -2413,7 +2413,7 @@ def __init__( ): """ :keyword sysctls: Sysctl settings for Linux agent nodes. - :paramtype sysctls: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SysctlConfig + :paramtype sysctls: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SysctlConfig :keyword transparent_huge_page_enabled: Valid values are 'always', 'madvise', and 'never'. The default is 'always'. For more information see `Transparent Hugepages `_. @@ -2446,13 +2446,13 @@ class MaintenanceConfiguration(SubResource): :ivar type: Resource type. :vartype type: str :ivar system_data: The system metadata relating to this resource. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar time_in_week: If two array entries specify the same day of the week, the applied configuration is the union of times in both entries. - :vartype time_in_week: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeInWeek] + :vartype time_in_week: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TimeInWeek] :ivar not_allowed_time: Time slots on which upgrade is not allowed. :vartype not_allowed_time: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeSpan] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TimeSpan] """ _validation = { @@ -2482,10 +2482,10 @@ def __init__( :keyword time_in_week: If two array entries specify the same day of the week, the applied configuration is the union of times in both entries. :paramtype time_in_week: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeInWeek] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TimeInWeek] :keyword not_allowed_time: Time slots on which upgrade is not allowed. :paramtype not_allowed_time: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeSpan] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TimeSpan] """ super(MaintenanceConfiguration, self).__init__(**kwargs) self.system_data = None @@ -2500,7 +2500,7 @@ class MaintenanceConfigurationListResult(msrest.serialization.Model): :ivar value: The list of maintenance configurations. :vartype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration] :ivar next_link: The URL to get the next set of maintenance configuration results. :vartype next_link: str """ @@ -2523,7 +2523,7 @@ def __init__( """ :keyword value: The list of maintenance configurations. :paramtype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration] """ super(MaintenanceConfigurationListResult, self).__init__(**kwargs) self.value = value @@ -2547,26 +2547,26 @@ class ManagedCluster(TrackedResource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar tags: A set of tags. Resource tags. :vartype tags: dict[str, str] :ivar location: Required. The geo-location where the resource lives. :vartype location: str :ivar sku: The managed cluster SKU. - :vartype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :vartype sku: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKU :ivar extended_location: The extended location of the Virtual Machine. :vartype extended_location: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocation + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ExtendedLocation :ivar identity: The identity of the managed cluster, if configured. :vartype identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIdentity :ivar provisioning_state: The current provisioning state. :vartype provisioning_state: str :ivar power_state: The Power State of the cluster. - :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :vartype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the cluster will be created/upgraded using a snapshot. - :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :vartype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :ivar max_agent_pools: The max number of agent pools for the managed cluster. :vartype max_agent_pools: int :ivar kubernetes_version: When you upgrade a supported AKS cluster, Kubernetes minor versions @@ -2591,28 +2591,28 @@ class ManagedCluster(TrackedResource): :vartype azure_portal_fqdn: str :ivar agent_pool_profiles: The agent pool properties. :vartype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAgentPoolProfile] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAgentPoolProfile] :ivar linux_profile: The profile for Linux VMs in the Managed Cluster. :vartype linux_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceLinuxProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceLinuxProfile :ivar windows_profile: The profile for Windows VMs in the Managed Cluster. :vartype windows_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWindowsProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWindowsProfile :ivar service_principal_profile: Information about a service principal identity for the cluster to use for manipulating Azure APIs. :vartype service_principal_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterServicePrincipalProfile :ivar addon_profiles: The profile of managed cluster add-on. :vartype addon_profiles: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfile] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAddonProfile] :ivar pod_identity_profile: See `use AAD pod identity `_ for more details on AAD pod identity integration. :vartype pod_identity_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProfile :ivar oidc_issuer_profile: The OIDC issuer profile of the Managed Cluster. :vartype oidc_issuer_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterOIDCIssuerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterOIDCIssuerProfile :ivar node_resource_group: The name of the resource group containing agent pool nodes. :vartype node_resource_group: str :ivar enable_rbac: Whether to enable Kubernetes Role-Based Access Control. @@ -2627,28 +2627,28 @@ class ManagedCluster(TrackedResource): :vartype enable_namespace_resources: bool :ivar network_profile: The network configuration profile. :vartype network_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceNetworkProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceNetworkProfile :ivar aad_profile: The Azure Active Directory configuration. :vartype aad_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAADProfile :ivar auto_upgrade_profile: The auto upgrade configuration. :vartype auto_upgrade_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAutoUpgradeProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAutoUpgradeProfile :ivar auto_scaler_profile: Parameters to be applied to the cluster-autoscaler when enabled. :vartype auto_scaler_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesAutoScalerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPropertiesAutoScalerProfile :ivar api_server_access_profile: The access profile for managed cluster API server. :vartype api_server_access_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAPIServerAccessProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAPIServerAccessProfile :ivar disk_encryption_set_id: This is of the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{encryptionSetName}'. :vartype disk_encryption_set_id: str :ivar identity_profile: Identities associated with the cluster. :vartype identity_profile: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.UserAssignedIdentity] :ivar private_link_resources: Private link resources associated with the cluster. :vartype private_link_resources: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource] :ivar disable_local_accounts: If set to true, getting static credentials will be disabled for this cluster. This must only be used on Managed Clusters that are AAD enabled. For more details see `disable local accounts @@ -2656,24 +2656,28 @@ class ManagedCluster(TrackedResource): :vartype disable_local_accounts: bool :ivar http_proxy_config: Configurations for provisioning the cluster with HTTP proxy servers. :vartype http_proxy_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterHTTPProxyConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterHTTPProxyConfig :ivar security_profile: Security profile for the managed cluster. :vartype security_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfile :ivar storage_profile: Storage profile for the managed cluster. :vartype storage_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfile :ivar ingress_profile: Ingress profile for the managed cluster. :vartype ingress_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfile :ivar public_network_access: Allow or deny public network access for AKS. Known values are: "Enabled", "Disabled". :vartype public_network_access: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PublicNetworkAccess + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PublicNetworkAccess :ivar workload_auto_scaler_profile: Workload Auto-scaler profile for the container service cluster. :vartype workload_auto_scaler_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + :ivar azure_monitor_metrics_profile: Prometheus addon profile for the container service + cluster. + :vartype azure_monitor_metrics_profile: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfile """ _validation = { @@ -2738,6 +2742,7 @@ class ManagedCluster(TrackedResource): 'ingress_profile': {'key': 'properties.ingressProfile', 'type': 'ManagedClusterIngressProfile'}, 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, 'workload_auto_scaler_profile': {'key': 'properties.workloadAutoScalerProfile', 'type': 'ManagedClusterWorkloadAutoScalerProfile'}, + 'azure_monitor_metrics_profile': {'key': 'properties.azureMonitorMetricsProfile', 'type': 'ManagedClusterAzureMonitorMetricsProfile'}, } def __init__( @@ -2778,6 +2783,7 @@ def __init__( ingress_profile: Optional["_models.ManagedClusterIngressProfile"] = None, public_network_access: Optional[Union[str, "_models.PublicNetworkAccess"]] = None, workload_auto_scaler_profile: Optional["_models.ManagedClusterWorkloadAutoScalerProfile"] = None, + azure_monitor_metrics_profile: Optional["_models.ManagedClusterAzureMonitorMetricsProfile"] = None, **kwargs ): """ @@ -2786,16 +2792,16 @@ def __init__( :keyword location: Required. The geo-location where the resource lives. :paramtype location: str :keyword sku: The managed cluster SKU. - :paramtype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :paramtype sku: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKU :keyword extended_location: The extended location of the Virtual Machine. :paramtype extended_location: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocation + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ExtendedLocation :keyword identity: The identity of the managed cluster, if configured. :paramtype identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIdentity :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the cluster will be created/upgraded using a snapshot. - :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :keyword kubernetes_version: When you upgrade a supported AKS cluster, Kubernetes minor versions cannot be skipped. All upgrades must be performed sequentially by major version number. For example, upgrades between 1.14.x -> 1.15.x or 1.15.x -> 1.16.x are allowed, however @@ -2808,28 +2814,28 @@ def __init__( :paramtype fqdn_subdomain: str :keyword agent_pool_profiles: The agent pool properties. :paramtype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAgentPoolProfile] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAgentPoolProfile] :keyword linux_profile: The profile for Linux VMs in the Managed Cluster. :paramtype linux_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceLinuxProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceLinuxProfile :keyword windows_profile: The profile for Windows VMs in the Managed Cluster. :paramtype windows_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWindowsProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWindowsProfile :keyword service_principal_profile: Information about a service principal identity for the cluster to use for manipulating Azure APIs. :paramtype service_principal_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterServicePrincipalProfile :keyword addon_profiles: The profile of managed cluster add-on. :paramtype addon_profiles: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfile] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAddonProfile] :keyword pod_identity_profile: See `use AAD pod identity `_ for more details on AAD pod identity integration. :paramtype pod_identity_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProfile :keyword oidc_issuer_profile: The OIDC issuer profile of the Managed Cluster. :paramtype oidc_issuer_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterOIDCIssuerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterOIDCIssuerProfile :keyword node_resource_group: The name of the resource group containing agent pool nodes. :paramtype node_resource_group: str :keyword enable_rbac: Whether to enable Kubernetes Role-Based Access Control. @@ -2844,28 +2850,28 @@ def __init__( :paramtype enable_namespace_resources: bool :keyword network_profile: The network configuration profile. :paramtype network_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceNetworkProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ContainerServiceNetworkProfile :keyword aad_profile: The Azure Active Directory configuration. :paramtype aad_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAADProfile :keyword auto_upgrade_profile: The auto upgrade configuration. :paramtype auto_upgrade_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAutoUpgradeProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAutoUpgradeProfile :keyword auto_scaler_profile: Parameters to be applied to the cluster-autoscaler when enabled. :paramtype auto_scaler_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesAutoScalerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPropertiesAutoScalerProfile :keyword api_server_access_profile: The access profile for managed cluster API server. :paramtype api_server_access_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAPIServerAccessProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAPIServerAccessProfile :keyword disk_encryption_set_id: This is of the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{encryptionSetName}'. :paramtype disk_encryption_set_id: str :keyword identity_profile: Identities associated with the cluster. :paramtype identity_profile: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.UserAssignedIdentity] :keyword private_link_resources: Private link resources associated with the cluster. :paramtype private_link_resources: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource] :keyword disable_local_accounts: If set to true, getting static credentials will be disabled for this cluster. This must only be used on Managed Clusters that are AAD enabled. For more details see `disable local accounts @@ -2874,24 +2880,28 @@ def __init__( :keyword http_proxy_config: Configurations for provisioning the cluster with HTTP proxy servers. :paramtype http_proxy_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterHTTPProxyConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterHTTPProxyConfig :keyword security_profile: Security profile for the managed cluster. :paramtype security_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfile :keyword storage_profile: Storage profile for the managed cluster. :paramtype storage_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfile :keyword ingress_profile: Ingress profile for the managed cluster. :paramtype ingress_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfile :keyword public_network_access: Allow or deny public network access for AKS. Known values are: "Enabled", "Disabled". :paramtype public_network_access: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PublicNetworkAccess + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PublicNetworkAccess :keyword workload_auto_scaler_profile: Workload Auto-scaler profile for the container service cluster. :paramtype workload_auto_scaler_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + :keyword azure_monitor_metrics_profile: Prometheus addon profile for the container service + cluster. + :paramtype azure_monitor_metrics_profile: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfile """ super(ManagedCluster, self).__init__(tags=tags, location=location, **kwargs) self.sku = sku @@ -2934,6 +2944,7 @@ def __init__( self.ingress_profile = ingress_profile self.public_network_access = public_network_access self.workload_auto_scaler_profile = workload_auto_scaler_profile + self.azure_monitor_metrics_profile = azure_monitor_metrics_profile class ManagedClusterAADProfile(msrest.serialization.Model): @@ -3024,7 +3035,7 @@ class ManagedClusterAccessProfile(TrackedResource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar tags: A set of tags. Resource tags. :vartype tags: dict[str, str] :ivar location: Required. The geo-location where the resource lives. @@ -3084,7 +3095,7 @@ class ManagedClusterAddonProfile(msrest.serialization.Model): :vartype config: dict[str, str] :ivar identity: Information of user assigned identity used by this add-on. :vartype identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfileIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAddonProfileIdentity """ _validation = { @@ -3215,15 +3226,15 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): `_. Known values are: "Managed", "Ephemeral". :vartype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :vartype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :ivar workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :vartype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -3242,12 +3253,12 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :vartype max_pods: int :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :ivar max_count: The maximum number of nodes for auto-scaling. :vartype max_count: int :ivar min_count: The minimum number of nodes for auto-scaling. @@ -3257,14 +3268,14 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :vartype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :ivar type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". - :vartype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :vartype type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :vartype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :ivar orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -3283,14 +3294,14 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :vartype node_image_version: str :ivar upgrade_settings: Settings for upgrading the agentpool. :vartype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :ivar provisioning_state: The current deployment or provisioning state. :vartype provisioning_state: str :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :vartype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :ivar availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :vartype availability_zones: list[str] @@ -3311,12 +3322,12 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :vartype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :vartype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -3332,9 +3343,9 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :ivar proximity_placement_group_id: The ID for Proximity Placement Group. :vartype proximity_placement_group_id: str :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. - :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :ivar linux_os_config: The OS configuration of Linux agent nodes. - :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -3348,10 +3359,10 @@ class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :vartype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :vartype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :vartype capacity_reservation_group_id: str @@ -3481,15 +3492,15 @@ def __init__( `_. Known values are: "Managed", "Ephemeral". :paramtype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :paramtype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :keyword workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :paramtype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -3508,12 +3519,12 @@ def __init__( :paramtype max_pods: int :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :keyword max_count: The maximum number of nodes for auto-scaling. :paramtype max_count: int :keyword min_count: The minimum number of nodes for auto-scaling. @@ -3523,14 +3534,14 @@ def __init__( :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :paramtype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :keyword type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". - :paramtype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :paramtype type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :keyword orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -3543,12 +3554,12 @@ def __init__( :paramtype orchestrator_version: str :keyword upgrade_settings: Settings for upgrading the agentpool. :paramtype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :paramtype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :keyword availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :paramtype availability_zones: list[str] @@ -3569,12 +3580,12 @@ def __init__( :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :paramtype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :paramtype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -3591,10 +3602,10 @@ def __init__( :paramtype proximity_placement_group_id: str :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. :paramtype kubelet_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :keyword linux_os_config: The OS configuration of Linux agent nodes. :paramtype linux_os_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -3609,10 +3620,10 @@ def __init__( profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :paramtype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :paramtype capacity_reservation_group_id: str @@ -3694,15 +3705,15 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): `_. Known values are: "Managed", "Ephemeral". :vartype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :vartype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :ivar workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :vartype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -3721,12 +3732,12 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :vartype max_pods: int :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :ivar max_count: The maximum number of nodes for auto-scaling. :vartype max_count: int :ivar min_count: The minimum number of nodes for auto-scaling. @@ -3736,14 +3747,14 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :vartype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :ivar type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". - :vartype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :vartype type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :vartype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :ivar orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -3762,14 +3773,14 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :vartype node_image_version: str :ivar upgrade_settings: Settings for upgrading the agentpool. :vartype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :ivar provisioning_state: The current deployment or provisioning state. :vartype provisioning_state: str :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :vartype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :ivar availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :vartype availability_zones: list[str] @@ -3790,12 +3801,12 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :vartype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :vartype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -3811,9 +3822,9 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :ivar proximity_placement_group_id: The ID for Proximity Placement Group. :vartype proximity_placement_group_id: str :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. - :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :ivar linux_os_config: The OS configuration of Linux agent nodes. - :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -3827,10 +3838,10 @@ class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :vartype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :vartype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :vartype capacity_reservation_group_id: str @@ -3965,15 +3976,15 @@ def __init__( `_. Known values are: "Managed", "Ephemeral". :paramtype os_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSDiskType :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". :paramtype kubelet_disk_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletDiskType :keyword workload_runtime: Determines the type of workload a node can run. Known values are: "OCIContainer", "WasmWasi". :paramtype workload_runtime: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WorkloadRuntime :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after decoding. This allows customization of the message of the day for Linux nodes. It must not be specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be @@ -3992,12 +4003,12 @@ def __init__( :paramtype max_pods: int :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", "CBLMariner", "Windows2019", "Windows2022". - :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSSKU :keyword max_count: The maximum number of nodes for auto-scaling. :paramtype max_count: int :keyword min_count: The minimum number of nodes for auto-scaling. @@ -4007,14 +4018,14 @@ def __init__( :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it defaults to Delete. Known values are: "Delete", "Deallocate". :paramtype scale_down_mode: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleDownMode :keyword type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", "AvailabilitySet". - :paramtype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :paramtype type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolType :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For additional information on agent pool restrictions and best practices, see: https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". - :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolMode :keyword orchestrator_version: Both patch version and are supported. When is specified, the latest supported patch version is chosen automatically. Updating the agent pool with the same once it has been created @@ -4027,12 +4038,12 @@ def __init__( :paramtype orchestrator_version: str :keyword upgrade_settings: Settings for upgrading the agentpool. :paramtype upgrade_settings: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeSettings :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and provisioning state is Succeeded. - :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :paramtype power_state: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PowerState :keyword availability_zones: The list of Availability zones to use for nodes. This can only be specified if the AgentPoolType property is 'VirtualMachineScaleSets'. :paramtype availability_zones: list[str] @@ -4053,12 +4064,12 @@ def __init__( :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". :paramtype scale_set_priority: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetPriority :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". Default value: "Delete". :paramtype scale_set_eviction_policy: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ScaleSetEvictionPolicy :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which indicates the willingness to pay any on-demand price. For more details on spot pricing, see `spot VMs pricing `_. @@ -4075,10 +4086,10 @@ def __init__( :paramtype proximity_placement_group_id: str :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. :paramtype kubelet_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.KubeletConfig :keyword linux_os_config: The OS configuration of Linux agent nodes. :paramtype linux_os_config: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LinuxOSConfig :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain Azure regions. For more information, see: https://docs.microsoft.com/azure/aks/enable-host-encryption. @@ -4093,10 +4104,10 @@ def __init__( profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". :paramtype gpu_instance_profile: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.GPUInstanceProfile :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node pool will be created/upgraded using a snapshot. - :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the Capacity Reservation Group. :paramtype capacity_reservation_group_id: str @@ -4204,7 +4215,7 @@ class ManagedClusterAutoUpgradeProfile(msrest.serialization.Model): `_. Known values are: "rapid", "stable", "patch", "node-image", "none". :vartype upgrade_channel: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.UpgradeChannel + ~azure.mgmt.containerservice.v2022_07_02_preview.models.UpgradeChannel """ _attribute_map = { @@ -4222,12 +4233,88 @@ def __init__( channel `_. Known values are: "rapid", "stable", "patch", "node-image", "none". :paramtype upgrade_channel: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.UpgradeChannel + ~azure.mgmt.containerservice.v2022_07_02_preview.models.UpgradeChannel """ super(ManagedClusterAutoUpgradeProfile, self).__init__(**kwargs) self.upgrade_channel = upgrade_channel +class ManagedClusterAzureMonitorMetricsProfile(msrest.serialization.Model): + """Prometheus addon profile for the container service cluster. + + :ivar metrics: Metrics profile for the Prometheus service addon. + :vartype metrics: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfileMetrics + """ + + _attribute_map = { + 'metrics': {'key': 'Metrics', 'type': 'ManagedClusterAzureMonitorMetricsProfileMetrics'}, + } + + def __init__( + self, + *, + metrics: Optional["_models.ManagedClusterAzureMonitorMetricsProfileMetrics"] = None, + **kwargs + ): + """ + :keyword metrics: Metrics profile for the Prometheus service addon. + :paramtype metrics: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfileMetrics + """ + super(ManagedClusterAzureMonitorMetricsProfile, self).__init__(**kwargs) + self.metrics = metrics + + +class ManagedClusterAzureMonitorMetricsProfileMetrics(msrest.serialization.Model): + """Metrics profile for the Prometheus service addon. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether to enable the Prometheus collector. + :vartype enabled: bool + :ivar metric_labels_allowlist: Comma-separated list of Kubernetes annotations keys that will be + used in the resource's labels metric. + :vartype metric_labels_allowlist: str + :ivar metric_annotations_allow_list: Comma-separated list of additional Kubernetes label keys + that will be used in the resource's labels metric. + :vartype metric_annotations_allow_list: str + """ + + _validation = { + 'enabled': {'required': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'metric_labels_allowlist': {'key': 'metricLabelsAllowlist', 'type': 'str'}, + 'metric_annotations_allow_list': {'key': 'metricAnnotationsAllowList', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: bool, + metric_labels_allowlist: Optional[str] = None, + metric_annotations_allow_list: Optional[str] = None, + **kwargs + ): + """ + :keyword enabled: Required. Whether to enable the Prometheus collector. + :paramtype enabled: bool + :keyword metric_labels_allowlist: Comma-separated list of Kubernetes annotations keys that will + be used in the resource's labels metric. + :paramtype metric_labels_allowlist: str + :keyword metric_annotations_allow_list: Comma-separated list of additional Kubernetes label + keys that will be used in the resource's labels metric. + :paramtype metric_annotations_allow_list: str + """ + super(ManagedClusterAzureMonitorMetricsProfileMetrics, self).__init__(**kwargs) + self.enabled = enabled + self.metric_labels_allowlist = metric_labels_allowlist + self.metric_annotations_allow_list = metric_annotations_allow_list + + class ManagedClusterHTTPProxyConfig(msrest.serialization.Model): """Cluster HTTP proxy configuration. @@ -4300,11 +4387,11 @@ class ManagedClusterIdentity(msrest.serialization.Model): `_. Known values are: "SystemAssigned", "UserAssigned", "None". :vartype type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceIdentityType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceIdentityType :ivar user_assigned_identities: The keys must be ARM resource IDs in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :vartype user_assigned_identities: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] """ _validation = { @@ -4331,11 +4418,11 @@ def __init__( `_. Known values are: "SystemAssigned", "UserAssigned", "None". :paramtype type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceIdentityType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceIdentityType :keyword user_assigned_identities: The keys must be ARM resource IDs in the form: '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. :paramtype user_assigned_identities: dict[str, - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] """ super(ManagedClusterIdentity, self).__init__(**kwargs) self.principal_id = None @@ -4349,7 +4436,7 @@ class ManagedClusterIngressProfile(msrest.serialization.Model): :ivar web_app_routing: Web App Routing settings for the ingress profile. :vartype web_app_routing: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfileWebAppRouting + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfileWebAppRouting """ _attribute_map = { @@ -4365,7 +4452,7 @@ def __init__( """ :keyword web_app_routing: Web App Routing settings for the ingress profile. :paramtype web_app_routing: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfileWebAppRouting + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfileWebAppRouting """ super(ManagedClusterIngressProfile, self).__init__(**kwargs) self.web_app_routing = web_app_routing @@ -4411,7 +4498,7 @@ class ManagedClusterListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: The list of managed clusters. - :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :vartype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] :ivar next_link: The URL to get the next set of managed cluster results. :vartype next_link: str """ @@ -4433,7 +4520,7 @@ def __init__( ): """ :keyword value: The list of managed clusters. - :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :paramtype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] """ super(ManagedClusterListResult, self).__init__(**kwargs) self.value = value @@ -4445,17 +4532,17 @@ class ManagedClusterLoadBalancerProfile(msrest.serialization.Model): :ivar managed_outbound_i_ps: Desired managed outbound IPs for the cluster load balancer. :vartype managed_outbound_i_ps: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs :ivar outbound_ip_prefixes: Desired outbound IP Prefix resources for the cluster load balancer. :vartype outbound_ip_prefixes: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes :ivar outbound_i_ps: Desired outbound IP resources for the cluster load balancer. :vartype outbound_i_ps: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs :ivar effective_outbound_i_ps: The effective outbound IP resources of the cluster load balancer. :vartype effective_outbound_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] :ivar allocated_outbound_ports: The desired number of allocated SNAT ports per VM. Allowed values are in the range of 0 to 64000 (inclusive). The default value is 0 which results in Azure dynamically allocating ports. @@ -4498,18 +4585,18 @@ def __init__( """ :keyword managed_outbound_i_ps: Desired managed outbound IPs for the cluster load balancer. :paramtype managed_outbound_i_ps: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs :keyword outbound_ip_prefixes: Desired outbound IP Prefix resources for the cluster load balancer. :paramtype outbound_ip_prefixes: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes :keyword outbound_i_ps: Desired outbound IP resources for the cluster load balancer. :paramtype outbound_i_ps: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs :keyword effective_outbound_i_ps: The effective outbound IP resources of the cluster load balancer. :paramtype effective_outbound_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] :keyword allocated_outbound_ports: The desired number of allocated SNAT ports per VM. Allowed values are in the range of 0 to 64000 (inclusive). The default value is 0 which results in Azure dynamically allocating ports. @@ -4581,7 +4668,7 @@ class ManagedClusterLoadBalancerProfileOutboundIPPrefixes(msrest.serialization.M :ivar public_ip_prefixes: A list of public IP prefix resources. :vartype public_ip_prefixes: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] """ _attribute_map = { @@ -4597,7 +4684,7 @@ def __init__( """ :keyword public_ip_prefixes: A list of public IP prefix resources. :paramtype public_ip_prefixes: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] """ super(ManagedClusterLoadBalancerProfileOutboundIPPrefixes, self).__init__(**kwargs) self.public_ip_prefixes = public_ip_prefixes @@ -4608,7 +4695,7 @@ class ManagedClusterLoadBalancerProfileOutboundIPs(msrest.serialization.Model): :ivar public_i_ps: A list of public IP resources. :vartype public_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] """ _attribute_map = { @@ -4624,7 +4711,7 @@ def __init__( """ :keyword public_i_ps: A list of public IP resources. :paramtype public_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] """ super(ManagedClusterLoadBalancerProfileOutboundIPs, self).__init__(**kwargs) self.public_i_ps = public_i_ps @@ -4667,10 +4754,10 @@ class ManagedClusterNATGatewayProfile(msrest.serialization.Model): :ivar managed_outbound_ip_profile: Profile of the managed outbound IP resources of the cluster NAT gateway. :vartype managed_outbound_ip_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterManagedOutboundIPProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterManagedOutboundIPProfile :ivar effective_outbound_i_ps: The effective outbound IP resources of the cluster NAT gateway. :vartype effective_outbound_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] :ivar idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values are in the range of 4 to 120 (inclusive). The default value is 4 minutes. :vartype idle_timeout_in_minutes: int @@ -4698,11 +4785,11 @@ def __init__( :keyword managed_outbound_ip_profile: Profile of the managed outbound IP resources of the cluster NAT gateway. :paramtype managed_outbound_ip_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterManagedOutboundIPProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterManagedOutboundIPProfile :keyword effective_outbound_i_ps: The effective outbound IP resources of the cluster NAT gateway. :paramtype effective_outbound_i_ps: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ResourceReference] :keyword idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values are in the range of 4 to 120 (inclusive). The default value is 4 minutes. :paramtype idle_timeout_in_minutes: int @@ -4762,14 +4849,14 @@ class ManagedClusterPodIdentity(msrest.serialization.Model): :ivar binding_selector: The binding selector to use for the AzureIdentityBinding resource. :vartype binding_selector: str :ivar identity: Required. The user assigned identity details. - :vartype identity: ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity + :vartype identity: ~azure.mgmt.containerservice.v2022_07_02_preview.models.UserAssignedIdentity :ivar provisioning_state: The current provisioning state of the pod identity. Known values are: "Assigned", "Updating", "Deleting", "Failed". :vartype provisioning_state: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningState + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningState :ivar provisioning_info: :vartype provisioning_info: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningInfo + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningInfo """ _validation = { @@ -4807,7 +4894,7 @@ def __init__( :paramtype binding_selector: str :keyword identity: Required. The user assigned identity details. :paramtype identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.UserAssignedIdentity """ super(ManagedClusterPodIdentity, self).__init__(**kwargs) self.name = name @@ -4878,10 +4965,10 @@ class ManagedClusterPodIdentityProfile(msrest.serialization.Model): :vartype allow_network_plugin_kubenet: bool :ivar user_assigned_identities: The pod identities to use in the cluster. :vartype user_assigned_identities: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentity] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentity] :ivar user_assigned_identity_exceptions: The pod identity exceptions to allow. :vartype user_assigned_identity_exceptions: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityException] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityException] """ _attribute_map = { @@ -4911,10 +4998,10 @@ def __init__( :paramtype allow_network_plugin_kubenet: bool :keyword user_assigned_identities: The pod identities to use in the cluster. :paramtype user_assigned_identities: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentity] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentity] :keyword user_assigned_identity_exceptions: The pod identity exceptions to allow. :paramtype user_assigned_identity_exceptions: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityException] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityException] """ super(ManagedClusterPodIdentityProfile, self).__init__(**kwargs) self.enabled = enabled @@ -4928,7 +5015,7 @@ class ManagedClusterPodIdentityProvisioningError(msrest.serialization.Model): :ivar error: Details about the error. :vartype error: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody """ _attribute_map = { @@ -4944,7 +5031,7 @@ def __init__( """ :keyword error: Details about the error. :paramtype error: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody """ super(ManagedClusterPodIdentityProvisioningError, self).__init__(**kwargs) self.error = error @@ -4964,7 +5051,7 @@ class ManagedClusterPodIdentityProvisioningErrorBody(msrest.serialization.Model) :vartype target: str :ivar details: A list of additional details about the error. :vartype details: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] """ _attribute_map = { @@ -4995,7 +5082,7 @@ def __init__( :paramtype target: str :keyword details: A list of additional details about the error. :paramtype details: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] """ super(ManagedClusterPodIdentityProvisioningErrorBody, self).__init__(**kwargs) self.code = code @@ -5009,7 +5096,7 @@ class ManagedClusterPodIdentityProvisioningInfo(msrest.serialization.Model): :ivar error: Pod identity assignment error (if any). :vartype error: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningError + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningError """ _attribute_map = { @@ -5025,7 +5112,7 @@ def __init__( """ :keyword error: Pod identity assignment error (if any). :paramtype error: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningError + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPodIdentityProvisioningError """ super(ManagedClusterPodIdentityProvisioningInfo, self).__init__(**kwargs) self.error = error @@ -5042,10 +5129,10 @@ class ManagedClusterPoolUpgradeProfile(msrest.serialization.Model): :vartype name: str :ivar os_type: Required. The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :ivar upgrades: List of orchestrator types and versions available for upgrade. :vartype upgrades: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] """ _validation = { @@ -5076,10 +5163,10 @@ def __init__( :paramtype name: str :keyword os_type: Required. The operating system type. The default is Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSType :keyword upgrades: List of orchestrator types and versions available for upgrade. :paramtype upgrades: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] """ super(ManagedClusterPoolUpgradeProfile, self).__init__(**kwargs) self.kubernetes_version = kubernetes_version @@ -5128,7 +5215,7 @@ class ManagedClusterPropertiesAutoScalerProfile(msrest.serialization.Model): :ivar expander: If not specified, the default is 'random'. See `expanders `_ for more information. Known values are: "least-waste", "most-pods", "priority", "random". - :vartype expander: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Expander + :vartype expander: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Expander :ivar max_empty_bulk_delete: The default is 10. :vartype max_empty_bulk_delete: str :ivar max_graceful_termination_sec: The default is 600. @@ -5218,7 +5305,7 @@ def __init__( :keyword expander: If not specified, the default is 'random'. See `expanders `_ for more information. Known values are: "least-waste", "most-pods", "priority", "random". - :paramtype expander: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Expander + :paramtype expander: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Expander :keyword max_empty_bulk_delete: The default is 10. :paramtype max_empty_bulk_delete: str :keyword max_graceful_termination_sec: The default is 600. @@ -5288,12 +5375,12 @@ class ManagedClusterPropertiesForSnapshot(msrest.serialization.Model): :ivar kubernetes_version: The current kubernetes version. :vartype kubernetes_version: str :ivar sku: The current managed cluster sku. - :vartype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :vartype sku: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKU :ivar enable_rbac: Whether the cluster has enabled Kubernetes Role-Based Access Control or not. :vartype enable_rbac: bool :ivar network_profile: The current network profile. :vartype network_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkProfileForSnapshot + ~azure.mgmt.containerservice.v2022_07_02_preview.models.NetworkProfileForSnapshot """ _validation = { @@ -5319,7 +5406,7 @@ def __init__( :keyword kubernetes_version: The current kubernetes version. :paramtype kubernetes_version: str :keyword sku: The current managed cluster sku. - :paramtype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :paramtype sku: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKU :keyword enable_rbac: Whether the cluster has enabled Kubernetes Role-Based Access Control or not. :paramtype enable_rbac: bool @@ -5336,21 +5423,21 @@ class ManagedClusterSecurityProfile(msrest.serialization.Model): :ivar defender: Microsoft Defender settings for the security profile. :vartype defender: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefender + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileDefender :ivar azure_key_vault_kms: Azure Key Vault `key management service `_ settings for the security profile. :vartype azure_key_vault_kms: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AzureKeyVaultKms + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AzureKeyVaultKms :ivar workload_identity: `Workload Identity `_ settings for the security profile. :vartype workload_identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity :ivar node_restriction: `Node Restriction `_ settings for the security profile. :vartype node_restriction: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileNodeRestriction + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileNodeRestriction """ _attribute_map = { @@ -5372,21 +5459,21 @@ def __init__( """ :keyword defender: Microsoft Defender settings for the security profile. :paramtype defender: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefender + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileDefender :keyword azure_key_vault_kms: Azure Key Vault `key management service `_ settings for the security profile. :paramtype azure_key_vault_kms: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.AzureKeyVaultKms + ~azure.mgmt.containerservice.v2022_07_02_preview.models.AzureKeyVaultKms :keyword workload_identity: `Workload Identity `_ settings for the security profile. :paramtype workload_identity: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity :keyword node_restriction: `Node Restriction `_ settings for the security profile. :paramtype node_restriction: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileNodeRestriction + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileNodeRestriction """ super(ManagedClusterSecurityProfile, self).__init__(**kwargs) self.defender = defender @@ -5406,7 +5493,7 @@ class ManagedClusterSecurityProfileDefender(msrest.serialization.Model): :ivar security_monitoring: Microsoft Defender threat detection for Cloud settings for the security profile. :vartype security_monitoring: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring """ _attribute_map = { @@ -5430,7 +5517,7 @@ def __init__( :keyword security_monitoring: Microsoft Defender threat detection for Cloud settings for the security profile. :paramtype security_monitoring: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring """ super(ManagedClusterSecurityProfileDefender, self).__init__(**kwargs) self.log_analytics_workspace_resource_id = log_analytics_workspace_resource_id @@ -5555,12 +5642,12 @@ class ManagedClusterSKU(msrest.serialization.Model): :ivar name: The name of a managed cluster SKU. Known values are: "Basic". :vartype name: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUName + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKUName :ivar tier: If not specified, the default is 'Free'. See `uptime SLA `_ for more details. Known values are: "Paid", "Free". :vartype tier: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUTier + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKUTier """ _attribute_map = { @@ -5578,12 +5665,12 @@ def __init__( """ :keyword name: The name of a managed cluster SKU. Known values are: "Basic". :paramtype name: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUName + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKUName :keyword tier: If not specified, the default is 'Free'. See `uptime SLA `_ for more details. Known values are: "Paid", "Free". :paramtype tier: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUTier + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSKUTier """ super(ManagedClusterSKU, self).__init__(**kwargs) self.name = name @@ -5607,22 +5694,22 @@ class ManagedClusterSnapshot(TrackedResource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar tags: A set of tags. Resource tags. :vartype tags: dict[str, str] :ivar location: Required. The geo-location where the resource lives. :vartype location: str :ivar creation_data: CreationData to be used to specify the source resource ID to create this snapshot. - :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :vartype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :ivar snapshot_type: The type of a snapshot. The default is NodePool. Known values are: "NodePool", "ManagedCluster". Default value: "NodePool". :vartype snapshot_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotType :ivar managed_cluster_properties_read_only: What the properties will be showed when getting managed cluster snapshot. Those properties are read-only. :vartype managed_cluster_properties_read_only: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesForSnapshot + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPropertiesForSnapshot """ _validation = { @@ -5662,11 +5749,11 @@ def __init__( :paramtype location: str :keyword creation_data: CreationData to be used to specify the source resource ID to create this snapshot. - :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CreationData :keyword snapshot_type: The type of a snapshot. The default is NodePool. Known values are: "NodePool", "ManagedCluster". Default value: "NodePool". :paramtype snapshot_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotType """ super(ManagedClusterSnapshot, self).__init__(tags=tags, location=location, **kwargs) self.creation_data = creation_data @@ -5681,7 +5768,7 @@ class ManagedClusterSnapshotListResult(msrest.serialization.Model): :ivar value: The list of managed cluster snapshots. :vartype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot] :ivar next_link: The URL to get the next set of managed cluster snapshot results. :vartype next_link: str """ @@ -5704,7 +5791,7 @@ def __init__( """ :keyword value: The list of managed cluster snapshots. :paramtype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot] """ super(ManagedClusterSnapshotListResult, self).__init__(**kwargs) self.value = value @@ -5716,16 +5803,16 @@ class ManagedClusterStorageProfile(msrest.serialization.Model): :ivar disk_csi_driver: AzureDisk CSI Driver settings for the storage profile. :vartype disk_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver :ivar file_csi_driver: AzureFile CSI Driver settings for the storage profile. :vartype file_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileFileCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileFileCSIDriver :ivar snapshot_controller: Snapshot Controller settings for the storage profile. :vartype snapshot_controller: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileSnapshotController + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileSnapshotController :ivar blob_csi_driver: AzureBlob CSI Driver settings for the storage profile. :vartype blob_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver """ _attribute_map = { @@ -5747,16 +5834,16 @@ def __init__( """ :keyword disk_csi_driver: AzureDisk CSI Driver settings for the storage profile. :paramtype disk_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver :keyword file_csi_driver: AzureFile CSI Driver settings for the storage profile. :paramtype file_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileFileCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileFileCSIDriver :keyword snapshot_controller: Snapshot Controller settings for the storage profile. :paramtype snapshot_controller: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileSnapshotController + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileSnapshotController :keyword blob_csi_driver: AzureBlob CSI Driver settings for the storage profile. :paramtype blob_csi_driver: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver """ super(ManagedClusterStorageProfile, self).__init__(**kwargs) self.disk_csi_driver = disk_csi_driver @@ -5888,10 +5975,10 @@ class ManagedClusterUpgradeProfile(msrest.serialization.Model): :ivar control_plane_profile: Required. The list of available upgrade versions for the control plane. :vartype control_plane_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfile :ivar agent_pool_profiles: Required. The list of available upgrade versions for agent pools. :vartype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfile] """ _validation = { @@ -5921,10 +6008,10 @@ def __init__( :keyword control_plane_profile: Required. The list of available upgrade versions for the control plane. :paramtype control_plane_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfile :keyword agent_pool_profiles: Required. The list of available upgrade versions for agent pools. :paramtype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterPoolUpgradeProfile] """ super(ManagedClusterUpgradeProfile, self).__init__(**kwargs) self.id = None @@ -5959,13 +6046,13 @@ class ManagedClusterWindowsProfile(msrest.serialization.Model): `_ for more details. Known values are: "None", "Windows_Server". :vartype license_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LicenseType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LicenseType :ivar enable_csi_proxy: For more details on CSI proxy, see the `CSI proxy GitHub repo `_. :vartype enable_csi_proxy: bool :ivar gmsa_profile: The Windows gMSA Profile in the Managed Cluster. :vartype gmsa_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WindowsGmsaProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WindowsGmsaProfile """ _validation = { @@ -6011,13 +6098,13 @@ def __init__( `_ for more details. Known values are: "None", "Windows_Server". :paramtype license_type: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.LicenseType + ~azure.mgmt.containerservice.v2022_07_02_preview.models.LicenseType :keyword enable_csi_proxy: For more details on CSI proxy, see the `CSI proxy GitHub repo `_. :paramtype enable_csi_proxy: bool :keyword gmsa_profile: The Windows gMSA Profile in the Managed Cluster. :paramtype gmsa_profile: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.WindowsGmsaProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.WindowsGmsaProfile """ super(ManagedClusterWindowsProfile, self).__init__(**kwargs) self.admin_username = admin_username @@ -6033,27 +6120,36 @@ class ManagedClusterWorkloadAutoScalerProfile(msrest.serialization.Model): :ivar keda: KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler profile. :vartype keda: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + :ivar vertical_pod_autoscaler: + :vartype vertical_pod_autoscaler: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler """ _attribute_map = { 'keda': {'key': 'keda', 'type': 'ManagedClusterWorkloadAutoScalerProfileKeda'}, + 'vertical_pod_autoscaler': {'key': 'verticalPodAutoscaler', 'type': 'ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler'}, } def __init__( self, *, keda: Optional["_models.ManagedClusterWorkloadAutoScalerProfileKeda"] = None, + vertical_pod_autoscaler: Optional["_models.ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler"] = None, **kwargs ): """ :keyword keda: KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler profile. :paramtype keda: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + :keyword vertical_pod_autoscaler: + :paramtype vertical_pod_autoscaler: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler """ super(ManagedClusterWorkloadAutoScalerProfile, self).__init__(**kwargs) self.keda = keda + self.vertical_pod_autoscaler = vertical_pod_autoscaler class ManagedClusterWorkloadAutoScalerProfileKeda(msrest.serialization.Model): @@ -6087,6 +6183,68 @@ def __init__( self.enabled = enabled +class ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler(msrest.serialization.Model): + """ManagedClusterWorkloadAutoScalerProfileVerticalPodAutoscaler. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether to enable VPA. Default value is false. + :vartype enabled: bool + :ivar controlled_values: Required. Controls which resource value autoscaler will change. + Default value is RequestsAndLimits. Known values are: "RequestsAndLimits", "RequestsOnly". + Default value: "RequestsAndLimits". + :vartype controlled_values: str or + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ControlledValues + :ivar update_mode: Required. Each update mode level is a superset of the lower levels. + Off`_. :vartype rules: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleRule] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleRule] """ _validation = { @@ -7414,11 +7572,11 @@ class TrustedAccessRoleBinding(Resource): :vartype type: str :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy information. - :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :vartype system_data: ~azure.mgmt.containerservice.v2022_07_02_preview.models.SystemData :ivar provisioning_state: The current provisioning state of trusted access role binding. Known values are: "Succeeded", "Failed", "Updating", "Deleting". :vartype provisioning_state: str or - ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingProvisioningState + ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBindingProvisioningState :ivar source_resource_id: Required. The ARM resource ID of source resource that trusted access is configured for. :vartype source_resource_id: str @@ -7475,7 +7633,7 @@ class TrustedAccessRoleBindingListResult(msrest.serialization.Model): :ivar value: Role binding list. :vartype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding] :ivar next_link: Link to next page of resources. :vartype next_link: str """ @@ -7498,7 +7656,7 @@ def __init__( """ :keyword value: Role binding list. :paramtype value: - list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding] + list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding] """ super(TrustedAccessRoleBindingListResult, self).__init__(**kwargs) self.value = value @@ -7511,7 +7669,7 @@ class TrustedAccessRoleListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. :ivar value: Role list. - :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRole] + :vartype value: list[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRole] :ivar next_link: Link to next page of resources. :vartype next_link: str """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/__init__.py similarity index 100% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/__init__.py diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py index ef8e1b47fbb..c9a75360e1c 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py @@ -38,7 +38,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -76,7 +76,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -118,7 +118,7 @@ def build_create_or_update_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -164,7 +164,7 @@ def build_delete_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -205,7 +205,7 @@ def build_get_upgrade_profile_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -243,7 +243,7 @@ def build_get_available_agent_pool_versions_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -281,7 +281,7 @@ def build_upgrade_node_image_version_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -315,7 +315,7 @@ class AgentPoolsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`agent_pools` attribute. """ @@ -347,13 +347,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolListResult] error_map = { @@ -440,7 +440,7 @@ def get( :type agent_pool_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPool, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -451,7 +451,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] @@ -505,7 +505,7 @@ def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] @@ -571,7 +571,7 @@ def begin_create_or_update( :param agent_pool_name: The name of the agent pool. :type agent_pool_name: str :param parameters: The agent pool to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -582,13 +582,13 @@ def begin_create_or_update( Retry-After header is present. :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -655,7 +655,7 @@ def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -727,7 +727,7 @@ def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -794,7 +794,7 @@ def get_upgrade_profile( :type agent_pool_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPoolUpgradeProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolUpgradeProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -805,7 +805,7 @@ def get_upgrade_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolUpgradeProfile] @@ -862,7 +862,7 @@ def get_available_agent_pool_versions( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: AgentPoolAvailableVersions, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersions + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPoolAvailableVersions :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -873,7 +873,7 @@ def get_available_agent_pool_versions( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolAvailableVersions] @@ -925,7 +925,7 @@ def _upgrade_node_image_version_initial( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.AgentPool]] @@ -998,13 +998,13 @@ def begin_upgrade_node_image_version( Retry-After header is present. :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.AgentPool] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleet_members_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleet_members_operations.py index 12952a26598..00a79a1e5d0 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleet_members_operations.py @@ -44,7 +44,7 @@ def build_create_or_update_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -92,7 +92,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -133,7 +133,7 @@ def build_delete_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -173,7 +173,7 @@ def build_list_by_fleet_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -206,7 +206,7 @@ class FleetMembersOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`fleet_members` attribute. """ @@ -238,7 +238,7 @@ def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] @@ -309,7 +309,7 @@ def begin_create_or_update( :param fleet_member_name: The name of the Fleet member resource. :type fleet_member_name: str :param parameters: The Fleet member to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember :param if_match: Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -329,13 +329,13 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either FleetMember or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -408,7 +408,7 @@ def get( :type fleet_member_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FleetMember, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMember :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -419,7 +419,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] @@ -474,7 +474,7 @@ def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -548,7 +548,7 @@ def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -614,13 +614,13 @@ def list_by_fleet( :return: An iterator like instance of either FleetMembersListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMembersListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetMembersListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMembersListResult] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleets_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleets_operations.py index 604ebd73e13..291a80300f8 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_fleets_operations.py @@ -43,7 +43,7 @@ def build_create_or_update_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -93,7 +93,7 @@ def build_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -137,7 +137,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -176,7 +176,7 @@ def build_delete_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -214,7 +214,7 @@ def build_list_by_resource_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -248,7 +248,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -283,7 +283,7 @@ def build_list_credentials_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -316,7 +316,7 @@ class FleetsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`fleets` attribute. """ @@ -347,7 +347,7 @@ def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -413,7 +413,7 @@ def begin_create_or_update( :param fleet_name: The name of the Fleet resource. :type fleet_name: str :param parameters: The Fleet to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :param if_match: Omit this value to always overwrite the current resource. Specify the last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is None. @@ -432,13 +432,13 @@ def begin_create_or_update( Retry-After header is present. :return: An instance of LROPoller that returns either Fleet or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -512,10 +512,10 @@ def update( None. :type if_match: str :param parameters: The properties of a Fleet to update. Default value is None. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetPatch + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetPatch :keyword callable cls: A custom type or function that will be passed the direct response :return: Fleet, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -526,7 +526,7 @@ def update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -589,7 +589,7 @@ def get( :type fleet_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: Fleet, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Fleet :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -600,7 +600,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] @@ -653,7 +653,7 @@ def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -722,7 +722,7 @@ def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -783,13 +783,13 @@ def list_by_resource_group( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either FleetListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] error_map = { @@ -867,13 +867,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either FleetListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] error_map = { @@ -954,7 +954,7 @@ def list_credentials( :type fleet_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: FleetCredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.FleetCredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -965,7 +965,7 @@ def list_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetCredentialResults] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_maintenance_configurations_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_maintenance_configurations_operations.py index 20b258720ca..542929f1fd1 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_maintenance_configurations_operations.py @@ -36,7 +36,7 @@ def build_list_by_managed_cluster_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -74,7 +74,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -116,7 +116,7 @@ def build_create_or_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -160,7 +160,7 @@ def build_delete_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -194,7 +194,7 @@ class MaintenanceConfigurationsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`maintenance_configurations` attribute. """ @@ -227,13 +227,13 @@ def list_by_managed_cluster( :return: An iterator like instance of either MaintenanceConfigurationListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfigurationListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfigurationListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfigurationListResult] error_map = { @@ -320,7 +320,7 @@ def get( :type config_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: MaintenanceConfiguration, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -331,7 +331,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] @@ -390,10 +390,10 @@ def create_or_update( :type config_name: str :param parameters: The maintenance configuration to create or update. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :keyword callable cls: A custom type or function that will be passed the direct response :return: MaintenanceConfiguration, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.MaintenanceConfiguration :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -404,7 +404,7 @@ def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] @@ -477,7 +477,7 @@ def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_cluster_snapshots_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_cluster_snapshots_operations.py index ea57e68973d..4c41832c00f 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_cluster_snapshots_operations.py @@ -34,7 +34,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -68,7 +68,7 @@ def build_list_by_resource_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -104,7 +104,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -144,7 +144,7 @@ def build_create_or_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -189,7 +189,7 @@ def build_update_tags_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -231,7 +231,7 @@ def build_delete_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -264,7 +264,7 @@ class ManagedClusterSnapshotsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`managed_cluster_snapshots` attribute. """ @@ -291,13 +291,13 @@ def list( :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] error_map = { @@ -376,13 +376,13 @@ def list_by_resource_group( :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] error_map = { @@ -464,7 +464,7 @@ def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -475,7 +475,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -530,10 +530,10 @@ def create_or_update( :type resource_name: str :param parameters: The managed cluster snapshot to create or update. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -544,7 +544,7 @@ def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -606,10 +606,10 @@ def update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update managed cluster snapshot Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterSnapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSnapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -620,7 +620,7 @@ def update_tags( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] @@ -689,7 +689,7 @@ def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py index 93aea842378..bdf150c50a0 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py @@ -39,7 +39,7 @@ def build_get_os_options_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -75,7 +75,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -109,7 +109,7 @@ def build_list_by_resource_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -145,7 +145,7 @@ def build_get_upgrade_profile_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -183,7 +183,7 @@ def build_get_access_profile_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -223,7 +223,7 @@ def build_list_cluster_admin_credentials_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -265,7 +265,7 @@ def build_list_cluster_user_credentials_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -308,7 +308,7 @@ def build_list_cluster_monitoring_user_credentials_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -347,7 +347,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -387,7 +387,7 @@ def build_create_or_update_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -432,7 +432,7 @@ def build_update_tags_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -476,7 +476,7 @@ def build_delete_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -518,7 +518,7 @@ def build_reset_service_principal_profile_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -563,7 +563,7 @@ def build_reset_aad_profile_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -605,7 +605,7 @@ def build_rotate_cluster_certificates_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -642,7 +642,7 @@ def build_rotate_service_account_signing_keys_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -679,7 +679,7 @@ def build_stop_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -716,7 +716,7 @@ def build_start_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -756,7 +756,7 @@ def build_run_command_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -799,7 +799,7 @@ def build_get_command_result_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -837,7 +837,7 @@ def build_list_outbound_network_dependencies_endpoints_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -870,7 +870,7 @@ class ManagedClustersOperations: # pylint: disable=too-many-public-methods **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`managed_clusters` attribute. """ @@ -902,7 +902,7 @@ def get_os_options( :type resource_type: str :keyword callable cls: A custom type or function that will be passed the direct response :return: OSOptionProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.OSOptionProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -913,7 +913,7 @@ def get_os_options( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OSOptionProfile] @@ -963,13 +963,13 @@ def list( :return: An iterator like instance of either ManagedClusterListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] error_map = { @@ -1048,13 +1048,13 @@ def list_by_resource_group( :return: An iterator like instance of either ManagedClusterListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] error_map = { @@ -1136,7 +1136,7 @@ def get_upgrade_profile( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterUpgradeProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterUpgradeProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterUpgradeProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1147,7 +1147,7 @@ def get_upgrade_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterUpgradeProfile] @@ -1207,7 +1207,7 @@ def get_access_profile( :type role_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedClusterAccessProfile, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAccessProfile + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAccessProfile :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1218,7 +1218,7 @@ def get_access_profile( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterAccessProfile] @@ -1276,7 +1276,7 @@ def list_cluster_admin_credentials( :type server_fqdn: str :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1287,7 +1287,7 @@ def list_cluster_admin_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -1347,10 +1347,10 @@ def list_cluster_user_credentials( :param format: Only apply to AAD clusters, specifies the format of returned kubeconfig. Format 'azure' will return azure auth-provider kubeconfig; format 'exec' will return exec format kubeconfig, which requires kubelogin binary in the path. Default value is None. - :type format: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Format + :type format: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.Format :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1361,7 +1361,7 @@ def list_cluster_user_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -1420,7 +1420,7 @@ def list_cluster_monitoring_user_credentials( :type server_fqdn: str :keyword callable cls: A custom type or function that will be passed the direct response :return: CredentialResults, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.CredentialResults :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1431,7 +1431,7 @@ def list_cluster_monitoring_user_credentials( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] @@ -1486,7 +1486,7 @@ def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ManagedCluster, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -1497,7 +1497,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -1549,7 +1549,7 @@ def _create_or_update_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -1611,7 +1611,7 @@ def begin_create_or_update( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: The managed cluster to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -1623,13 +1623,13 @@ def begin_create_or_update( :return: An instance of LROPoller that returns either ManagedCluster or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -1694,7 +1694,7 @@ def _update_tags_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] @@ -1752,7 +1752,7 @@ def begin_update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update Managed Cluster Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -1764,13 +1764,13 @@ def begin_update_tags( :return: An instance of LROPoller that returns either ManagedCluster or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedCluster] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -1835,7 +1835,7 @@ def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -1903,7 +1903,7 @@ def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -1964,7 +1964,7 @@ def _reset_service_principal_profile_initial( # pylint: disable=inconsistent-re _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2019,7 +2019,7 @@ def begin_reset_service_principal_profile( # pylint: disable=inconsistent-retur :type resource_name: str :param parameters: The service principal profile to set on the managed cluster. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterServicePrincipalProfile :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -2035,7 +2035,7 @@ def begin_reset_service_principal_profile( # pylint: disable=inconsistent-retur _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -2098,7 +2098,7 @@ def _reset_aad_profile_initial( # pylint: disable=inconsistent-return-statement _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2153,7 +2153,7 @@ def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statements :type resource_name: str :param parameters: The AAD profile to set on the Managed Cluster. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAADProfile :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -2169,7 +2169,7 @@ def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statements _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -2231,7 +2231,7 @@ def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent-return _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2295,7 +2295,7 @@ def begin_rotate_cluster_certificates( # pylint: disable=inconsistent-return-st _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -2354,7 +2354,7 @@ def _rotate_service_account_signing_keys_initial( # pylint: disable=inconsisten _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2417,7 +2417,7 @@ def begin_rotate_service_account_signing_keys( # pylint: disable=inconsistent-r _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -2476,7 +2476,7 @@ def _stop_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2543,7 +2543,7 @@ def begin_stop( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -2602,7 +2602,7 @@ def _start_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -2666,7 +2666,7 @@ def begin_start( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( @@ -2726,7 +2726,7 @@ def _run_command_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] @@ -2789,7 +2789,7 @@ def begin_run_command( :type resource_name: str :param request_payload: The run command request. :type request_payload: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandRequest + ~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandRequest :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this @@ -2801,13 +2801,13 @@ def begin_run_command( :return: An instance of LROPoller that returns either RunCommandResult or the result of cls(response) :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult] + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.RunCommandResult] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] @@ -2877,7 +2877,7 @@ def get_command_result( :type command_id: str :keyword callable cls: A custom type or function that will be passed the direct response :return: RunCommandResult, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult or None + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.RunCommandResult or None :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -2888,7 +2888,7 @@ def get_command_result( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] @@ -2949,13 +2949,13 @@ def list_outbound_network_dependencies_endpoints( :return: An iterator like instance of either OutboundEnvironmentEndpointCollection or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpointCollection] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.OutboundEnvironmentEndpointCollection] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OutboundEnvironmentEndpointCollection] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_operations.py index 373d8ea0154..ac45f973f9a 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_operations.py @@ -33,7 +33,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -59,7 +59,7 @@ class Operations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`operations` attribute. """ @@ -85,13 +85,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either OperationListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OperationListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.OperationListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.OperationListResult] error_map = { diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_endpoint_connections_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_endpoint_connections_operations.py index d65c073c21b..35afade8f2a 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_endpoint_connections_operations.py @@ -37,7 +37,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -75,7 +75,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -117,7 +117,7 @@ def build_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -161,7 +161,7 @@ def build_delete_request_initial( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -195,7 +195,7 @@ class PrivateEndpointConnectionsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`private_endpoint_connections` attribute. """ @@ -228,7 +228,7 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnectionListResult, or the result of cls(response) :rtype: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnectionListResult + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnectionListResult :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -239,7 +239,7 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnectionListResult] @@ -297,7 +297,7 @@ def get( :type private_endpoint_connection_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnection, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -308,7 +308,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] @@ -367,10 +367,10 @@ def update( :type private_endpoint_connection_name: str :param parameters: The updated private endpoint connection. :type parameters: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateEndpointConnection, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateEndpointConnection :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -381,7 +381,7 @@ def update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] @@ -438,7 +438,7 @@ def _delete_initial( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] @@ -505,7 +505,7 @@ def begin_delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_link_resources_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_link_resources_operations.py index 189d27c10e6..4456a64da1b 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_private_link_resources_operations.py @@ -35,7 +35,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -68,7 +68,7 @@ class PrivateLinkResourcesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`private_link_resources` attribute. """ @@ -100,7 +100,7 @@ def list( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateLinkResourcesListResult, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResourcesListResult + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResourcesListResult :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -111,7 +111,7 @@ def list( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResourcesListResult] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_resolve_private_link_service_id_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_resolve_private_link_service_id_operations.py index e4f5b2f7e78..230f566b790 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_resolve_private_link_service_id_operations.py @@ -38,7 +38,7 @@ def build_post_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -76,7 +76,7 @@ class ResolvePrivateLinkServiceIdOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`resolve_private_link_service_id` attribute. """ @@ -107,10 +107,10 @@ def post( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters required in order to resolve a private link service ID. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource :keyword callable cls: A custom type or function that will be passed the direct response :return: PrivateLinkResource, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.PrivateLinkResource :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -121,7 +121,7 @@ def post( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResource] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_snapshots_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_snapshots_operations.py index 3a0ec2d61b4..e58922c7ff5 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_snapshots_operations.py @@ -34,7 +34,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -68,7 +68,7 @@ def build_list_by_resource_group_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -104,7 +104,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -144,7 +144,7 @@ def build_create_or_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -189,7 +189,7 @@ def build_update_tags_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -231,7 +231,7 @@ def build_delete_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -264,7 +264,7 @@ class SnapshotsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`snapshots` attribute. """ @@ -290,13 +290,13 @@ def list( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SnapshotListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] error_map = { @@ -374,13 +374,13 @@ def list_by_resource_group( :keyword callable cls: A custom type or function that will be passed the direct response :return: An iterator like instance of either SnapshotListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.SnapshotListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] error_map = { @@ -462,7 +462,7 @@ def get( :type resource_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -473,7 +473,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -527,10 +527,10 @@ def create_or_update( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: The snapshot to create or update. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -541,7 +541,7 @@ def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -603,10 +603,10 @@ def update_tags( :param resource_name: The name of the managed cluster resource. :type resource_name: str :param parameters: Parameters supplied to the Update snapshot Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :type parameters: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TagsObject :keyword callable cls: A custom type or function that will be passed the direct response :return: Snapshot, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.Snapshot :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -617,7 +617,7 @@ def update_tags( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] @@ -686,7 +686,7 @@ def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_role_bindings_operations.py similarity index 97% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_role_bindings_operations.py index 5d954e2a98c..d7353c52421 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_role_bindings_operations.py @@ -36,7 +36,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -74,7 +74,7 @@ def build_get_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -116,7 +116,7 @@ def build_create_or_update_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] accept = _headers.pop('Accept', "application/json") @@ -160,7 +160,7 @@ def build_delete_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -194,7 +194,7 @@ class TrustedAccessRoleBindingsOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`trusted_access_role_bindings` attribute. """ @@ -227,13 +227,13 @@ def list( :return: An iterator like instance of either TrustedAccessRoleBindingListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBindingListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBindingListResult] error_map = { @@ -320,7 +320,7 @@ def get( :type trusted_access_role_binding_name: str :keyword callable cls: A custom type or function that will be passed the direct response :return: TrustedAccessRoleBinding, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -331,7 +331,7 @@ def get( _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] @@ -390,10 +390,10 @@ def create_or_update( :type trusted_access_role_binding_name: str :param trusted_access_role_binding: A trusted access role binding. :type trusted_access_role_binding: - ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :keyword callable cls: A custom type or function that will be passed the direct response :return: TrustedAccessRoleBinding, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :rtype: ~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleBinding :raises: ~azure.core.exceptions.HttpResponseError """ error_map = { @@ -404,7 +404,7 @@ def create_or_update( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] @@ -477,7 +477,7 @@ def delete( # pylint: disable=inconsistent-return-statements _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_roles_operations.py similarity index 96% rename from src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py rename to src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_roles_operations.py index 982e0448952..44462d163d0 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_trusted_access_roles_operations.py @@ -35,7 +35,7 @@ def build_list_request( _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str accept = _headers.pop('Accept', "application/json") # Construct URL @@ -67,7 +67,7 @@ class TrustedAccessRolesOperations: **DO NOT** instantiate this class directly. Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :class:`~azure.mgmt.containerservice.v2022_07_02_preview.ContainerServiceClient`'s :attr:`trusted_access_roles` attribute. """ @@ -97,13 +97,13 @@ def list( :return: An iterator like instance of either TrustedAccessRoleListResult or the result of cls(response) :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleListResult] + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_07_02_preview.models.TrustedAccessRoleListResult] :raises: ~azure.core.exceptions.HttpResponseError """ _headers = kwargs.pop("headers", {}) or {} _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleListResult] error_map = { diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index 74f806244ca..aed0f708af1 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -9,7 +9,7 @@ from setuptools import setup, find_packages -VERSION = "0.5.92" +VERSION = "0.5.93" CLASSIFIERS = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", From d71876e0c4ae29ea21bed01ae2fd0b0cf810998c Mon Sep 17 00:00:00 2001 From: bragi92 Date: Sat, 6 Aug 2022 09:51:03 -0700 Subject: [PATCH 002/109] WIP --- src/aks-preview/azext_aks_preview/__init__.py | 3 +- src/aks-preview/azext_aks_preview/_help.py | 6 + src/aks-preview/azext_aks_preview/_params.py | 13 + .../azext_aks_preview/_validators.py | 10 + .../azext_aks_preview/addonconfiguration.py | 2 +- .../azext_aks_preview/azuremonitorprofile.py | 30 + src/aks-preview/azext_aks_preview/custom.py | 31 + .../managed_cluster_decorator.py | 117 + .../azure_mgmt_preview_aks/_version.py | 2 +- .../azure_mgmt_preview_aks/models.py | 3 +- .../v2017_07_01/__init__.py | 12 +- .../v2017_07_01/_configuration.py | 24 +- .../v2017_07_01/_container_service_client.py | 87 +- .../v2017_07_01/_patch.py | 31 + .../v2017_07_01/_vendor.py | 27 + .../v2017_07_01/aio/__init__.py | 10 + .../v2017_07_01/aio/_configuration.py | 11 +- .../aio/_container_service_client.py | 75 +- .../v2017_07_01/aio/_patch.py | 31 + .../v2017_07_01/aio/operations/__init__.py | 5 + .../_container_services_operations.py | 537 +- .../v2017_07_01/aio/operations/_patch.py | 19 + .../v2017_07_01/models/__init__.py | 63 +- .../models/_container_service_client_enums.py | 30 +- .../v2017_07_01/models/_models.py | 804 -- .../v2017_07_01/models/_models_py3.py | 582 +- .../v2017_07_01/models/_patch.py | 19 + .../v2017_07_01/operations/__init__.py | 5 + .../_container_services_operations.py | 824 +- .../v2017_07_01/operations/_patch.py | 19 + .../v2022_06_02_preview/__init__.py | 20 + .../v2022_06_02_preview/_configuration.py | 72 + .../_container_service_client.py | 170 + .../v2022_06_02_preview/_patch.py | 19 + .../v2022_06_02_preview/_vendor.py | 27 + .../v2022_06_02_preview/aio/__init__.py | 20 + .../v2022_06_02_preview/aio/_configuration.py | 71 + .../aio/_container_service_client.py | 168 + .../v2022_06_02_preview/aio/_patch.py | 19 + .../aio/operations/__init__.py | 42 + .../aio/operations/_agent_pools_operations.py | 776 ++ .../operations/_fleet_members_operations.py | 515 ++ .../aio/operations/_fleets_operations.py | 720 ++ .../_maintenance_configurations_operations.py | 348 + .../_managed_cluster_snapshots_operations.py | 489 ++ .../_managed_clusters_operations.py | 2185 +++++ .../aio/operations/_operations.py | 123 + .../aio/operations/_patch.py | 19 + ...private_endpoint_connections_operations.py | 387 + .../_private_link_resources_operations.py | 109 + ...olve_private_link_service_id_operations.py | 115 + .../aio/operations/_snapshots_operations.py | 486 ++ ...trusted_access_role_bindings_operations.py | 348 + .../_trusted_access_roles_operations.py | 131 + .../v2022_06_02_preview/models/__init__.py | 345 + .../models/_container_service_client_enums.py | 639 ++ .../v2022_06_02_preview/models/_models_py3.py | 7631 +++++++++++++++++ .../v2022_06_02_preview/models/_patch.py | 19 + .../operations/__init__.py | 42 + .../operations/_agent_pools_operations.py | 1057 +++ .../operations/_fleet_members_operations.py | 689 ++ .../operations/_fleets_operations.py | 1004 +++ .../_maintenance_configurations_operations.py | 512 ++ .../_managed_cluster_snapshots_operations.py | 723 ++ .../_managed_clusters_operations.py | 3023 +++++++ .../operations/_operations.py | 153 + .../v2022_06_02_preview/operations/_patch.py | 19 + ...private_endpoint_connections_operations.py | 552 ++ .../_private_link_resources_operations.py | 149 + ...olve_private_link_service_id_operations.py | 163 + .../operations/_snapshots_operations.py | 720 ++ ...trusted_access_role_bindings_operations.py | 512 ++ .../_trusted_access_roles_operations.py | 169 + .../aio/operations/_agent_pools_operations.py | 71 +- .../_managed_clusters_operations.py | 67 +- .../v2022_07_02_preview/models/__init__.py | 12 +- .../models/_container_service_client_enums.py | 4 + .../v2022_07_02_preview/models/_models_py3.py | 142 +- .../operations/_agent_pools_operations.py | 108 + .../_managed_clusters_operations.py | 102 + src/aks-preview/setup.py | 2 +- 81 files changed, 27786 insertions(+), 1654 deletions(-) create mode 100644 src/aks-preview/azext_aks_preview/azuremonitorprofile.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_vendor.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_patch.py delete mode 100755 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py create mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py diff --git a/src/aks-preview/azext_aks_preview/__init__.py b/src/aks-preview/azext_aks_preview/__init__.py index 13c3a306a32..22fb211f61d 100644 --- a/src/aks-preview/azext_aks_preview/__init__.py +++ b/src/aks-preview/azext_aks_preview/__init__.py @@ -16,7 +16,8 @@ def register_aks_preview_resource_type(): register_resource_type( "latest", CUSTOM_MGMT_AKS_PREVIEW, - SDKProfile("2022-06-02-preview", {"container_services": "2017-07-01"}), + SDKProfile("2022-07-02-preview", {"container_services": "2017-07-01"}), + # SDKProfile("2022-06-02-preview", {"container_services": "2017-07-01"}), ) diff --git a/src/aks-preview/azext_aks_preview/_help.py b/src/aks-preview/azext_aks_preview/_help.py index 4255dff9454..9e6318f776e 100644 --- a/src/aks-preview/azext_aks_preview/_help.py +++ b/src/aks-preview/azext_aks_preview/_help.py @@ -463,6 +463,9 @@ - name: --defender-config type: string short-summary: Path to JSON file containing Microsoft Defender profile configurations. + - name: --enable-azuremonitormetrics + type: bool + short-summary: Enable Azure Monitor Metrics Profile examples: - name: Create a Kubernetes cluster with an existing SSH public key. text: az aks create -g MyResourceGroup -n MyManagedCluster --ssh-key-value /path/to/publickey @@ -805,6 +808,9 @@ - name: --defender-config type: string short-summary: Path to JSON file containing Microsoft Defender profile configurations. + - name: --enable-azuremonitormetrics + type: bool + short-summary: Enable Azure Monitor Metrics Profile examples: - name: Reconcile the cluster back to its current state. text: az aks update -g MyResourceGroup -n MyManagedCluster diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index de79ffd81dc..1f0ce2f964f 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -119,6 +119,8 @@ validate_enable_custom_ca_trust, validate_defender_config_parameter, validate_defender_disable_and_enable_parameters, + validate_metriclabelsallowlist, + validate_metricannotationsallowlist, ) # candidates for enumeration @@ -319,6 +321,11 @@ def load_arguments(self, _): c.argument('apiserver_subnet_id', validator=validate_apiserver_subnet_id, is_preview=True) c.argument('dns_zone_resource_id') c.argument('enable_keda', action='store_true', is_preview=True) + c.argument('enable_azuremonitormetrics', action='store_true', is_preview=True) + c.argument('mac_resource_id', action='store_true', is_preview=True) + c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) + c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) + c.argument('grafana_resource_id', action='store_true', is_preview=True) # nodepool c.argument('host_group_id', validator=validate_host_group_id, is_preview=True) c.argument('crg_id', validator=validate_crg_id, is_preview=True) @@ -413,6 +420,12 @@ def load_arguments(self, _): c.argument('apiserver_subnet_id', validator=validate_apiserver_subnet_id, is_preview=True) c.argument('enable_keda', action='store_true', is_preview=True) c.argument('disable_keda', action='store_true', is_preview=True) + c.argument('enable_azuremonitormetrics', action='store_true', is_preview=True) + c.argument('mac_resource_id', action='store_true', is_preview=True) + c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) + c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) + c.argument('grafana_resource_id', action='store_true', is_preview=True) + c.argument('disable_azuremonitormetrics', action='store_true', is_preview=True) with self.argument_context('aks upgrade') as c: c.argument('kubernetes_version', completer=get_k8s_upgrades_completion_list) diff --git a/src/aks-preview/azext_aks_preview/_validators.py b/src/aks-preview/azext_aks_preview/_validators.py index 2a314a69396..7cae3dc5234 100644 --- a/src/aks-preview/azext_aks_preview/_validators.py +++ b/src/aks-preview/azext_aks_preview/_validators.py @@ -615,3 +615,13 @@ def validate_defender_config_parameter(namespace): def validate_defender_disable_and_enable_parameters(namespace): if namespace.disable_defender and namespace.enable_defender: raise ArgumentUsageError('Providing both --disable-defender and --enable-defender flags is invalid') + +def validate_metriclabelsallowlist(namespace): + # Do regex matching here and return error if !matched + # raise ArgumentUsageError('validate_metriclabelsallowlist -> Not yet implemented') + return + +def validate_metricannotationsallowlist(namespace): + # Do regex matching here and return error if !matched + # raise ArgumentUsageError('validate_metricannotationsallowlist -> Not yet implemented') + return diff --git a/src/aks-preview/azext_aks_preview/addonconfiguration.py b/src/aks-preview/azext_aks_preview/addonconfiguration.py index 8d4e966d007..044bd3b18cb 100644 --- a/src/aks-preview/azext_aks_preview/addonconfiguration.py +++ b/src/aks-preview/azext_aks_preview/addonconfiguration.py @@ -224,7 +224,7 @@ def update_addons(cmd, # pylint: disable=too-many-branches,too-many-statements if addon_profile.enabled and check_enabled: raise CLIError('The monitoring addon is already enabled for this managed cluster.\n' 'To change monitoring configuration, run "az aks disable-addons -a monitoring"' - 'before enabling it again.') + ' before enabling it again.') if not workspace_resource_id: workspace_resource_id = ensure_default_log_analytics_workspace_for_monitoring( cmd, diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py new file mode 100644 index 00000000000..a334a580dbe --- /dev/null +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -0,0 +1,30 @@ +# -------------------------------------------------------------------------------------------- +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. See License.txt in the project root for license information. +# -------------------------------------------------------------------------------------------- + +def link_azure_monitor_profile_artifacts(): + print("Calling unlink_azure_monitor_profile_artifacts...") + return + +def unlink_azure_monitor_profile_artifacts(): + print("Calling unlink_azure_monitor_profile_artifacts...") + return + +# pylint: disable=too-many-locals,too-many-branches,too-many-statements,line-too-long +def ensure_azure_monitor_profile_prerequisites( + cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + cluster_region, + raw_parameters, + remove_azuremonitormetrics +): + print("Calling ensure_azure_monitor_profile_prerequisites...") + if (remove_azuremonitormetrics): + unlink_azure_monitor_profile_artifacts() + else: + link_azure_monitor_profile_artifacts() + + return \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index bd893840ce1..aed9fbd0d50 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -49,6 +49,10 @@ ensure_default_log_analytics_workspace_for_monitoring ) +from azext_aks_preview.azuremonitorprofile import ( + ensure_azure_monitor_profile_prerequisites, +) + from azext_aks_preview._client_factory import ( CUSTOM_MGMT_AKS_PREVIEW, cf_agent_pools, @@ -667,6 +671,11 @@ def aks_create( apiserver_subnet_id=None, dns_zone_resource_id=None, enable_keda=False, + enable_azuremonitormetrics=False, + mac_resource_id=None, + metriclabelsallowlist=None, + metricannotationsallowlist=None, + grafana_resource_id=None, # nodepool host_group_id=None, crg_id=None, @@ -783,6 +792,12 @@ def aks_update( apiserver_subnet_id=None, enable_keda=False, disable_keda=False, + enable_azuremonitormetrics=False, + mac_resource_id=None, + metriclabelsallowlist=None, + metricannotationsallowlist=None, + grafana_resource_id=None, + disable_azuremonitormetrics=False, ): # DO NOT MOVE: get all the original parameters and save them as a dictionary raw_parameters = locals() @@ -800,6 +815,22 @@ def aks_update( try: # update mc profile mc = aks_update_decorator.update_mc_profile_preview() + + if ( raw_parameters.get("enable_azuremonitormetrics") or raw_parameters.get("disable_azuremonitormetrics")): + subscription_id = get_subscription_id(cmd.cli_ctx) + instance = client.get(resource_group_name, name) + remove_azuremonitormetrics = False + if raw_parameters.get("disable_azuremonitormetrics"): + remove_azuremonitormetrics = True + + ensure_azure_monitor_profile_prerequisites(cmd, + subscription_id, + resource_group_name, + name, + instance.location, + raw_parameters, + remove_azuremonitormetrics) + except DecoratorEarlyExitException: # exit gracefully return None diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index ff7f6cf4b54..5c74ece8c28 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1395,6 +1395,82 @@ def get_defender_config(self) -> Union[ManagedClusterSecurityProfileDefender, No ) return azure_defender + def _get_enable_azure_monitor_metrics(self, enable_validation: bool = False) -> bool: + """Internal function to obtain the value of enable_azure_monitor_metrics. + + This function supports the option of enable_validation. When enabled, if both enable_azure_monitor_metrics and disable_azure_monitor_metrics are + specified, raise a MutuallyExclusiveArgumentError. + + :return: bool + """ + print("_get_enable_azure_monitor_metrics being called...") + + # Read the original value passed by the command. + + print("REACHES HERE 1") + enable_azure_monitor_metrics = self.raw_param.get("enable_azuremonitormetrics") + + # In create mode, try to read the property value corresponding to the parameter from the `mc` object. + if self.decorator_mode == DecoratorMode.CREATE: + print ("REACHES HERE OUT OF TURN") + if ( + self.mc and + self.mc.azure_monitor_profile and + self.mc.azure_monitor_profile.metrics + ): + print("REACHES HERE 3") + print(self.mc.azure_monitor_profile.metrics) + enable_azure_monitor_metrics = self.mc.azure_monitor_profile.metrics.enabled + + # This parameter does not need dynamic completion. + if enable_validation: + print("REACHES HERE 4") + print(dir(self.mc)) + if enable_azure_monitor_metrics and self._get_disable_azure_monitor_metrics(False): + print("REACHES HERE 5") + raise MutuallyExclusiveArgumentError( + "Cannot specify --enable-azuremonitormetrics and --enable-azuremonitormetrics at the same time." + ) + + return enable_azure_monitor_metrics + + def get_enable_azure_monitor_metrics(self) -> bool: + """Obtain the value of enable_azure_monitor_metrics. + This function will verify the parameter by default. If both enable_azure_monitor_metrics and disable_azure_monitor_metrics are specified, raise a + MutuallyExclusiveArgumentError. + :return: bool + """ + return self._get_enable_azure_monitor_metrics(enable_validation=True) + + def _get_disable_azure_monitor_metrics(self, enable_validation: bool = False) -> bool: + """Internal function to obtain the value of disable_azure_monitor_metrics. + This function supports the option of enable_validation. When enabled, if both enable_azure_monitor_metrics and disable_azure_monitor_metrics are + specified, raise a MutuallyExclusiveArgumentError. + :return: bool + """ + # Read the original value passed by the command. + disable_azure_monitor_metrics = self.raw_param.get("disable_azuremonitormetrics") + print("REACHES HERE 10") + + # This option is not supported in create mode, hence we do not read the property value from the `mc` object. + # This parameter does not need dynamic completion. + if enable_validation: + print("REACHES HERE 11") + if disable_azure_monitor_metrics and self._get_enable_azure_monitor_metrics(False): + print("REACHES HERE 12") + raise MutuallyExclusiveArgumentError( + "Cannot specify --enable-azuremonitormetrics and --disable-azuremonitormetrics at the same time." + ) + + return disable_azure_monitor_metrics + + def get_disable_azure_monitor_metrics(self) -> bool: + """Obtain the value of disable_azure_monitor_metrics. + This function will verify the parameter by default. If both enable_azure_monitor_metrics and disable_azure_monitor_metrics are specified, raise a + MutuallyExclusiveArgumentError. + :return: bool + """ + return self._get_disable_azure_monitor_metrics(enable_validation=True) class AKSPreviewManagedClusterCreateDecorator(AKSManagedClusterCreateDecorator): def __init__( @@ -1700,6 +1776,20 @@ def set_up_defender(self, mc: ManagedCluster) -> ManagedCluster: mc.security_profile.defender = defender return mc + + def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: + """Set up azure monitor profile for the ManagedCluster object. + :return: the ManagedCluster object + """ + self._ensure_mc(mc) + + if self.context.get_enable_azure_monitor_metrics(): + if mc.azure_monitor_profile is None: + mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorMetricsProfile() + mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorMetricsProfileMetrics(enabled=True) + + return mc + def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> ManagedCluster: """The overall controller used to construct the default ManagedCluster profile. @@ -1737,6 +1827,8 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> mc = self.set_up_ingress_web_app_routing(mc) # set up workload auto scaler profile mc = self.set_up_workload_auto_scaler_profile(mc) + # set up azure monitor metrics profile + mc = self.set_up_azure_monitor_profile(mc) # DO NOT MOVE: keep this at the bottom, restore defaults mc = self._restore_defaults_in_mc(mc) @@ -2035,6 +2127,29 @@ def update_defender(self, mc: ManagedCluster) -> ManagedCluster: return mc + def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: + """Update azure monitor profile for the ManagedCluster object. + :return: the ManagedCluster object + """ + self._ensure_mc(mc) + print("REACHES HERE 6") + + if self.context.get_enable_azure_monitor_metrics(): + print("REACHES HERE 7") + if mc.azure_monitor_profile is None: + print("REACHES HERE 8") + mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() + print("REACHES HERE 9") + mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=True) + print(mc.azure_monitor_profile.metrics.enabled) + + if self.context.get_disable_azure_monitor_metrics(): + if mc.azure_monitor_profile is None: + mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() + mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=False) + + return mc + def update_mc_profile_preview(self) -> ManagedCluster: """The overall controller used to update the preview ManagedCluster profile. @@ -2067,5 +2182,7 @@ def update_mc_profile_preview(self) -> ManagedCluster: mc = self.update_storage_profile(mc) # update workload auto scaler profile mc = self.update_workload_auto_scaler_profile(mc) + # update azure monitor metrics profile + mc = self.update_azure_monitor_profile(mc) return mc diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py index c112ba26780..1fbb406f48f 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/_version.py @@ -9,4 +9,4 @@ # regenerated. # -------------------------------------------------------------------------- -VERSION = "20.2.0b" +VERSION = "20.2.0" diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py index 61abf39b2f7..03aa4821e7d 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/models.py @@ -5,6 +5,5 @@ # license information. # -------------------------------------------------------------------------- from .v2017_07_01.models import * -from .v2022_07_02_preview.models import * from .v2019_04_30.models import * -# from .v2022_06_01.models import * +from .v2022_06_01.models import * diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/__init__.py index eb3d7ba7a26..37a5f9e02e6 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/__init__.py @@ -7,10 +7,14 @@ # -------------------------------------------------------------------------- from ._container_service_client import ContainerServiceClient -__all__ = ['ContainerServiceClient'] try: - from ._patch import patch_sdk # type: ignore - patch_sdk() + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import except ImportError: - pass + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk +__all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_configuration.py index 085ca045efa..aaf2d87e8ea 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_configuration.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_configuration.py @@ -6,21 +6,19 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import TYPE_CHECKING +from typing import Any, TYPE_CHECKING from azure.core.configuration import Configuration from azure.core.pipeline import policies -from azure.mgmt.core.policies import ARMHttpLoggingPolicy +from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports - from typing import Any - from azure.core.credentials import TokenCredential VERSION = "unknown" -class ContainerServiceClientConfiguration(Configuration): +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes """Configuration for ContainerServiceClient. Note that all parameters used to create this instance are saved as instance @@ -28,22 +26,22 @@ class ContainerServiceClientConfiguration(Configuration): :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials.TokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. :type subscription_id: str """ def __init__( self, - credential, # type: "TokenCredential" - subscription_id, # type: str - **kwargs # type: Any - ): - # type: (...) -> None + credential: "TokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) if credential is None: raise ValueError("Parameter 'credential' must not be None.") if subscription_id is None: raise ValueError("Parameter 'subscription_id' must not be None.") - super(ContainerServiceClientConfiguration, self).__init__(**kwargs) self.credential = credential self.subscription_id = subscription_id @@ -66,4 +64,4 @@ def _configure( self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) self.authentication_policy = kwargs.get('authentication_policy') if self.credential and not self.authentication_policy: - self.authentication_policy = policies.BearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) + self.authentication_policy = ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_container_service_client.py index 2e860be77ae..7946cd0a600 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_container_service_client.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_container_service_client.py @@ -6,74 +6,83 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import TYPE_CHECKING +from copy import deepcopy +from typing import Any, TYPE_CHECKING -from azure.mgmt.core import ARMPipelineClient from msrest import Deserializer, Serializer -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from typing import Any, Optional - - from azure.core.credentials import TokenCredential - from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.rest import HttpRequest, HttpResponse +from azure.mgmt.core import ARMPipelineClient +from . import models from ._configuration import ContainerServiceClientConfiguration from .operations import ContainerServicesOperations -from . import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials import TokenCredential -class ContainerServiceClient(object): +class ContainerServiceClient: """The Container Service Client. :ivar container_services: ContainerServicesOperations operations - :vartype container_services: azure.mgmt.containerservice.v2017_07_01.operations.ContainerServicesOperations + :vartype container_services: + azure.mgmt.containerservice.v2017_07_01.operations.ContainerServicesOperations :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials.TokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. :type subscription_id: str - :param str base_url: Service URL - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. """ def __init__( self, - credential, # type: "TokenCredential" - subscription_id, # type: str - base_url=None, # type: Optional[str] - **kwargs # type: Any - ): - # type: (...) -> None - if not base_url: - base_url = 'https://management.azure.com' - self._config = ContainerServiceClientConfiguration(credential, subscription_id, **kwargs) + credential: "TokenCredential", + subscription_id: str, + base_url: str = "https://management.azure.com", + **kwargs: Any + ) -> None: + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} self._serialize = Serializer(client_models) - self._serialize.client_side_validation = False self._deserialize = Deserializer(client_models) - + self._serialize.client_side_validation = False self.container_services = ContainerServicesOperations( - self._client, self._config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize + ) + - def _send_request(self, http_request, **kwargs): - # type: (HttpRequest, Any) -> HttpResponse + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> HttpResponse: """Runs the network request through the client's chained policies. - :param http_request: The network request you want to make. Required. - :type http_request: ~azure.core.pipeline.transport.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to True. + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.pipeline.transport.HttpResponse + :rtype: ~azure.core.rest.HttpResponse """ - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - http_request.url = self._client.format_url(http_request.url, **path_format_arguments) - stream = kwargs.pop("stream", True) - pipeline_response = self._client._pipeline.run(http_request, stream=stream, **kwargs) - return pipeline_response.http_response + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) def close(self): # type: () -> None diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_patch.py new file mode 100644 index 00000000000..74e48ecd07c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_patch.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +# This file is used for handwritten extensions to the generated code. Example: +# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md +def patch_sdk(): + pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_vendor.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_vendor.py new file mode 100644 index 00000000000..138f663c53a --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/_vendor.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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.pipeline.transport import HttpRequest + +def _convert_request(request, files=None): + data = request.content if not files else None + request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) + if files: + request.set_formdata_body(files) + return request + +def _format_url_section(template, **kwargs): + components = template.split("/") + while components: + try: + return template.format(**kwargs) + except KeyError as key: + formatted_components = template.split("/") + components = [ + c for c in formatted_components if "{}".format(key.args[0]) not in c + ] + template = "/".join(components) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/__init__.py index 4ad2bb20096..37a5f9e02e6 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/__init__.py @@ -7,4 +7,14 @@ # -------------------------------------------------------------------------- from ._container_service_client import ContainerServiceClient + +try: + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk __all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_configuration.py index fc5eb921630..a8fe4a9b5ef 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_configuration.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_configuration.py @@ -10,7 +10,7 @@ from azure.core.configuration import Configuration from azure.core.pipeline import policies -from azure.mgmt.core.policies import ARMHttpLoggingPolicy +from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy if TYPE_CHECKING: # pylint: disable=unused-import,ungrouped-imports @@ -18,7 +18,7 @@ VERSION = "unknown" -class ContainerServiceClientConfiguration(Configuration): +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes """Configuration for ContainerServiceClient. Note that all parameters used to create this instance are saved as instance @@ -26,7 +26,8 @@ class ContainerServiceClientConfiguration(Configuration): :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. :type subscription_id: str """ @@ -36,11 +37,11 @@ def __init__( subscription_id: str, **kwargs: Any ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) if credential is None: raise ValueError("Parameter 'credential' must not be None.") if subscription_id is None: raise ValueError("Parameter 'subscription_id' must not be None.") - super(ContainerServiceClientConfiguration, self).__init__(**kwargs) self.credential = credential self.subscription_id = subscription_id @@ -62,4 +63,4 @@ def _configure( self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) self.authentication_policy = kwargs.get('authentication_policy') if self.credential and not self.authentication_policy: - self.authentication_policy = policies.AsyncBearerTokenCredentialPolicy(self.credential, *self.credential_scopes, **kwargs) + self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_container_service_client.py index 3285c25911c..4dd58f78ab8 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_container_service_client.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_container_service_client.py @@ -6,70 +6,83 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any, Optional, TYPE_CHECKING +from copy import deepcopy +from typing import Any, Awaitable, TYPE_CHECKING -from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest -from azure.mgmt.core import AsyncARMPipelineClient from msrest import Deserializer, Serializer -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.mgmt.core import AsyncARMPipelineClient +from .. import models from ._configuration import ContainerServiceClientConfiguration from .operations import ContainerServicesOperations -from .. import models +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential -class ContainerServiceClient(object): +class ContainerServiceClient: """The Container Service Client. :ivar container_services: ContainerServicesOperations operations - :vartype container_services: azure.mgmt.containerservice.v2017_07_01.aio.operations.ContainerServicesOperations + :vartype container_services: + azure.mgmt.containerservice.v2017_07_01.aio.operations.ContainerServicesOperations :param credential: Credential needed for the client to connect to Azure. :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure subscription. The subscription ID forms part of the URI for every service call. + :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure + subscription. The subscription ID forms part of the URI for every service call. :type subscription_id: str - :param str base_url: Service URL - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. """ def __init__( self, credential: "AsyncTokenCredential", subscription_id: str, - base_url: Optional[str] = None, + base_url: str = "https://management.azure.com", **kwargs: Any ) -> None: - if not base_url: - base_url = 'https://management.azure.com' - self._config = ContainerServiceClientConfiguration(credential, subscription_id, **kwargs) + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) client_models = {k: v for k, v in models.__dict__.items() if isinstance(v, type)} self._serialize = Serializer(client_models) - self._serialize.client_side_validation = False self._deserialize = Deserializer(client_models) - + self._serialize.client_side_validation = False self.container_services = ContainerServicesOperations( - self._client, self._config, self._serialize, self._deserialize) + self._client, self._config, self._serialize, self._deserialize + ) - async def _send_request(self, http_request: HttpRequest, **kwargs: Any) -> AsyncHttpResponse: + + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: """Runs the network request through the client's chained policies. - :param http_request: The network request you want to make. Required. - :type http_request: ~azure.core.pipeline.transport.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to True. + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.pipeline.transport.AsyncHttpResponse + :rtype: ~azure.core.rest.AsyncHttpResponse """ - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - http_request.url = self._client.format_url(http_request.url, **path_format_arguments) - stream = kwargs.pop("stream", True) - pipeline_response = await self._client._pipeline.run(http_request, stream=stream, **kwargs) - return pipeline_response.http_response + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) async def close(self) -> None: await self._client.close() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_patch.py new file mode 100644 index 00000000000..74e48ecd07c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/_patch.py @@ -0,0 +1,31 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# +# Copyright (c) Microsoft Corporation. All rights reserved. +# +# The MIT License (MIT) +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the ""Software""), to +# deal in the Software without restriction, including without limitation the +# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +# sell copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice shall be included in +# all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. +# +# -------------------------------------------------------------------------- + +# This file is used for handwritten extensions to the generated code. Example: +# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md +def patch_sdk(): + pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/__init__.py index db0e90a3a5a..a96e407a7be 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/__init__.py @@ -8,6 +8,11 @@ from ._container_services_operations import ContainerServicesOperations +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk __all__ = [ 'ContainerServicesOperations', ] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_container_services_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_container_services_operations.py index a837c0c0626..7d2aae2df1a 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_container_services_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_container_services_operations.py @@ -1,3 +1,4 @@ +# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -5,92 +6,106 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Any, AsyncIterable, Callable, Dict, Generic, Optional, TypeVar, Union -import warnings +from typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast from azure.core.async_paging import AsyncItemPaged, AsyncList from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse, HttpRequest +from azure.core.pipeline.transport import AsyncHttpResponse from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling from ... import models as _models - +from ..._vendor import _convert_request +from ...operations._container_services_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_request, build_list_by_resource_group_request, build_list_orchestrators_request, build_list_request T = TypeVar('T') ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] class ContainerServicesOperations: - """ContainerServicesOperations async operations. - - You should not instantiate this class directly. Instead, you should create a Client instance that - instantiates it for you and attaches it as an attribute. + """ + .. warning:: + **DO NOT** instantiate this class directly. - :ivar models: Alias to model classes used in this operation group. - :type models: ~azure.mgmt.containerservice.v2017_07_01.models - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2017_07_01.aio.ContainerServiceClient`'s + :attr:`container_services` attribute. """ models = _models - def __init__(self, client, config, serializer, deserializer) -> None: - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self._config = config + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace def list( self, **kwargs: Any - ) -> AsyncIterable["_models.ContainerServiceListResult"]: + ) -> AsyncIterable[_models.ContainerServiceListResult]: """Gets a list of container services in the specified subscription. Gets a list of container services in the specified subscription. The operation returns properties of each container service including state, orchestrator, number of masters and agents, and FQDNs of masters and agents. + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either ContainerServiceListResult or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] + :return: An iterator like instance of either ContainerServiceListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerServiceListResult"] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerServiceListResult] + error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - + error_map.update(kwargs.pop('error_map', {}) or {}) def prepare_request(next_link=None): - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - if not next_link: - # Construct URL - url = self.list.metadata['url'] # type: ignore - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + else: - url = next_link - query_parameters = {} # type: Dict[str, Any] - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" return request async def extract_data(pipeline_response): - deserialized = self._deserialize('ContainerServiceListResult', pipeline_response) + deserialized = self._deserialize("ContainerServiceListResult", pipeline_response) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) @@ -99,7 +114,11 @@ async def extract_data(pipeline_response): async def get_next(next_link=None): request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -108,50 +127,52 @@ async def get_next(next_link=None): return pipeline_response + return AsyncItemPaged( get_next, extract_data ) - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/containerServices'} # type: ignore + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/containerServices"} # type: ignore async def _create_or_update_initial( self, resource_group_name: str, container_service_name: str, - parameters: "_models.ContainerService", + parameters: _models.ContainerService, **kwargs: Any - ) -> "_models.ContainerService": - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] + ) -> _models.ContainerService: error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - content_type = kwargs.pop("content_type", "application/json") - accept = "application/json" - - # Construct URL - url = self._create_or_update_initial.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - - body_content_kwargs = {} # type: Dict[str, Any] - body_content = self._serialize.body(parameters, 'ContainerService') - body_content_kwargs['content'] = body_content - request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] + + _json = self._serialize.body(parameters, 'ContainerService') + + request = build_create_or_update_request_initial( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200, 201, 202]: @@ -171,15 +192,18 @@ async def _create_or_update_initial( return cls(pipeline_response, deserialized, {}) return deserialized - _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + + @distributed_trace_async async def begin_create_or_update( self, resource_group_name: str, container_service_name: str, - parameters: "_models.ContainerService", + parameters: _models.ContainerService, **kwargs: Any - ) -> AsyncLROPoller["_models.ContainerService"]: + ) -> AsyncLROPoller[_models.ContainerService]: """Creates or updates a container service. Creates or updates a container service with the specified configuration of orchestrator, @@ -192,50 +216,64 @@ async def begin_create_or_update( :type container_service_name: str :param parameters: Parameters supplied to the Create or Update a Container Service operation. :type parameters: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerService + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncARMPolling. - Pass in False for this operation to not poll, or pass in your own initialized polling object for a personal polling strategy. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. - :return: An instance of AsyncLROPoller that returns either ContainerService or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] - :raises ~azure.core.exceptions.HttpResponseError: + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ContainerService or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] + :raises: ~azure.core.exceptions.HttpResponseError """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] lro_delay = kwargs.pop( 'polling_interval', self._config.polling_interval ) cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] if cont_token is None: - raw_result = await self._create_or_update_initial( + raw_result = await self._create_or_update_initial( # type: ignore resource_group_name=resource_group_name, container_service_name=container_service_name, parameters=parameters, + api_version=api_version, + content_type=content_type, cls=lambda x,y,z: x, + headers=_headers, + params=_params, **kwargs ) - kwargs.pop('error_map', None) - kwargs.pop('content_type', None) def get_long_running_output(pipeline_response): deserialized = self._deserialize('ContainerService', pipeline_response) - if cls: return cls(pipeline_response, deserialized, {}) return deserialized - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - if polling is True: polling_method = AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - elif polling is False: polling_method = AsyncNoPolling() + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) else: polling_method = polling if cont_token: return AsyncLROPoller.from_continuation_token( @@ -244,16 +282,17 @@ def get_long_running_output(pipeline_response): client=self._client, deserialization_callback=get_long_running_output ) - else: - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) - begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + @distributed_trace_async async def get( self, resource_group_name: str, container_service_name: str, **kwargs: Any - ) -> "_models.ContainerService": + ) -> _models.ContainerService: """Gets the properties of the specified container service. Gets the properties of the specified container service in the specified subscription and @@ -265,38 +304,43 @@ async def get( :param container_service_name: The name of the container service in the specified subscription and resource group. :type container_service_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ContainerService, or the result of cls(response) :rtype: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerService :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - - # Construct URL - url = self.get.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] + + + request = build_get_request( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.get(url, query_parameters, header_parameters) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -309,39 +353,45 @@ async def get( return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore - async def _delete_initial( + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + + async def _delete_initial( # pylint: disable=inconsistent-return-statements self, resource_group_name: str, container_service_name: str, **kwargs: Any ) -> None: - cls = kwargs.pop('cls', None) # type: ClsType[None] error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - - # Construct URL - url = self._delete_initial.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] - # Construct headers - header_parameters = {} # type: Dict[str, Any] + + request = build_delete_request_initial( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.delete(url, query_parameters, header_parameters) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [202, 204]: @@ -351,9 +401,11 @@ async def _delete_initial( if cls: return cls(pipeline_response, None, {}) - _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + - async def begin_delete( + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements self, resource_group_name: str, container_service_name: str, @@ -371,46 +423,57 @@ async def begin_delete( :param container_service_name: The name of the container service in the specified subscription and resource group. :type container_service_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncARMPolling. - Pass in False for this operation to not poll, or pass in your own initialized polling object for a personal polling strategy. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: + :raises: ~azure.core.exceptions.HttpResponseError """ - polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] lro_delay = kwargs.pop( 'polling_interval', self._config.polling_interval ) cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] if cont_token is None: - raw_result = await self._delete_initial( + raw_result = await self._delete_initial( # type: ignore resource_group_name=resource_group_name, container_service_name=container_service_name, + api_version=api_version, cls=lambda x,y,z: x, + headers=_headers, + params=_params, **kwargs ) - kwargs.pop('error_map', None) - kwargs.pop('content_type', None) def get_long_running_output(pipeline_response): if cls: return cls(pipeline_response, None, {}) - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - if polling is True: polling_method = AsyncARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - elif polling is False: polling_method = AsyncNoPolling() + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) else: polling_method = polling if cont_token: return AsyncLROPoller.from_continuation_token( @@ -419,15 +482,16 @@ def get_long_running_output(pipeline_response): client=self._client, deserialization_callback=get_long_running_output ) - else: - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) - begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + @distributed_trace def list_by_resource_group( self, resource_group_name: str, **kwargs: Any - ) -> AsyncIterable["_models.ContainerServiceListResult"]: + ) -> AsyncIterable[_models.ContainerServiceListResult]: """Gets a list of container services in the specified resource group. Gets a list of container services in the specified subscription and resource group. The @@ -436,45 +500,57 @@ def list_by_resource_group( :param resource_group_name: The name of the resource group. :type resource_group_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either ContainerServiceListResult or the result of cls(response) - :rtype: ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] + :return: An iterator like instance of either ContainerServiceListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerServiceListResult"] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerServiceListResult] + error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - + error_map.update(kwargs.pop('error_map', {}) or {}) def prepare_request(next_link=None): - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - if not next_link: - # Construct URL - url = self.list_by_resource_group.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + else: - url = next_link - query_parameters = {} # type: Dict[str, Any] - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" return request async def extract_data(pipeline_response): - deserialized = self._deserialize('ContainerServiceListResult', pipeline_response) + deserialized = self._deserialize("ContainerServiceListResult", pipeline_response) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) @@ -483,7 +559,11 @@ async def extract_data(pipeline_response): async def get_next(next_link=None): request = prepare_request(next_link) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -492,17 +572,19 @@ async def get_next(next_link=None): return pipeline_response + return AsyncItemPaged( get_next, extract_data ) - list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices'} # type: ignore + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices"} # type: ignore + @distributed_trace_async async def list_orchestrators( self, location: str, resource_type: Optional[str] = None, **kwargs: Any - ) -> "_models.OrchestratorVersionProfileListResult": + ) -> _models.OrchestratorVersionProfileListResult: """Gets a list of supported orchestrators in the specified subscription. Gets a list of supported orchestrators in the specified subscription. The operation returns @@ -512,40 +594,45 @@ async def list_orchestrators( :param location: The name of a supported Azure region. :type location: str :param resource_type: resource type for which the list of orchestrators needs to be returned. + Default value is None. :type resource_type: str + :keyword api_version: Api Version. Default value is "2019-04-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :return: OrchestratorVersionProfileListResult, or the result of cls(response) :rtype: ~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorVersionProfileListResult :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.OrchestratorVersionProfileListResult"] error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2019-04-01" - accept = "application/json" - - # Construct URL - url = self.list_orchestrators.metadata['url'] # type: ignore - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - 'location': self._serialize.url("location", location, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - if resource_type is not None: - query_parameters['resource-type'] = self._serialize.query("resource_type", resource_type, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OrchestratorVersionProfileListResult] + + + request = build_list_orchestrators_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + resource_type=resource_type, + template_url=self.list_orchestrators.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.get(url, query_parameters, header_parameters) - pipeline_response = await self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -558,4 +645,6 @@ async def list_orchestrators( return cls(pipeline_response, deserialized, {}) return deserialized - list_orchestrators.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/orchestrators'} # type: ignore + + list_orchestrators.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/orchestrators"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/aio/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/__init__.py index 756ee52d39f..22ff2933917 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/__init__.py @@ -6,44 +6,25 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -try: - from ._models_py3 import ContainerService - from ._models_py3 import ContainerServiceAgentPoolProfile - from ._models_py3 import ContainerServiceCustomProfile - from ._models_py3 import ContainerServiceDiagnosticsProfile - from ._models_py3 import ContainerServiceLinuxProfile - from ._models_py3 import ContainerServiceListResult - from ._models_py3 import ContainerServiceMasterProfile - from ._models_py3 import ContainerServiceOrchestratorProfile - from ._models_py3 import ContainerServicePrincipalProfile - from ._models_py3 import ContainerServiceSshConfiguration - from ._models_py3 import ContainerServiceSshPublicKey - from ._models_py3 import ContainerServiceVMDiagnostics - from ._models_py3 import ContainerServiceWindowsProfile - from ._models_py3 import KeyVaultSecretRef - from ._models_py3 import OrchestratorProfile - from ._models_py3 import OrchestratorVersionProfile - from ._models_py3 import OrchestratorVersionProfileListResult - from ._models_py3 import Resource -except (SyntaxError, ImportError): - from ._models import ContainerService # type: ignore - from ._models import ContainerServiceAgentPoolProfile # type: ignore - from ._models import ContainerServiceCustomProfile # type: ignore - from ._models import ContainerServiceDiagnosticsProfile # type: ignore - from ._models import ContainerServiceLinuxProfile # type: ignore - from ._models import ContainerServiceListResult # type: ignore - from ._models import ContainerServiceMasterProfile # type: ignore - from ._models import ContainerServiceOrchestratorProfile # type: ignore - from ._models import ContainerServicePrincipalProfile # type: ignore - from ._models import ContainerServiceSshConfiguration # type: ignore - from ._models import ContainerServiceSshPublicKey # type: ignore - from ._models import ContainerServiceVMDiagnostics # type: ignore - from ._models import ContainerServiceWindowsProfile # type: ignore - from ._models import KeyVaultSecretRef # type: ignore - from ._models import OrchestratorProfile # type: ignore - from ._models import OrchestratorVersionProfile # type: ignore - from ._models import OrchestratorVersionProfileListResult # type: ignore - from ._models import Resource # type: ignore +from ._models_py3 import ContainerService +from ._models_py3 import ContainerServiceAgentPoolProfile +from ._models_py3 import ContainerServiceCustomProfile +from ._models_py3 import ContainerServiceDiagnosticsProfile +from ._models_py3 import ContainerServiceLinuxProfile +from ._models_py3 import ContainerServiceListResult +from ._models_py3 import ContainerServiceMasterProfile +from ._models_py3 import ContainerServiceOrchestratorProfile +from ._models_py3 import ContainerServicePrincipalProfile +from ._models_py3 import ContainerServiceSshConfiguration +from ._models_py3 import ContainerServiceSshPublicKey +from ._models_py3 import ContainerServiceVMDiagnostics +from ._models_py3 import ContainerServiceWindowsProfile +from ._models_py3 import KeyVaultSecretRef +from ._models_py3 import OrchestratorProfile +from ._models_py3 import OrchestratorVersionProfile +from ._models_py3 import OrchestratorVersionProfileListResult +from ._models_py3 import Resource + from ._container_service_client_enums import ( ContainerServiceOrchestratorTypes, @@ -52,7 +33,9 @@ Count, OSType, ) - +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk __all__ = [ 'ContainerService', 'ContainerServiceAgentPoolProfile', @@ -78,3 +61,5 @@ 'Count', 'OSType', ] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_container_service_client_enums.py index a14dea47c37..0dc545173c2 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_container_service_client_enums.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_container_service_client_enums.py @@ -6,27 +6,11 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from enum import Enum, EnumMeta -from six import with_metaclass +from enum import Enum +from azure.core import CaseInsensitiveEnumMeta -class _CaseInsensitiveEnumMeta(EnumMeta): - def __getitem__(self, name): - return super().__getitem__(name.upper()) - def __getattr__(cls, name): - """Return the enum member matching `name` - We use __getattr__ instead of descriptors or inserting into the enum - class' __dict__ in order to support `name` and `value` being both - properties for enum members (which live in the class' __dict__) and - enum members themselves. - """ - try: - return cls._member_map_[name.upper()] - except KeyError: - raise AttributeError(name) - - -class ContainerServiceOrchestratorTypes(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): +class ContainerServiceOrchestratorTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): """The orchestrator to use to manage container service cluster resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. """ @@ -37,7 +21,7 @@ class ContainerServiceOrchestratorTypes(with_metaclass(_CaseInsensitiveEnumMeta, DOCKER_CE = "DockerCE" CUSTOM = "Custom" -class ContainerServiceStorageProfileTypes(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): +class ContainerServiceStorageProfileTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Storage profile specifies what kind of storage used. Choose from StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the orchestrator choice. """ @@ -45,7 +29,7 @@ class ContainerServiceStorageProfileTypes(with_metaclass(_CaseInsensitiveEnumMet STORAGE_ACCOUNT = "StorageAccount" MANAGED_DISKS = "ManagedDisks" -class ContainerServiceVMSizeTypes(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): +class ContainerServiceVMSizeTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Size of agent VMs. """ @@ -224,7 +208,7 @@ class ContainerServiceVMSizeTypes(with_metaclass(_CaseInsensitiveEnumMeta, str, STANDARD_NV24 = "Standard_NV24" STANDARD_NV6 = "Standard_NV6" -class Count(with_metaclass(_CaseInsensitiveEnumMeta, int, Enum)): +class Count(int, Enum, metaclass=CaseInsensitiveEnumMeta): """Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The default value is 1. """ @@ -233,7 +217,7 @@ class Count(with_metaclass(_CaseInsensitiveEnumMeta, int, Enum)): THREE = 3 FIVE = 5 -class OSType(with_metaclass(_CaseInsensitiveEnumMeta, str, Enum)): +class OSType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models.py deleted file mode 100755 index f4993afd77c..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models.py +++ /dev/null @@ -1,804 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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. -# -------------------------------------------------------------------------- - -import msrest.serialization - - -class Resource(msrest.serialization.Model): - """The Resource model definition. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id. - :vartype id: str - :ivar name: Resource name. - :vartype name: str - :ivar type: Resource type. - :vartype type: str - :param location: Required. Resource location. - :type location: str - :param tags: A set of tags. Resource tags. - :type tags: dict[str, str] - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'required': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - } - - def __init__( - self, - **kwargs - ): - super(Resource, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = kwargs['location'] - self.tags = kwargs.get('tags', None) - - -class ContainerService(Resource): - """Container service. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id. - :vartype id: str - :ivar name: Resource name. - :vartype name: str - :ivar type: Resource type. - :vartype type: str - :param location: Required. Resource location. - :type location: str - :param tags: A set of tags. Resource tags. - :type tags: dict[str, str] - :ivar provisioning_state: The current deployment or provisioning state, which only appears in - the response. - :vartype provisioning_state: str - :param orchestrator_profile: Profile for the container service orchestrator. - :type orchestrator_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorProfile - :param custom_profile: Properties to configure a custom container service cluster. - :type custom_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceCustomProfile - :param service_principal_profile: Information about a service principal identity for the - cluster to use for manipulating Azure APIs. Exact one of secret or keyVaultSecretRef need to be - specified. - :type service_principal_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServicePrincipalProfile - :param master_profile: Profile for the container service master. - :type master_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceMasterProfile - :param agent_pool_profiles: Properties of the agent pool. - :type agent_pool_profiles: - list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceAgentPoolProfile] - :param windows_profile: Profile for Windows VMs in the container service cluster. - :type windows_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceWindowsProfile - :param linux_profile: Profile for Linux VMs in the container service cluster. - :type linux_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceLinuxProfile - :param diagnostics_profile: Profile for diagnostics in the container service cluster. - :type diagnostics_profile: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceDiagnosticsProfile - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'required': True}, - 'provisioning_state': {'readonly': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, - 'orchestrator_profile': {'key': 'properties.orchestratorProfile', 'type': 'ContainerServiceOrchestratorProfile'}, - 'custom_profile': {'key': 'properties.customProfile', 'type': 'ContainerServiceCustomProfile'}, - 'service_principal_profile': {'key': 'properties.servicePrincipalProfile', 'type': 'ContainerServicePrincipalProfile'}, - 'master_profile': {'key': 'properties.masterProfile', 'type': 'ContainerServiceMasterProfile'}, - 'agent_pool_profiles': {'key': 'properties.agentPoolProfiles', 'type': '[ContainerServiceAgentPoolProfile]'}, - 'windows_profile': {'key': 'properties.windowsProfile', 'type': 'ContainerServiceWindowsProfile'}, - 'linux_profile': {'key': 'properties.linuxProfile', 'type': 'ContainerServiceLinuxProfile'}, - 'diagnostics_profile': {'key': 'properties.diagnosticsProfile', 'type': 'ContainerServiceDiagnosticsProfile'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerService, self).__init__(**kwargs) - self.provisioning_state = None - self.orchestrator_profile = kwargs.get('orchestrator_profile', None) - self.custom_profile = kwargs.get('custom_profile', None) - self.service_principal_profile = kwargs.get('service_principal_profile', None) - self.master_profile = kwargs.get('master_profile', None) - self.agent_pool_profiles = kwargs.get('agent_pool_profiles', None) - self.windows_profile = kwargs.get('windows_profile', None) - self.linux_profile = kwargs.get('linux_profile', None) - self.diagnostics_profile = kwargs.get('diagnostics_profile', None) - - -class ContainerServiceAgentPoolProfile(msrest.serialization.Model): - """Profile for the container service agent pool. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :param name: Required. Unique name of the agent pool profile in the context of the subscription - and resource group. - :type name: str - :param count: Number of agents (VMs) to host docker containers. Allowed values must be in the - range of 1 to 100 (inclusive). The default value is 1. - :type count: int - :param vm_size: Required. Size of agent VMs. Possible values include: "Standard_A1", - "Standard_A10", "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", - "Standard_A2m_v2", "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", - "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", - "Standard_A8m_v2", "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", - "Standard_B8ms", "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", - "Standard_D12", "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", - "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", - "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", - "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", - "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", - "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", - "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", - "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", - "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", - "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", - "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", - "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", - "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", - "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", - "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", - "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", - "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", - "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", - "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", - "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", - "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", - "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", - "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", - "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", - "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", - "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", - "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", - "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", - "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", - "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", - "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", - "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". - :type vm_size: str or - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes - :param os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every - machine in this master/agent pool. If you specify 0, it will apply the default osDisk size - according to the vmSize specified. - :type os_disk_size_gb: int - :param dns_prefix: DNS prefix to be used to create the FQDN for the agent pool. - :type dns_prefix: str - :ivar fqdn: FQDN for the agent pool. - :vartype fqdn: str - :param ports: Ports number array used to expose on this agent pool. The default opened ports - are different based on your choice of orchestrator. - :type ports: list[int] - :param storage_profile: Storage profile specifies what kind of storage used. Choose from - StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the - orchestrator choice. Possible values include: "StorageAccount", "ManagedDisks". - :type storage_profile: str or - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes - :param vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. - :type vnet_subnet_id: str - :param os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to - Linux. Possible values include: "Linux", "Windows". Default value: "Linux". - :type os_type: str or ~azure.mgmt.containerservice.v2017_07_01.models.OSType - """ - - _validation = { - 'name': {'required': True}, - 'count': {'maximum': 100, 'minimum': 1}, - 'vm_size': {'required': True}, - 'os_disk_size_gb': {'maximum': 1023, 'minimum': 0}, - 'fqdn': {'readonly': True}, - } - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'count': {'key': 'count', 'type': 'int'}, - 'vm_size': {'key': 'vmSize', 'type': 'str'}, - 'os_disk_size_gb': {'key': 'osDiskSizeGB', 'type': 'int'}, - 'dns_prefix': {'key': 'dnsPrefix', 'type': 'str'}, - 'fqdn': {'key': 'fqdn', 'type': 'str'}, - 'ports': {'key': 'ports', 'type': '[int]'}, - 'storage_profile': {'key': 'storageProfile', 'type': 'str'}, - 'vnet_subnet_id': {'key': 'vnetSubnetID', 'type': 'str'}, - 'os_type': {'key': 'osType', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceAgentPoolProfile, self).__init__(**kwargs) - self.name = kwargs['name'] - self.count = kwargs.get('count', 1) - self.vm_size = kwargs['vm_size'] - self.os_disk_size_gb = kwargs.get('os_disk_size_gb', None) - self.dns_prefix = kwargs.get('dns_prefix', None) - self.fqdn = None - self.ports = kwargs.get('ports', None) - self.storage_profile = kwargs.get('storage_profile', None) - self.vnet_subnet_id = kwargs.get('vnet_subnet_id', None) - self.os_type = kwargs.get('os_type', "Linux") - - -class ContainerServiceCustomProfile(msrest.serialization.Model): - """Properties to configure a custom container service cluster. - - All required parameters must be populated in order to send to Azure. - - :param orchestrator: Required. The name of the custom orchestrator to use. - :type orchestrator: str - """ - - _validation = { - 'orchestrator': {'required': True}, - } - - _attribute_map = { - 'orchestrator': {'key': 'orchestrator', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceCustomProfile, self).__init__(**kwargs) - self.orchestrator = kwargs['orchestrator'] - - -class ContainerServiceDiagnosticsProfile(msrest.serialization.Model): - """Profile for diagnostics on the container service cluster. - - All required parameters must be populated in order to send to Azure. - - :param vm_diagnostics: Required. Profile for diagnostics on the container service VMs. - :type vm_diagnostics: - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMDiagnostics - """ - - _validation = { - 'vm_diagnostics': {'required': True}, - } - - _attribute_map = { - 'vm_diagnostics': {'key': 'vmDiagnostics', 'type': 'ContainerServiceVMDiagnostics'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceDiagnosticsProfile, self).__init__(**kwargs) - self.vm_diagnostics = kwargs['vm_diagnostics'] - - -class ContainerServiceLinuxProfile(msrest.serialization.Model): - """Profile for Linux VMs in the container service cluster. - - All required parameters must be populated in order to send to Azure. - - :param admin_username: Required. The administrator username to use for Linux VMs. - :type admin_username: str - :param ssh: Required. SSH configuration for Linux-based VMs running on Azure. - :type ssh: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshConfiguration - """ - - _validation = { - 'admin_username': {'required': True, 'pattern': r'^[A-Za-z][-A-Za-z0-9_]*$'}, - 'ssh': {'required': True}, - } - - _attribute_map = { - 'admin_username': {'key': 'adminUsername', 'type': 'str'}, - 'ssh': {'key': 'ssh', 'type': 'ContainerServiceSshConfiguration'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceLinuxProfile, self).__init__(**kwargs) - self.admin_username = kwargs['admin_username'] - self.ssh = kwargs['ssh'] - - -class ContainerServiceListResult(msrest.serialization.Model): - """The response from the List Container Services operation. - - Variables are only populated by the server, and will be ignored when sending a request. - - :param value: The list of container services. - :type value: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] - :ivar next_link: The URL to get the next set of container service results. - :vartype next_link: str - """ - - _validation = { - 'next_link': {'readonly': True}, - } - - _attribute_map = { - 'value': {'key': 'value', 'type': '[ContainerService]'}, - 'next_link': {'key': 'nextLink', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceListResult, self).__init__(**kwargs) - self.value = kwargs.get('value', None) - self.next_link = None - - -class ContainerServiceMasterProfile(msrest.serialization.Model): - """Profile for the container service master. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :param count: Number of masters (VMs) in the container service cluster. Allowed values are 1, - 3, and 5. The default value is 1. Possible values include: 1, 3, 5. Default value: "1". - :type count: str or ~azure.mgmt.containerservice.v2017_07_01.models.Count - :param dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. - :type dns_prefix: str - :param vm_size: Required. Size of agent VMs. Possible values include: "Standard_A1", - "Standard_A10", "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", - "Standard_A2m_v2", "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", - "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", - "Standard_A8m_v2", "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", - "Standard_B8ms", "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", - "Standard_D12", "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", - "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", - "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", - "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", - "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", - "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", - "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", - "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", - "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", - "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", - "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", - "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", - "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", - "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", - "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", - "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", - "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", - "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", - "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", - "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", - "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", - "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", - "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", - "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", - "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", - "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", - "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", - "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", - "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", - "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", - "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", - "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". - :type vm_size: str or - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes - :param os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every - machine in this master/agent pool. If you specify 0, it will apply the default osDisk size - according to the vmSize specified. - :type os_disk_size_gb: int - :param vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. - :type vnet_subnet_id: str - :param first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static - ip of masters. - :type first_consecutive_static_ip: str - :param storage_profile: Storage profile specifies what kind of storage used. Choose from - StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the - orchestrator choice. Possible values include: "StorageAccount", "ManagedDisks". - :type storage_profile: str or - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes - :ivar fqdn: FQDN for the master pool. - :vartype fqdn: str - """ - - _validation = { - 'dns_prefix': {'required': True}, - 'vm_size': {'required': True}, - 'os_disk_size_gb': {'maximum': 1023, 'minimum': 0}, - 'fqdn': {'readonly': True}, - } - - _attribute_map = { - 'count': {'key': 'count', 'type': 'int'}, - 'dns_prefix': {'key': 'dnsPrefix', 'type': 'str'}, - 'vm_size': {'key': 'vmSize', 'type': 'str'}, - 'os_disk_size_gb': {'key': 'osDiskSizeGB', 'type': 'int'}, - 'vnet_subnet_id': {'key': 'vnetSubnetID', 'type': 'str'}, - 'first_consecutive_static_ip': {'key': 'firstConsecutiveStaticIP', 'type': 'str'}, - 'storage_profile': {'key': 'storageProfile', 'type': 'str'}, - 'fqdn': {'key': 'fqdn', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceMasterProfile, self).__init__(**kwargs) - self.count = kwargs.get('count', "1") - self.dns_prefix = kwargs['dns_prefix'] - self.vm_size = kwargs['vm_size'] - self.os_disk_size_gb = kwargs.get('os_disk_size_gb', None) - self.vnet_subnet_id = kwargs.get('vnet_subnet_id', None) - self.first_consecutive_static_ip = kwargs.get('first_consecutive_static_ip', "10.240.255.5") - self.storage_profile = kwargs.get('storage_profile', None) - self.fqdn = None - - -class ContainerServiceOrchestratorProfile(msrest.serialization.Model): - """Profile for the container service orchestrator. - - All required parameters must be populated in order to send to Azure. - - :param orchestrator_type: Required. The orchestrator to use to manage container service cluster - resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. Possible values - include: "Kubernetes", "Swarm", "DCOS", "DockerCE", "Custom". - :type orchestrator_type: str or - ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorTypes - :param orchestrator_version: The version of the orchestrator to use. You can specify the - major.minor.patch part of the actual version.For example, you can specify version as "1.6.11". - :type orchestrator_version: str - """ - - _validation = { - 'orchestrator_type': {'required': True}, - } - - _attribute_map = { - 'orchestrator_type': {'key': 'orchestratorType', 'type': 'str'}, - 'orchestrator_version': {'key': 'orchestratorVersion', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceOrchestratorProfile, self).__init__(**kwargs) - self.orchestrator_type = kwargs['orchestrator_type'] - self.orchestrator_version = kwargs.get('orchestrator_version', None) - - -class ContainerServicePrincipalProfile(msrest.serialization.Model): - """Information about a service principal identity for the cluster to use for manipulating Azure APIs. Either secret or keyVaultSecretRef must be specified. - - All required parameters must be populated in order to send to Azure. - - :param client_id: Required. The ID for the service principal. - :type client_id: str - :param secret: The secret password associated with the service principal in plain text. - :type secret: str - :param key_vault_secret_ref: Reference to a secret stored in Azure Key Vault. - :type key_vault_secret_ref: ~azure.mgmt.containerservice.v2017_07_01.models.KeyVaultSecretRef - """ - - _validation = { - 'client_id': {'required': True}, - } - - _attribute_map = { - 'client_id': {'key': 'clientId', 'type': 'str'}, - 'secret': {'key': 'secret', 'type': 'str'}, - 'key_vault_secret_ref': {'key': 'keyVaultSecretRef', 'type': 'KeyVaultSecretRef'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServicePrincipalProfile, self).__init__(**kwargs) - self.client_id = kwargs['client_id'] - self.secret = kwargs.get('secret', None) - self.key_vault_secret_ref = kwargs.get('key_vault_secret_ref', None) - - -class ContainerServiceSshConfiguration(msrest.serialization.Model): - """SSH configuration for Linux-based VMs running on Azure. - - All required parameters must be populated in order to send to Azure. - - :param public_keys: Required. The list of SSH public keys used to authenticate with Linux-based - VMs. Only expect one key specified. - :type public_keys: - list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshPublicKey] - """ - - _validation = { - 'public_keys': {'required': True}, - } - - _attribute_map = { - 'public_keys': {'key': 'publicKeys', 'type': '[ContainerServiceSshPublicKey]'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceSshConfiguration, self).__init__(**kwargs) - self.public_keys = kwargs['public_keys'] - - -class ContainerServiceSshPublicKey(msrest.serialization.Model): - """Contains information about SSH certificate public key data. - - All required parameters must be populated in order to send to Azure. - - :param key_data: Required. Certificate public key used to authenticate with VMs through SSH. - The certificate must be in PEM format with or without headers. - :type key_data: str - """ - - _validation = { - 'key_data': {'required': True}, - } - - _attribute_map = { - 'key_data': {'key': 'keyData', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceSshPublicKey, self).__init__(**kwargs) - self.key_data = kwargs['key_data'] - - -class ContainerServiceVMDiagnostics(msrest.serialization.Model): - """Profile for diagnostics on the container service VMs. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :param enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. - :type enabled: bool - :ivar storage_uri: The URI of the storage account where diagnostics are stored. - :vartype storage_uri: str - """ - - _validation = { - 'enabled': {'required': True}, - 'storage_uri': {'readonly': True}, - } - - _attribute_map = { - 'enabled': {'key': 'enabled', 'type': 'bool'}, - 'storage_uri': {'key': 'storageUri', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceVMDiagnostics, self).__init__(**kwargs) - self.enabled = kwargs['enabled'] - self.storage_uri = None - - -class ContainerServiceWindowsProfile(msrest.serialization.Model): - """Profile for Windows VMs in the container service cluster. - - All required parameters must be populated in order to send to Azure. - - :param admin_username: Required. The administrator username to use for Windows VMs. - :type admin_username: str - :param admin_password: Required. The administrator password to use for Windows VMs. - :type admin_password: str - """ - - _validation = { - 'admin_username': {'required': True, 'pattern': r'^[a-zA-Z0-9]+([._]?[a-zA-Z0-9]+)*$'}, - 'admin_password': {'required': True, 'pattern': r'^(?=.*[a-z])(?=.*[A-Z])(?=.*[!@#$%\^&\*\(\)])[a-zA-Z\d!@#$%\^&\*\(\)]{12,123}$'}, - } - - _attribute_map = { - 'admin_username': {'key': 'adminUsername', 'type': 'str'}, - 'admin_password': {'key': 'adminPassword', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(ContainerServiceWindowsProfile, self).__init__(**kwargs) - self.admin_username = kwargs['admin_username'] - self.admin_password = kwargs['admin_password'] - - -class KeyVaultSecretRef(msrest.serialization.Model): - """Reference to a secret stored in Azure Key Vault. - - All required parameters must be populated in order to send to Azure. - - :param vault_id: Required. Key vault identifier. - :type vault_id: str - :param secret_name: Required. The secret name. - :type secret_name: str - :param version: The secret version. - :type version: str - """ - - _validation = { - 'vault_id': {'required': True}, - 'secret_name': {'required': True}, - } - - _attribute_map = { - 'vault_id': {'key': 'vaultID', 'type': 'str'}, - 'secret_name': {'key': 'secretName', 'type': 'str'}, - 'version': {'key': 'version', 'type': 'str'}, - } - - def __init__( - self, - **kwargs - ): - super(KeyVaultSecretRef, self).__init__(**kwargs) - self.vault_id = kwargs['vault_id'] - self.secret_name = kwargs['secret_name'] - self.version = kwargs.get('version', None) - - -class OrchestratorProfile(msrest.serialization.Model): - """Contains information about orchestrator. - - All required parameters must be populated in order to send to Azure. - - :param orchestrator_type: Orchestrator type. - :type orchestrator_type: str - :param orchestrator_version: Required. Orchestrator version (major, minor, patch). - :type orchestrator_version: str - :param is_preview: Whether Kubernetes version is currently in preview. - :type is_preview: bool - """ - - _validation = { - 'orchestrator_version': {'required': True}, - } - - _attribute_map = { - 'orchestrator_type': {'key': 'orchestratorType', 'type': 'str'}, - 'orchestrator_version': {'key': 'orchestratorVersion', 'type': 'str'}, - 'is_preview': {'key': 'isPreview', 'type': 'bool'}, - } - - def __init__( - self, - **kwargs - ): - super(OrchestratorProfile, self).__init__(**kwargs) - self.orchestrator_type = kwargs.get('orchestrator_type', None) - self.orchestrator_version = kwargs['orchestrator_version'] - self.is_preview = kwargs.get('is_preview', None) - - -class OrchestratorVersionProfile(msrest.serialization.Model): - """The profile of an orchestrator and its available versions. - - All required parameters must be populated in order to send to Azure. - - :param orchestrator_type: Required. Orchestrator type. - :type orchestrator_type: str - :param orchestrator_version: Required. Orchestrator version (major, minor, patch). - :type orchestrator_version: str - :param default: Installed by default if version is not specified. - :type default: bool - :param is_preview: Whether Kubernetes version is currently in preview. - :type is_preview: bool - :param upgrades: The list of available upgrade versions. - :type upgrades: list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorProfile] - """ - - _validation = { - 'orchestrator_type': {'required': True}, - 'orchestrator_version': {'required': True}, - } - - _attribute_map = { - 'orchestrator_type': {'key': 'orchestratorType', 'type': 'str'}, - 'orchestrator_version': {'key': 'orchestratorVersion', 'type': 'str'}, - 'default': {'key': 'default', 'type': 'bool'}, - 'is_preview': {'key': 'isPreview', 'type': 'bool'}, - 'upgrades': {'key': 'upgrades', 'type': '[OrchestratorProfile]'}, - } - - def __init__( - self, - **kwargs - ): - super(OrchestratorVersionProfile, self).__init__(**kwargs) - self.orchestrator_type = kwargs['orchestrator_type'] - self.orchestrator_version = kwargs['orchestrator_version'] - self.default = kwargs.get('default', None) - self.is_preview = kwargs.get('is_preview', None) - self.upgrades = kwargs.get('upgrades', None) - - -class OrchestratorVersionProfileListResult(msrest.serialization.Model): - """The list of versions for supported orchestrators. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Id of the orchestrator version profile list result. - :vartype id: str - :ivar name: Name of the orchestrator version profile list result. - :vartype name: str - :ivar type: Type of the orchestrator version profile list result. - :vartype type: str - :param orchestrators: Required. List of orchestrator version profiles. - :type orchestrators: - list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorVersionProfile] - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'orchestrators': {'required': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'orchestrators': {'key': 'properties.orchestrators', 'type': '[OrchestratorVersionProfile]'}, - } - - def __init__( - self, - **kwargs - ): - super(OrchestratorVersionProfileListResult, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.orchestrators = kwargs['orchestrators'] diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models_py3.py index ee4699aca38..657fa541206 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_models_py3.py @@ -6,11 +6,13 @@ # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import Dict, List, Optional, Union +from typing import Dict, List, Optional, TYPE_CHECKING, Union import msrest.serialization -from ._container_service_client_enums import * +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + import __init__ as _models class Resource(msrest.serialization.Model): @@ -26,10 +28,10 @@ class Resource(msrest.serialization.Model): :vartype name: str :ivar type: Resource type. :vartype type: str - :param location: Required. Resource location. - :type location: str - :param tags: A set of tags. Resource tags. - :type tags: dict[str, str] + :ivar location: Required. Resource location. + :vartype location: str + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] """ _validation = { @@ -54,6 +56,12 @@ def __init__( tags: Optional[Dict[str, str]] = None, **kwargs ): + """ + :keyword location: Required. Resource location. + :paramtype location: str + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + """ super(Resource, self).__init__(**kwargs) self.id = None self.name = None @@ -75,38 +83,38 @@ class ContainerService(Resource): :vartype name: str :ivar type: Resource type. :vartype type: str - :param location: Required. Resource location. - :type location: str - :param tags: A set of tags. Resource tags. - :type tags: dict[str, str] + :ivar location: Required. Resource location. + :vartype location: str + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] :ivar provisioning_state: The current deployment or provisioning state, which only appears in the response. :vartype provisioning_state: str - :param orchestrator_profile: Profile for the container service orchestrator. - :type orchestrator_profile: + :ivar orchestrator_profile: Profile for the container service orchestrator. + :vartype orchestrator_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorProfile - :param custom_profile: Properties to configure a custom container service cluster. - :type custom_profile: + :ivar custom_profile: Properties to configure a custom container service cluster. + :vartype custom_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceCustomProfile - :param service_principal_profile: Information about a service principal identity for the - cluster to use for manipulating Azure APIs. Exact one of secret or keyVaultSecretRef need to be + :ivar service_principal_profile: Information about a service principal identity for the cluster + to use for manipulating Azure APIs. Exact one of secret or keyVaultSecretRef need to be specified. - :type service_principal_profile: + :vartype service_principal_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServicePrincipalProfile - :param master_profile: Profile for the container service master. - :type master_profile: + :ivar master_profile: Profile for the container service master. + :vartype master_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceMasterProfile - :param agent_pool_profiles: Properties of the agent pool. - :type agent_pool_profiles: + :ivar agent_pool_profiles: Properties of the agent pool. + :vartype agent_pool_profiles: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceAgentPoolProfile] - :param windows_profile: Profile for Windows VMs in the container service cluster. - :type windows_profile: + :ivar windows_profile: Profile for Windows VMs in the container service cluster. + :vartype windows_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceWindowsProfile - :param linux_profile: Profile for Linux VMs in the container service cluster. - :type linux_profile: + :ivar linux_profile: Profile for Linux VMs in the container service cluster. + :vartype linux_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceLinuxProfile - :param diagnostics_profile: Profile for diagnostics in the container service cluster. - :type diagnostics_profile: + :ivar diagnostics_profile: Profile for diagnostics in the container service cluster. + :vartype diagnostics_profile: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceDiagnosticsProfile """ @@ -140,16 +148,48 @@ def __init__( *, location: str, tags: Optional[Dict[str, str]] = None, - orchestrator_profile: Optional["ContainerServiceOrchestratorProfile"] = None, - custom_profile: Optional["ContainerServiceCustomProfile"] = None, - service_principal_profile: Optional["ContainerServicePrincipalProfile"] = None, - master_profile: Optional["ContainerServiceMasterProfile"] = None, - agent_pool_profiles: Optional[List["ContainerServiceAgentPoolProfile"]] = None, - windows_profile: Optional["ContainerServiceWindowsProfile"] = None, - linux_profile: Optional["ContainerServiceLinuxProfile"] = None, - diagnostics_profile: Optional["ContainerServiceDiagnosticsProfile"] = None, + orchestrator_profile: Optional["_models.ContainerServiceOrchestratorProfile"] = None, + custom_profile: Optional["_models.ContainerServiceCustomProfile"] = None, + service_principal_profile: Optional["_models.ContainerServicePrincipalProfile"] = None, + master_profile: Optional["_models.ContainerServiceMasterProfile"] = None, + agent_pool_profiles: Optional[List["_models.ContainerServiceAgentPoolProfile"]] = None, + windows_profile: Optional["_models.ContainerServiceWindowsProfile"] = None, + linux_profile: Optional["_models.ContainerServiceLinuxProfile"] = None, + diagnostics_profile: Optional["_models.ContainerServiceDiagnosticsProfile"] = None, **kwargs ): + """ + :keyword location: Required. Resource location. + :paramtype location: str + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword orchestrator_profile: Profile for the container service orchestrator. + :paramtype orchestrator_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorProfile + :keyword custom_profile: Properties to configure a custom container service cluster. + :paramtype custom_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceCustomProfile + :keyword service_principal_profile: Information about a service principal identity for the + cluster to use for manipulating Azure APIs. Exact one of secret or keyVaultSecretRef need to be + specified. + :paramtype service_principal_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServicePrincipalProfile + :keyword master_profile: Profile for the container service master. + :paramtype master_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceMasterProfile + :keyword agent_pool_profiles: Properties of the agent pool. + :paramtype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceAgentPoolProfile] + :keyword windows_profile: Profile for Windows VMs in the container service cluster. + :paramtype windows_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceWindowsProfile + :keyword linux_profile: Profile for Linux VMs in the container service cluster. + :paramtype linux_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceLinuxProfile + :keyword diagnostics_profile: Profile for diagnostics in the container service cluster. + :paramtype diagnostics_profile: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceDiagnosticsProfile + """ super(ContainerService, self).__init__(location=location, tags=tags, **kwargs) self.provisioning_state = None self.orchestrator_profile = orchestrator_profile @@ -169,19 +209,19 @@ class ContainerServiceAgentPoolProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param name: Required. Unique name of the agent pool profile in the context of the subscription + :ivar name: Required. Unique name of the agent pool profile in the context of the subscription and resource group. - :type name: str - :param count: Number of agents (VMs) to host docker containers. Allowed values must be in the + :vartype name: str + :ivar count: Number of agents (VMs) to host docker containers. Allowed values must be in the range of 1 to 100 (inclusive). The default value is 1. - :type count: int - :param vm_size: Required. Size of agent VMs. Possible values include: "Standard_A1", - "Standard_A10", "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", - "Standard_A2m_v2", "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", - "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", - "Standard_A8m_v2", "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", - "Standard_B8ms", "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", - "Standard_D12", "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + :vartype count: int + :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", @@ -213,29 +253,29 @@ class ContainerServiceAgentPoolProfile(msrest.serialization.Model): "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". - :type vm_size: str or + :vartype vm_size: str or ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes - :param os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every - machine in this master/agent pool. If you specify 0, it will apply the default osDisk size - according to the vmSize specified. - :type os_disk_size_gb: int - :param dns_prefix: DNS prefix to be used to create the FQDN for the agent pool. - :type dns_prefix: str + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in this master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar dns_prefix: DNS prefix to be used to create the FQDN for the agent pool. + :vartype dns_prefix: str :ivar fqdn: FQDN for the agent pool. :vartype fqdn: str - :param ports: Ports number array used to expose on this agent pool. The default opened ports - are different based on your choice of orchestrator. - :type ports: list[int] - :param storage_profile: Storage profile specifies what kind of storage used. Choose from + :ivar ports: Ports number array used to expose on this agent pool. The default opened ports are + different based on your choice of orchestrator. + :vartype ports: list[int] + :ivar storage_profile: Storage profile specifies what kind of storage used. Choose from StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the - orchestrator choice. Possible values include: "StorageAccount", "ManagedDisks". - :type storage_profile: str or + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :vartype storage_profile: str or ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes - :param vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. - :type vnet_subnet_id: str - :param os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to - Linux. Possible values include: "Linux", "Windows". Default value: "Linux". - :type os_type: str or ~azure.mgmt.containerservice.v2017_07_01.models.OSType + :ivar vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :vartype vnet_subnet_id: str + :ivar os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to + Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2017_07_01.models.OSType """ _validation = { @@ -263,16 +303,83 @@ def __init__( self, *, name: str, - vm_size: Union[str, "ContainerServiceVMSizeTypes"], + vm_size: Union[str, "_models.ContainerServiceVMSizeTypes"], count: Optional[int] = 1, os_disk_size_gb: Optional[int] = None, dns_prefix: Optional[str] = None, ports: Optional[List[int]] = None, - storage_profile: Optional[Union[str, "ContainerServiceStorageProfileTypes"]] = None, + storage_profile: Optional[Union[str, "_models.ContainerServiceStorageProfileTypes"]] = None, vnet_subnet_id: Optional[str] = None, - os_type: Optional[Union[str, "OSType"]] = "Linux", + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", **kwargs ): + """ + :keyword name: Required. Unique name of the agent pool profile in the context of the + subscription and resource group. + :paramtype name: str + :keyword count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 1 to 100 (inclusive). The default value is 1. + :paramtype count: int + :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", + "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", + "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", + "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", + "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", + "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", + "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", + "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", + "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", + "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", + "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", + "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", + "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", + "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", + "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", + "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", + "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", + "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", + "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", + "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", + "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", + "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", + "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", + "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", + "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", + "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", + "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", + "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", + "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", + "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", + "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". + :paramtype vm_size: str or + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in this master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword dns_prefix: DNS prefix to be used to create the FQDN for the agent pool. + :paramtype dns_prefix: str + :keyword ports: Ports number array used to expose on this agent pool. The default opened ports + are different based on your choice of orchestrator. + :paramtype ports: list[int] + :keyword storage_profile: Storage profile specifies what kind of storage used. Choose from + StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :paramtype storage_profile: str or + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes + :keyword vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :paramtype vnet_subnet_id: str + :keyword os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default + to Linux. Known values are: "Linux", "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2017_07_01.models.OSType + """ super(ContainerServiceAgentPoolProfile, self).__init__(**kwargs) self.name = name self.count = count @@ -291,8 +398,8 @@ class ContainerServiceCustomProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param orchestrator: Required. The name of the custom orchestrator to use. - :type orchestrator: str + :ivar orchestrator: Required. The name of the custom orchestrator to use. + :vartype orchestrator: str """ _validation = { @@ -309,6 +416,10 @@ def __init__( orchestrator: str, **kwargs ): + """ + :keyword orchestrator: Required. The name of the custom orchestrator to use. + :paramtype orchestrator: str + """ super(ContainerServiceCustomProfile, self).__init__(**kwargs) self.orchestrator = orchestrator @@ -318,8 +429,8 @@ class ContainerServiceDiagnosticsProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param vm_diagnostics: Required. Profile for diagnostics on the container service VMs. - :type vm_diagnostics: + :ivar vm_diagnostics: Required. Profile for diagnostics on the container service VMs. + :vartype vm_diagnostics: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMDiagnostics """ @@ -334,9 +445,14 @@ class ContainerServiceDiagnosticsProfile(msrest.serialization.Model): def __init__( self, *, - vm_diagnostics: "ContainerServiceVMDiagnostics", + vm_diagnostics: "_models.ContainerServiceVMDiagnostics", **kwargs ): + """ + :keyword vm_diagnostics: Required. Profile for diagnostics on the container service VMs. + :paramtype vm_diagnostics: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMDiagnostics + """ super(ContainerServiceDiagnosticsProfile, self).__init__(**kwargs) self.vm_diagnostics = vm_diagnostics @@ -346,10 +462,10 @@ class ContainerServiceLinuxProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param admin_username: Required. The administrator username to use for Linux VMs. - :type admin_username: str - :param ssh: Required. SSH configuration for Linux-based VMs running on Azure. - :type ssh: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshConfiguration + :ivar admin_username: Required. The administrator username to use for Linux VMs. + :vartype admin_username: str + :ivar ssh: Required. SSH configuration for Linux-based VMs running on Azure. + :vartype ssh: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshConfiguration """ _validation = { @@ -366,9 +482,16 @@ def __init__( self, *, admin_username: str, - ssh: "ContainerServiceSshConfiguration", + ssh: "_models.ContainerServiceSshConfiguration", **kwargs ): + """ + :keyword admin_username: Required. The administrator username to use for Linux VMs. + :paramtype admin_username: str + :keyword ssh: Required. SSH configuration for Linux-based VMs running on Azure. + :paramtype ssh: + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshConfiguration + """ super(ContainerServiceLinuxProfile, self).__init__(**kwargs) self.admin_username = admin_username self.ssh = ssh @@ -379,8 +502,8 @@ class ContainerServiceListResult(msrest.serialization.Model): Variables are only populated by the server, and will be ignored when sending a request. - :param value: The list of container services. - :type value: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] + :ivar value: The list of container services. + :vartype value: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] :ivar next_link: The URL to get the next set of container service results. :vartype next_link: str """ @@ -397,9 +520,13 @@ class ContainerServiceListResult(msrest.serialization.Model): def __init__( self, *, - value: Optional[List["ContainerService"]] = None, + value: Optional[List["_models.ContainerService"]] = None, **kwargs ): + """ + :keyword value: The list of container services. + :paramtype value: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] + """ super(ContainerServiceListResult, self).__init__(**kwargs) self.value = value self.next_link = None @@ -412,18 +539,18 @@ class ContainerServiceMasterProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param count: Number of masters (VMs) in the container service cluster. Allowed values are 1, - 3, and 5. The default value is 1. Possible values include: 1, 3, 5. Default value: "1". - :type count: str or ~azure.mgmt.containerservice.v2017_07_01.models.Count - :param dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. - :type dns_prefix: str - :param vm_size: Required. Size of agent VMs. Possible values include: "Standard_A1", - "Standard_A10", "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", - "Standard_A2m_v2", "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", - "Standard_A5", "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", - "Standard_A8m_v2", "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", - "Standard_B8ms", "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", - "Standard_D12", "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + :ivar count: Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, + and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". + :vartype count: int or ~azure.mgmt.containerservice.v2017_07_01.models.Count + :ivar dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. + :vartype dns_prefix: str + :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", @@ -455,21 +582,21 @@ class ContainerServiceMasterProfile(msrest.serialization.Model): "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". - :type vm_size: str or + :vartype vm_size: str or ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes - :param os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every - machine in this master/agent pool. If you specify 0, it will apply the default osDisk size - according to the vmSize specified. - :type os_disk_size_gb: int - :param vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. - :type vnet_subnet_id: str - :param first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static - ip of masters. - :type first_consecutive_static_ip: str - :param storage_profile: Storage profile specifies what kind of storage used. Choose from + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in this master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :vartype vnet_subnet_id: str + :ivar first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static ip + of masters. + :vartype first_consecutive_static_ip: str + :ivar storage_profile: Storage profile specifies what kind of storage used. Choose from StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the - orchestrator choice. Possible values include: "StorageAccount", "ManagedDisks". - :type storage_profile: str or + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :vartype storage_profile: str or ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes :ivar fqdn: FQDN for the master pool. :vartype fqdn: str @@ -497,14 +624,75 @@ def __init__( self, *, dns_prefix: str, - vm_size: Union[str, "ContainerServiceVMSizeTypes"], - count: Optional[Union[int, "Count"]] = "1", + vm_size: Union[str, "_models.ContainerServiceVMSizeTypes"], + count: Optional[Union[int, "_models.Count"]] = 1, os_disk_size_gb: Optional[int] = None, vnet_subnet_id: Optional[str] = None, first_consecutive_static_ip: Optional[str] = "10.240.255.5", - storage_profile: Optional[Union[str, "ContainerServiceStorageProfileTypes"]] = None, + storage_profile: Optional[Union[str, "_models.ContainerServiceStorageProfileTypes"]] = None, **kwargs ): + """ + :keyword count: Number of masters (VMs) in the container service cluster. Allowed values are 1, + 3, and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". + :paramtype count: int or ~azure.mgmt.containerservice.v2017_07_01.models.Count + :keyword dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. + :paramtype dns_prefix: str + :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", + "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", + "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", + "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", + "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", + "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", + "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", + "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", + "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", + "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", + "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", + "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", + "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", + "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", + "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", + "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", + "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", + "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", + "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", + "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", + "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", + "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", + "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", + "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", + "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", + "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", + "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", + "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", + "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", + "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", + "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". + :paramtype vm_size: str or + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceVMSizeTypes + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in this master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :paramtype vnet_subnet_id: str + :keyword first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static + ip of masters. + :paramtype first_consecutive_static_ip: str + :keyword storage_profile: Storage profile specifies what kind of storage used. Choose from + StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :paramtype storage_profile: str or + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceStorageProfileTypes + """ super(ContainerServiceMasterProfile, self).__init__(**kwargs) self.count = count self.dns_prefix = dns_prefix @@ -521,14 +709,14 @@ class ContainerServiceOrchestratorProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param orchestrator_type: Required. The orchestrator to use to manage container service cluster - resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. Possible values - include: "Kubernetes", "Swarm", "DCOS", "DockerCE", "Custom". - :type orchestrator_type: str or + :ivar orchestrator_type: Required. The orchestrator to use to manage container service cluster + resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. Known values are: + "Kubernetes", "Swarm", "DCOS", "DockerCE", "Custom". + :vartype orchestrator_type: str or ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorTypes - :param orchestrator_version: The version of the orchestrator to use. You can specify the + :ivar orchestrator_version: The version of the orchestrator to use. You can specify the major.minor.patch part of the actual version.For example, you can specify version as "1.6.11". - :type orchestrator_version: str + :vartype orchestrator_version: str """ _validation = { @@ -543,10 +731,20 @@ class ContainerServiceOrchestratorProfile(msrest.serialization.Model): def __init__( self, *, - orchestrator_type: Union[str, "ContainerServiceOrchestratorTypes"], + orchestrator_type: Union[str, "_models.ContainerServiceOrchestratorTypes"], orchestrator_version: Optional[str] = None, **kwargs ): + """ + :keyword orchestrator_type: Required. The orchestrator to use to manage container service + cluster resources. Valid values are Kubernetes, Swarm, DCOS, DockerCE and Custom. Known values + are: "Kubernetes", "Swarm", "DCOS", "DockerCE", "Custom". + :paramtype orchestrator_type: str or + ~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceOrchestratorTypes + :keyword orchestrator_version: The version of the orchestrator to use. You can specify the + major.minor.patch part of the actual version.For example, you can specify version as "1.6.11". + :paramtype orchestrator_version: str + """ super(ContainerServiceOrchestratorProfile, self).__init__(**kwargs) self.orchestrator_type = orchestrator_type self.orchestrator_version = orchestrator_version @@ -557,12 +755,13 @@ class ContainerServicePrincipalProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param client_id: Required. The ID for the service principal. - :type client_id: str - :param secret: The secret password associated with the service principal in plain text. - :type secret: str - :param key_vault_secret_ref: Reference to a secret stored in Azure Key Vault. - :type key_vault_secret_ref: ~azure.mgmt.containerservice.v2017_07_01.models.KeyVaultSecretRef + :ivar client_id: Required. The ID for the service principal. + :vartype client_id: str + :ivar secret: The secret password associated with the service principal in plain text. + :vartype secret: str + :ivar key_vault_secret_ref: Reference to a secret stored in Azure Key Vault. + :vartype key_vault_secret_ref: + ~azure.mgmt.containerservice.v2017_07_01.models.KeyVaultSecretRef """ _validation = { @@ -580,9 +779,18 @@ def __init__( *, client_id: str, secret: Optional[str] = None, - key_vault_secret_ref: Optional["KeyVaultSecretRef"] = None, + key_vault_secret_ref: Optional["_models.KeyVaultSecretRef"] = None, **kwargs ): + """ + :keyword client_id: Required. The ID for the service principal. + :paramtype client_id: str + :keyword secret: The secret password associated with the service principal in plain text. + :paramtype secret: str + :keyword key_vault_secret_ref: Reference to a secret stored in Azure Key Vault. + :paramtype key_vault_secret_ref: + ~azure.mgmt.containerservice.v2017_07_01.models.KeyVaultSecretRef + """ super(ContainerServicePrincipalProfile, self).__init__(**kwargs) self.client_id = client_id self.secret = secret @@ -594,9 +802,9 @@ class ContainerServiceSshConfiguration(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param public_keys: Required. The list of SSH public keys used to authenticate with Linux-based + :ivar public_keys: Required. The list of SSH public keys used to authenticate with Linux-based VMs. Only expect one key specified. - :type public_keys: + :vartype public_keys: list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshPublicKey] """ @@ -611,9 +819,15 @@ class ContainerServiceSshConfiguration(msrest.serialization.Model): def __init__( self, *, - public_keys: List["ContainerServiceSshPublicKey"], + public_keys: List["_models.ContainerServiceSshPublicKey"], **kwargs ): + """ + :keyword public_keys: Required. The list of SSH public keys used to authenticate with + Linux-based VMs. Only expect one key specified. + :paramtype public_keys: + list[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceSshPublicKey] + """ super(ContainerServiceSshConfiguration, self).__init__(**kwargs) self.public_keys = public_keys @@ -623,9 +837,9 @@ class ContainerServiceSshPublicKey(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param key_data: Required. Certificate public key used to authenticate with VMs through SSH. - The certificate must be in PEM format with or without headers. - :type key_data: str + :ivar key_data: Required. Certificate public key used to authenticate with VMs through SSH. The + certificate must be in PEM format with or without headers. + :vartype key_data: str """ _validation = { @@ -642,6 +856,11 @@ def __init__( key_data: str, **kwargs ): + """ + :keyword key_data: Required. Certificate public key used to authenticate with VMs through SSH. + The certificate must be in PEM format with or without headers. + :paramtype key_data: str + """ super(ContainerServiceSshPublicKey, self).__init__(**kwargs) self.key_data = key_data @@ -653,8 +872,8 @@ class ContainerServiceVMDiagnostics(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. - :type enabled: bool + :ivar enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. + :vartype enabled: bool :ivar storage_uri: The URI of the storage account where diagnostics are stored. :vartype storage_uri: str """ @@ -675,6 +894,10 @@ def __init__( enabled: bool, **kwargs ): + """ + :keyword enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. + :paramtype enabled: bool + """ super(ContainerServiceVMDiagnostics, self).__init__(**kwargs) self.enabled = enabled self.storage_uri = None @@ -685,10 +908,10 @@ class ContainerServiceWindowsProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param admin_username: Required. The administrator username to use for Windows VMs. - :type admin_username: str - :param admin_password: Required. The administrator password to use for Windows VMs. - :type admin_password: str + :ivar admin_username: Required. The administrator username to use for Windows VMs. + :vartype admin_username: str + :ivar admin_password: Required. The administrator password to use for Windows VMs. + :vartype admin_password: str """ _validation = { @@ -708,6 +931,12 @@ def __init__( admin_password: str, **kwargs ): + """ + :keyword admin_username: Required. The administrator username to use for Windows VMs. + :paramtype admin_username: str + :keyword admin_password: Required. The administrator password to use for Windows VMs. + :paramtype admin_password: str + """ super(ContainerServiceWindowsProfile, self).__init__(**kwargs) self.admin_username = admin_username self.admin_password = admin_password @@ -718,12 +947,12 @@ class KeyVaultSecretRef(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param vault_id: Required. Key vault identifier. - :type vault_id: str - :param secret_name: Required. The secret name. - :type secret_name: str - :param version: The secret version. - :type version: str + :ivar vault_id: Required. Key vault identifier. + :vartype vault_id: str + :ivar secret_name: Required. The secret name. + :vartype secret_name: str + :ivar version: The secret version. + :vartype version: str """ _validation = { @@ -745,6 +974,14 @@ def __init__( version: Optional[str] = None, **kwargs ): + """ + :keyword vault_id: Required. Key vault identifier. + :paramtype vault_id: str + :keyword secret_name: Required. The secret name. + :paramtype secret_name: str + :keyword version: The secret version. + :paramtype version: str + """ super(KeyVaultSecretRef, self).__init__(**kwargs) self.vault_id = vault_id self.secret_name = secret_name @@ -756,12 +993,12 @@ class OrchestratorProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param orchestrator_type: Orchestrator type. - :type orchestrator_type: str - :param orchestrator_version: Required. Orchestrator version (major, minor, patch). - :type orchestrator_version: str - :param is_preview: Whether Kubernetes version is currently in preview. - :type is_preview: bool + :ivar orchestrator_type: Orchestrator type. + :vartype orchestrator_type: str + :ivar orchestrator_version: Required. Orchestrator version (major, minor, patch). + :vartype orchestrator_version: str + :ivar is_preview: Whether Kubernetes version is currently in preview. + :vartype is_preview: bool """ _validation = { @@ -782,6 +1019,14 @@ def __init__( is_preview: Optional[bool] = None, **kwargs ): + """ + :keyword orchestrator_type: Orchestrator type. + :paramtype orchestrator_type: str + :keyword orchestrator_version: Required. Orchestrator version (major, minor, patch). + :paramtype orchestrator_version: str + :keyword is_preview: Whether Kubernetes version is currently in preview. + :paramtype is_preview: bool + """ super(OrchestratorProfile, self).__init__(**kwargs) self.orchestrator_type = orchestrator_type self.orchestrator_version = orchestrator_version @@ -793,16 +1038,16 @@ class OrchestratorVersionProfile(msrest.serialization.Model): All required parameters must be populated in order to send to Azure. - :param orchestrator_type: Required. Orchestrator type. - :type orchestrator_type: str - :param orchestrator_version: Required. Orchestrator version (major, minor, patch). - :type orchestrator_version: str - :param default: Installed by default if version is not specified. - :type default: bool - :param is_preview: Whether Kubernetes version is currently in preview. - :type is_preview: bool - :param upgrades: The list of available upgrade versions. - :type upgrades: list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorProfile] + :ivar orchestrator_type: Required. Orchestrator type. + :vartype orchestrator_type: str + :ivar orchestrator_version: Required. Orchestrator version (major, minor, patch). + :vartype orchestrator_version: str + :ivar default: Installed by default if version is not specified. + :vartype default: bool + :ivar is_preview: Whether Kubernetes version is currently in preview. + :vartype is_preview: bool + :ivar upgrades: The list of available upgrade versions. + :vartype upgrades: list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorProfile] """ _validation = { @@ -825,9 +1070,21 @@ def __init__( orchestrator_version: str, default: Optional[bool] = None, is_preview: Optional[bool] = None, - upgrades: Optional[List["OrchestratorProfile"]] = None, + upgrades: Optional[List["_models.OrchestratorProfile"]] = None, **kwargs ): + """ + :keyword orchestrator_type: Required. Orchestrator type. + :paramtype orchestrator_type: str + :keyword orchestrator_version: Required. Orchestrator version (major, minor, patch). + :paramtype orchestrator_version: str + :keyword default: Installed by default if version is not specified. + :paramtype default: bool + :keyword is_preview: Whether Kubernetes version is currently in preview. + :paramtype is_preview: bool + :keyword upgrades: The list of available upgrade versions. + :paramtype upgrades: list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorProfile] + """ super(OrchestratorVersionProfile, self).__init__(**kwargs) self.orchestrator_type = orchestrator_type self.orchestrator_version = orchestrator_version @@ -849,8 +1106,8 @@ class OrchestratorVersionProfileListResult(msrest.serialization.Model): :vartype name: str :ivar type: Type of the orchestrator version profile list result. :vartype type: str - :param orchestrators: Required. List of orchestrator version profiles. - :type orchestrators: + :ivar orchestrators: Required. List of orchestrator version profiles. + :vartype orchestrators: list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorVersionProfile] """ @@ -871,9 +1128,14 @@ class OrchestratorVersionProfileListResult(msrest.serialization.Model): def __init__( self, *, - orchestrators: List["OrchestratorVersionProfile"], + orchestrators: List["_models.OrchestratorVersionProfile"], **kwargs ): + """ + :keyword orchestrators: Required. List of orchestrator version profiles. + :paramtype orchestrators: + list[~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorVersionProfile] + """ super(OrchestratorVersionProfileListResult, self).__init__(**kwargs) self.id = None self.name = None diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/models/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/__init__.py index db0e90a3a5a..a96e407a7be 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/__init__.py @@ -8,6 +8,11 @@ from ._container_services_operations import ContainerServicesOperations +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk __all__ = [ 'ContainerServicesOperations', ] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_container_services_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_container_services_operations.py index 93392d039d2..cb6bfc42425 100755 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_container_services_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_container_services_operations.py @@ -1,3 +1,4 @@ +# pylint: disable=too-many-lines # coding=utf-8 # -------------------------------------------------------------------------- # Copyright (c) Microsoft Corporation. All rights reserved. @@ -5,97 +6,327 @@ # Code generated by Microsoft (R) AutoRest Code Generator. # Changes may cause incorrect behavior and will be lost if the code is regenerated. # -------------------------------------------------------------------------- -from typing import TYPE_CHECKING -import warnings +from typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error from azure.core.paging import ItemPaged from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpRequest, HttpResponse +from azure.core.pipeline.transport import HttpResponse from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict from azure.mgmt.core.exceptions import ARMErrorFormat from azure.mgmt.core.polling.arm_polling import ARMPolling from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/containerServices") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request_initial( + resource_group_name: str, + container_service_name: str, + subscription_id: str, + *, + json: Optional[_models.ContainerService] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}") # pylint: disable=line-too-long + path_format_arguments = { + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str'), + "containerServiceName": _SERIALIZER.url("container_service_name", container_service_name, 'str'), + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_get_request( + resource_group_name: str, + container_service_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}") # pylint: disable=line-too-long + path_format_arguments = { + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str'), + "containerServiceName": _SERIALIZER.url("container_service_name", container_service_name, 'str'), + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_delete_request_initial( + resource_group_name: str, + container_service_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}") # pylint: disable=line-too-long + path_format_arguments = { + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str'), + "containerServiceName": _SERIALIZER.url("container_service_name", container_service_name, 'str'), + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + **kwargs + ) + + +def build_list_by_resource_group_request( + resource_group_name: str, + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices") # pylint: disable=line-too-long + path_format_arguments = { + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str'), + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_orchestrators_request( + subscription_id: str, + location: str, + *, + resource_type: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-01")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/orchestrators") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), + "location": _SERIALIZER.url("location", location, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if resource_type is not None: + _params['resource-type'] = _SERIALIZER.query("resource_type", resource_type, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class ContainerServicesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from typing import Any, Callable, Dict, Generic, Iterable, Optional, TypeVar, Union - - T = TypeVar('T') - ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] - -class ContainerServicesOperations(object): - """ContainerServicesOperations operations. - - You should not instantiate this class directly. Instead, you should create a Client instance that - instantiates it for you and attaches it as an attribute. - - :ivar models: Alias to model classes used in this operation group. - :type models: ~azure.mgmt.containerservice.v2017_07_01.models - :param client: Client for service requests. - :param config: Configuration of service client. - :param serializer: An object model serializer. - :param deserializer: An object model deserializer. + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2017_07_01.ContainerServiceClient`'s + :attr:`container_services` attribute. """ models = _models - def __init__(self, client, config, serializer, deserializer): - self._client = client - self._serialize = serializer - self._deserialize = deserializer - self._config = config + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + @distributed_trace def list( self, - **kwargs # type: Any - ): - # type: (...) -> Iterable["_models.ContainerServiceListResult"] + **kwargs: Any + ) -> Iterable[_models.ContainerServiceListResult]: """Gets a list of container services in the specified subscription. Gets a list of container services in the specified subscription. The operation returns properties of each container service including state, orchestrator, number of masters and agents, and FQDNs of masters and agents. + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either ContainerServiceListResult or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] + :return: An iterator like instance of either ContainerServiceListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerServiceListResult"] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerServiceListResult] + error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - + error_map.update(kwargs.pop('error_map', {}) or {}) def prepare_request(next_link=None): - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - if not next_link: - # Construct URL - url = self.list.metadata['url'] # type: ignore - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + else: - url = next_link - query_parameters = {} # type: Dict[str, Any] - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" return request def extract_data(pipeline_response): - deserialized = self._deserialize('ContainerServiceListResult', pipeline_response) + deserialized = self._deserialize("ContainerServiceListResult", pipeline_response) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) @@ -104,7 +335,11 @@ def extract_data(pipeline_response): def get_next(next_link=None): request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -113,51 +348,52 @@ def get_next(next_link=None): return pipeline_response + return ItemPaged( get_next, extract_data ) - list.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/containerServices'} # type: ignore + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/containerServices"} # type: ignore def _create_or_update_initial( self, - resource_group_name, # type: str - container_service_name, # type: str - parameters, # type: "_models.ContainerService" - **kwargs # type: Any - ): - # type: (...) -> "_models.ContainerService" - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] + resource_group_name: str, + container_service_name: str, + parameters: _models.ContainerService, + **kwargs: Any + ) -> _models.ContainerService: error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - content_type = kwargs.pop("content_type", "application/json") - accept = "application/json" - - # Construct URL - url = self._create_or_update_initial.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Content-Type'] = self._serialize.header("content_type", content_type, 'str') - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - - body_content_kwargs = {} # type: Dict[str, Any] - body_content = self._serialize.body(parameters, 'ContainerService') - body_content_kwargs['content'] = body_content - request = self._client.put(url, query_parameters, header_parameters, **body_content_kwargs) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] + + _json = self._serialize.body(parameters, 'ContainerService') + + request = build_create_or_update_request_initial( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200, 201, 202]: @@ -177,16 +413,18 @@ def _create_or_update_initial( return cls(pipeline_response, deserialized, {}) return deserialized - _create_or_update_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + + @distributed_trace def begin_create_or_update( self, - resource_group_name, # type: str - container_service_name, # type: str - parameters, # type: "_models.ContainerService" - **kwargs # type: Any - ): - # type: (...) -> LROPoller["_models.ContainerService"] + resource_group_name: str, + container_service_name: str, + parameters: _models.ContainerService, + **kwargs: Any + ) -> LROPoller[_models.ContainerService]: """Creates or updates a container service. Creates or updates a container service with the specified configuration of orchestrator, @@ -199,50 +437,64 @@ def begin_create_or_update( :type container_service_name: str :param parameters: Parameters supplied to the Create or Update a Container Service operation. :type parameters: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerService + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be ARMPolling. - Pass in False for this operation to not poll, or pass in your own initialized polling object for a personal polling strategy. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. - :return: An instance of LROPoller that returns either ContainerService or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] - :raises ~azure.core.exceptions.HttpResponseError: + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either ContainerService or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2017_07_01.models.ContainerService] + :raises: ~azure.core.exceptions.HttpResponseError """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] lro_delay = kwargs.pop( 'polling_interval', self._config.polling_interval ) cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] if cont_token is None: - raw_result = self._create_or_update_initial( + raw_result = self._create_or_update_initial( # type: ignore resource_group_name=resource_group_name, container_service_name=container_service_name, parameters=parameters, + api_version=api_version, + content_type=content_type, cls=lambda x,y,z: x, + headers=_headers, + params=_params, **kwargs ) - kwargs.pop('error_map', None) - kwargs.pop('content_type', None) def get_long_running_output(pipeline_response): deserialized = self._deserialize('ContainerService', pipeline_response) - if cls: return cls(pipeline_response, deserialized, {}) return deserialized - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - if polling is True: polling_method = ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - elif polling is False: polling_method = NoPolling() + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) else: polling_method = polling if cont_token: return LROPoller.from_continuation_token( @@ -251,17 +503,17 @@ def get_long_running_output(pipeline_response): client=self._client, deserialization_callback=get_long_running_output ) - else: - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) - begin_create_or_update.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + @distributed_trace def get( self, - resource_group_name, # type: str - container_service_name, # type: str - **kwargs # type: Any - ): - # type: (...) -> "_models.ContainerService" + resource_group_name: str, + container_service_name: str, + **kwargs: Any + ) -> _models.ContainerService: """Gets the properties of the specified container service. Gets the properties of the specified container service in the specified subscription and @@ -273,38 +525,43 @@ def get( :param container_service_name: The name of the container service in the specified subscription and resource group. :type container_service_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :return: ContainerService, or the result of cls(response) :rtype: ~azure.mgmt.containerservice.v2017_07_01.models.ContainerService :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerService"] error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - - # Construct URL - url = self.get.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerService] + + + request = build_get_request( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.get(url, query_parameters, header_parameters) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -317,40 +574,45 @@ def get( return cls(pipeline_response, deserialized, {}) return deserialized - get.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore - def _delete_initial( + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + + def _delete_initial( # pylint: disable=inconsistent-return-statements self, - resource_group_name, # type: str - container_service_name, # type: str - **kwargs # type: Any - ): - # type: (...) -> None - cls = kwargs.pop('cls', None) # type: ClsType[None] + resource_group_name: str, + container_service_name: str, + **kwargs: Any + ) -> None: error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - - # Construct URL - url = self._delete_initial.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) + error_map.update(kwargs.pop('error_map', {}) or {}) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - # Construct headers - header_parameters = {} # type: Dict[str, Any] + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + resource_group_name=resource_group_name, + container_service_name=container_service_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.delete(url, query_parameters, header_parameters) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [202, 204]: @@ -360,15 +622,16 @@ def _delete_initial( if cls: return cls(pipeline_response, None, {}) - _delete_initial.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore - def begin_delete( + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements self, - resource_group_name, # type: str - container_service_name, # type: str - **kwargs # type: Any - ): - # type: (...) -> LROPoller[None] + resource_group_name: str, + container_service_name: str, + **kwargs: Any + ) -> LROPoller[None]: """Deletes the specified container service. Deletes the specified container service in the specified subscription and resource group. The @@ -381,46 +644,57 @@ def begin_delete( :param container_service_name: The name of the container service in the specified subscription and resource group. :type container_service_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be ARMPolling. - Pass in False for this operation to not poll, or pass in your own initialized polling object for a personal polling strategy. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present. + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. :return: An instance of LROPoller that returns either None or the result of cls(response) :rtype: ~azure.core.polling.LROPoller[None] - :raises ~azure.core.exceptions.HttpResponseError: + :raises: ~azure.core.exceptions.HttpResponseError """ - polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] lro_delay = kwargs.pop( 'polling_interval', self._config.polling_interval ) cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] if cont_token is None: - raw_result = self._delete_initial( + raw_result = self._delete_initial( # type: ignore resource_group_name=resource_group_name, container_service_name=container_service_name, + api_version=api_version, cls=lambda x,y,z: x, + headers=_headers, + params=_params, **kwargs ) - kwargs.pop('error_map', None) - kwargs.pop('content_type', None) def get_long_running_output(pipeline_response): if cls: return cls(pipeline_response, None, {}) - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'containerServiceName': self._serialize.url("container_service_name", container_service_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - if polling is True: polling_method = ARMPolling(lro_delay, path_format_arguments=path_format_arguments, **kwargs) - elif polling is False: polling_method = NoPolling() + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) else: polling_method = polling if cont_token: return LROPoller.from_continuation_token( @@ -429,16 +703,16 @@ def get_long_running_output(pipeline_response): client=self._client, deserialization_callback=get_long_running_output ) - else: - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) - begin_delete.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}'} # type: ignore + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices/{containerServiceName}"} # type: ignore + + @distributed_trace def list_by_resource_group( self, - resource_group_name, # type: str - **kwargs # type: Any - ): - # type: (...) -> Iterable["_models.ContainerServiceListResult"] + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.ContainerServiceListResult]: """Gets a list of container services in the specified resource group. Gets a list of container services in the specified subscription and resource group. The @@ -447,45 +721,57 @@ def list_by_resource_group( :param resource_group_name: The name of the resource group. :type resource_group_name: str + :keyword api_version: Api Version. Default value is "2017-07-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either ContainerServiceListResult or the result of cls(response) - :rtype: ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] + :return: An iterator like instance of either ContainerServiceListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2017_07_01.models.ContainerServiceListResult] :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.ContainerServiceListResult"] + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2017-07-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ContainerServiceListResult] + error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2017-07-01" - accept = "application/json" - + error_map.update(kwargs.pop('error_map', {}) or {}) def prepare_request(next_link=None): - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') - if not next_link: - # Construct URL - url = self.list_by_resource_group.metadata['url'] # type: ignore - path_format_arguments = { - 'resourceGroupName': self._serialize.url("resource_group_name", resource_group_name, 'str'), - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + else: - url = next_link - query_parameters = {} # type: Dict[str, Any] - request = self._client.get(url, query_parameters, header_parameters) + + request = build_list_by_resource_group_request( + resource_group_name=resource_group_name, + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" return request def extract_data(pipeline_response): - deserialized = self._deserialize('ContainerServiceListResult', pipeline_response) + deserialized = self._deserialize("ContainerServiceListResult", pipeline_response) list_of_elem = deserialized.value if cls: list_of_elem = cls(list_of_elem) @@ -494,7 +780,11 @@ def extract_data(pipeline_response): def get_next(next_link=None): request = prepare_request(next_link) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -503,18 +793,19 @@ def get_next(next_link=None): return pipeline_response + return ItemPaged( get_next, extract_data ) - list_by_resource_group.metadata = {'url': '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices'} # type: ignore + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/containerServices"} # type: ignore + @distributed_trace def list_orchestrators( self, - location, # type: str - resource_type=None, # type: Optional[str] - **kwargs # type: Any - ): - # type: (...) -> "_models.OrchestratorVersionProfileListResult" + location: str, + resource_type: Optional[str] = None, + **kwargs: Any + ) -> _models.OrchestratorVersionProfileListResult: """Gets a list of supported orchestrators in the specified subscription. Gets a list of supported orchestrators in the specified subscription. The operation returns @@ -524,40 +815,45 @@ def list_orchestrators( :param location: The name of a supported Azure region. :type location: str :param resource_type: resource type for which the list of orchestrators needs to be returned. + Default value is None. :type resource_type: str + :keyword api_version: Api Version. Default value is "2019-04-01". Note that overriding this + default value may result in unsupported behavior. + :paramtype api_version: str :keyword callable cls: A custom type or function that will be passed the direct response :return: OrchestratorVersionProfileListResult, or the result of cls(response) :rtype: ~azure.mgmt.containerservice.v2017_07_01.models.OrchestratorVersionProfileListResult :raises: ~azure.core.exceptions.HttpResponseError """ - cls = kwargs.pop('cls', None) # type: ClsType["_models.OrchestratorVersionProfileListResult"] error_map = { 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError } - error_map.update(kwargs.pop('error_map', {})) - api_version = "2019-04-01" - accept = "application/json" - - # Construct URL - url = self.list_orchestrators.metadata['url'] # type: ignore - path_format_arguments = { - 'subscriptionId': self._serialize.url("self._config.subscription_id", self._config.subscription_id, 'str'), - 'location': self._serialize.url("location", location, 'str'), - } - url = self._client.format_url(url, **path_format_arguments) - - # Construct parameters - query_parameters = {} # type: Dict[str, Any] - query_parameters['api-version'] = self._serialize.query("api_version", api_version, 'str') - if resource_type is not None: - query_parameters['resource-type'] = self._serialize.query("resource_type", resource_type, 'str') - - # Construct headers - header_parameters = {} # type: Dict[str, Any] - header_parameters['Accept'] = self._serialize.header("accept", accept, 'str') + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-01")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OrchestratorVersionProfileListResult] + + + request = build_list_orchestrators_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + resource_type=resource_type, + template_url=self.list_orchestrators.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore - request = self._client.get(url, query_parameters, header_parameters) - pipeline_response = self._client._pipeline.run(request, stream=False, **kwargs) + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) response = pipeline_response.http_response if response.status_code not in [200]: @@ -570,4 +866,6 @@ def list_orchestrators( return cls(pipeline_response, deserialized, {}) return deserialized - list_orchestrators.metadata = {'url': '/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/orchestrators'} # type: ignore + + list_orchestrators.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/orchestrators"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2017_07_01/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py new file mode 100644 index 00000000000..37a5f9e02e6 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/__init__.py @@ -0,0 +1,20 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._container_service_client import ContainerServiceClient + +try: + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk +__all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py new file mode 100644 index 00000000000..0ea5a338f54 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_configuration.py @@ -0,0 +1,72 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials import TokenCredential + +VERSION = "unknown" + +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes + """Configuration for ContainerServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + this default value may result in unsupported behavior. + :paramtype api_version: str + """ + + def __init__( + self, + credential: "TokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) + api_version = kwargs.pop('api_version', "2022-06-02-preview") # type: str + + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = api_version + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs # type: Any + ): + # type: (...) -> None + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py new file mode 100644 index 00000000000..8f81cd2f200 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_container_service_client.py @@ -0,0 +1,170 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 copy import deepcopy +from typing import Any, TYPE_CHECKING + +from msrest import Deserializer, Serializer + +from azure.core.rest import HttpRequest, HttpResponse +from azure.mgmt.core import ARMPipelineClient + +from . import models +from ._configuration import ContainerServiceClientConfiguration +from .operations import AgentPoolsOperations, FleetMembersOperations, FleetsOperations, MaintenanceConfigurationsOperations, ManagedClusterSnapshotsOperations, ManagedClustersOperations, Operations, PrivateEndpointConnectionsOperations, PrivateLinkResourcesOperations, ResolvePrivateLinkServiceIdOperations, SnapshotsOperations, TrustedAccessRoleBindingsOperations, TrustedAccessRolesOperations + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials import TokenCredential + +class ContainerServiceClient: # pylint: disable=too-many-instance-attributes + """The Container Service Client. + + :ivar operations: Operations operations + :vartype operations: azure.mgmt.containerservice.v2022_06_02_preview.operations.Operations + :ivar managed_clusters: ManagedClustersOperations operations + :vartype managed_clusters: + azure.mgmt.containerservice.v2022_06_02_preview.operations.ManagedClustersOperations + :ivar maintenance_configurations: MaintenanceConfigurationsOperations operations + :vartype maintenance_configurations: + azure.mgmt.containerservice.v2022_06_02_preview.operations.MaintenanceConfigurationsOperations + :ivar agent_pools: AgentPoolsOperations operations + :vartype agent_pools: + azure.mgmt.containerservice.v2022_06_02_preview.operations.AgentPoolsOperations + :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations + :vartype private_endpoint_connections: + azure.mgmt.containerservice.v2022_06_02_preview.operations.PrivateEndpointConnectionsOperations + :ivar private_link_resources: PrivateLinkResourcesOperations operations + :vartype private_link_resources: + azure.mgmt.containerservice.v2022_06_02_preview.operations.PrivateLinkResourcesOperations + :ivar resolve_private_link_service_id: ResolvePrivateLinkServiceIdOperations operations + :vartype resolve_private_link_service_id: + azure.mgmt.containerservice.v2022_06_02_preview.operations.ResolvePrivateLinkServiceIdOperations + :ivar snapshots: SnapshotsOperations operations + :vartype snapshots: + azure.mgmt.containerservice.v2022_06_02_preview.operations.SnapshotsOperations + :ivar managed_cluster_snapshots: ManagedClusterSnapshotsOperations operations + :vartype managed_cluster_snapshots: + azure.mgmt.containerservice.v2022_06_02_preview.operations.ManagedClusterSnapshotsOperations + :ivar trusted_access_roles: TrustedAccessRolesOperations operations + :vartype trusted_access_roles: + azure.mgmt.containerservice.v2022_06_02_preview.operations.TrustedAccessRolesOperations + :ivar trusted_access_role_bindings: TrustedAccessRoleBindingsOperations operations + :vartype trusted_access_role_bindings: + azure.mgmt.containerservice.v2022_06_02_preview.operations.TrustedAccessRoleBindingsOperations + :ivar fleets: FleetsOperations operations + :vartype fleets: azure.mgmt.containerservice.v2022_06_02_preview.operations.FleetsOperations + :ivar fleet_members: FleetMembersOperations operations + :vartype fleet_members: + azure.mgmt.containerservice.v2022_06_02_preview.operations.FleetMembersOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials.TokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + this default value may result in unsupported behavior. + :paramtype api_version: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + """ + + def __init__( + self, + credential: "TokenCredential", + subscription_id: str, + base_url: str = "https://management.azure.com", + **kwargs: Any + ) -> None: + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) + self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + 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) + self._serialize.client_side_validation = False + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize + ) + self.managed_clusters = ManagedClustersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.maintenance_configurations = MaintenanceConfigurationsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.agent_pools = AgentPoolsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.private_endpoint_connections = PrivateEndpointConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.private_link_resources = PrivateLinkResourcesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.resolve_private_link_service_id = ResolvePrivateLinkServiceIdOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.snapshots = SnapshotsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.managed_cluster_snapshots = ManagedClusterSnapshotsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.trusted_access_roles = TrustedAccessRolesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.trusted_access_role_bindings = TrustedAccessRoleBindingsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.fleets = FleetsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.fleet_members = FleetMembersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + + + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> HttpResponse: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.HttpResponse + """ + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) + + def close(self): + # type: () -> None + self._client.close() + + def __enter__(self): + # type: () -> ContainerServiceClient + self._client.__enter__() + return self + + def __exit__(self, *exc_details): + # type: (Any) -> None + self._client.__exit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.py new file mode 100644 index 00000000000..138f663c53a --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/_vendor.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. +# Code generated by Microsoft (R) AutoRest Code Generator. +# Changes may cause incorrect behavior and will be lost if the code is regenerated. +# -------------------------------------------------------------------------- + +from azure.core.pipeline.transport import HttpRequest + +def _convert_request(request, files=None): + data = request.content if not files else None + request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) + if files: + request.set_formdata_body(files) + return request + +def _format_url_section(template, **kwargs): + components = template.split("/") + while components: + try: + return template.format(**kwargs) + except KeyError as key: + formatted_components = template.split("/") + components = [ + c for c in formatted_components if "{}".format(key.args[0]) not in c + ] + template = "/".join(components) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py new file mode 100644 index 00000000000..37a5f9e02e6 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/__init__.py @@ -0,0 +1,20 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._container_service_client import ContainerServiceClient + +try: + from ._patch import __all__ as _patch_all + from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +except ImportError: + _patch_all = [] +from ._patch import patch_sdk as _patch_sdk +__all__ = ['ContainerServiceClient'] +__all__.extend([p for p in _patch_all if p not in __all__]) + +_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py new file mode 100644 index 00000000000..e84eaf42ba4 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_configuration.py @@ -0,0 +1,71 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, TYPE_CHECKING + +from azure.core.configuration import Configuration +from azure.core.pipeline import policies +from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +VERSION = "unknown" + +class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes + """Configuration for ContainerServiceClient. + + Note that all parameters used to create this instance are saved as instance + attributes. + + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + this default value may result in unsupported behavior. + :paramtype api_version: str + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + **kwargs: Any + ) -> None: + super(ContainerServiceClientConfiguration, self).__init__(**kwargs) + api_version = kwargs.pop('api_version', "2022-06-02-preview") # type: str + + if credential is None: + raise ValueError("Parameter 'credential' must not be None.") + if subscription_id is None: + raise ValueError("Parameter 'subscription_id' must not be None.") + + self.credential = credential + self.subscription_id = subscription_id + self.api_version = api_version + self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) + kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) + self._configure(**kwargs) + + def _configure( + self, + **kwargs: Any + ) -> None: + self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) + self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) + self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) + self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) + self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) + self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) + self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) + self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) + self.authentication_policy = kwargs.get('authentication_policy') + if self.credential and not self.authentication_policy: + self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py new file mode 100644 index 00000000000..92f54272638 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_container_service_client.py @@ -0,0 +1,168 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 copy import deepcopy +from typing import Any, Awaitable, TYPE_CHECKING + +from msrest import Deserializer, Serializer + +from azure.core.rest import AsyncHttpResponse, HttpRequest +from azure.mgmt.core import AsyncARMPipelineClient + +from .. import models +from ._configuration import ContainerServiceClientConfiguration +from .operations import AgentPoolsOperations, FleetMembersOperations, FleetsOperations, MaintenanceConfigurationsOperations, ManagedClusterSnapshotsOperations, ManagedClustersOperations, Operations, PrivateEndpointConnectionsOperations, PrivateLinkResourcesOperations, ResolvePrivateLinkServiceIdOperations, SnapshotsOperations, TrustedAccessRoleBindingsOperations, TrustedAccessRolesOperations + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + from azure.core.credentials_async import AsyncTokenCredential + +class ContainerServiceClient: # pylint: disable=too-many-instance-attributes + """The Container Service Client. + + :ivar operations: Operations operations + :vartype operations: azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.Operations + :ivar managed_clusters: ManagedClustersOperations operations + :vartype managed_clusters: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ManagedClustersOperations + :ivar maintenance_configurations: MaintenanceConfigurationsOperations operations + :vartype maintenance_configurations: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.MaintenanceConfigurationsOperations + :ivar agent_pools: AgentPoolsOperations operations + :vartype agent_pools: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.AgentPoolsOperations + :ivar private_endpoint_connections: PrivateEndpointConnectionsOperations operations + :vartype private_endpoint_connections: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.PrivateEndpointConnectionsOperations + :ivar private_link_resources: PrivateLinkResourcesOperations operations + :vartype private_link_resources: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.PrivateLinkResourcesOperations + :ivar resolve_private_link_service_id: ResolvePrivateLinkServiceIdOperations operations + :vartype resolve_private_link_service_id: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ResolvePrivateLinkServiceIdOperations + :ivar snapshots: SnapshotsOperations operations + :vartype snapshots: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.SnapshotsOperations + :ivar managed_cluster_snapshots: ManagedClusterSnapshotsOperations operations + :vartype managed_cluster_snapshots: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.ManagedClusterSnapshotsOperations + :ivar trusted_access_roles: TrustedAccessRolesOperations operations + :vartype trusted_access_roles: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.TrustedAccessRolesOperations + :ivar trusted_access_role_bindings: TrustedAccessRoleBindingsOperations operations + :vartype trusted_access_role_bindings: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.TrustedAccessRoleBindingsOperations + :ivar fleets: FleetsOperations operations + :vartype fleets: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.FleetsOperations + :ivar fleet_members: FleetMembersOperations operations + :vartype fleet_members: + azure.mgmt.containerservice.v2022_06_02_preview.aio.operations.FleetMembersOperations + :param credential: Credential needed for the client to connect to Azure. + :type credential: ~azure.core.credentials_async.AsyncTokenCredential + :param subscription_id: The ID of the target subscription. + :type subscription_id: str + :param base_url: Service URL. Default value is "https://management.azure.com". + :type base_url: str + :keyword api_version: Api Version. Default value is "2022-06-02-preview". Note that overriding + this default value may result in unsupported behavior. + :paramtype api_version: str + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + """ + + def __init__( + self, + credential: "AsyncTokenCredential", + subscription_id: str, + base_url: str = "https://management.azure.com", + **kwargs: Any + ) -> None: + self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) + self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) + + 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) + self._serialize.client_side_validation = False + self.operations = Operations( + self._client, self._config, self._serialize, self._deserialize + ) + self.managed_clusters = ManagedClustersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.maintenance_configurations = MaintenanceConfigurationsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.agent_pools = AgentPoolsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.private_endpoint_connections = PrivateEndpointConnectionsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.private_link_resources = PrivateLinkResourcesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.resolve_private_link_service_id = ResolvePrivateLinkServiceIdOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.snapshots = SnapshotsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.managed_cluster_snapshots = ManagedClusterSnapshotsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.trusted_access_roles = TrustedAccessRolesOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.trusted_access_role_bindings = TrustedAccessRoleBindingsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.fleets = FleetsOperations( + self._client, self._config, self._serialize, self._deserialize + ) + self.fleet_members = FleetMembersOperations( + self._client, self._config, self._serialize, self._deserialize + ) + + + def _send_request( + self, + request: HttpRequest, + **kwargs: Any + ) -> Awaitable[AsyncHttpResponse]: + """Runs the network request through the client's chained policies. + + >>> from azure.core.rest import HttpRequest + >>> request = HttpRequest("GET", "https://www.example.org/") + + >>> response = await client._send_request(request) + + + For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart + + :param request: The network request you want to make. Required. + :type request: ~azure.core.rest.HttpRequest + :keyword bool stream: Whether the response payload will be streamed. Defaults to False. + :return: The response of your network call. Does not do error handling on your response. + :rtype: ~azure.core.rest.AsyncHttpResponse + """ + + request_copy = deepcopy(request) + request_copy.url = self._client.format_url(request_copy.url) + return self._client.send_request(request_copy, **kwargs) + + async def close(self) -> None: + await self._client.close() + + async def __aenter__(self) -> "ContainerServiceClient": + await self._client.__aenter__() + return self + + async def __aexit__(self, *exc_details) -> None: + await self._client.__aexit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py new file mode 100644 index 00000000000..03d015afec2 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/__init__.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._operations import Operations +from ._managed_clusters_operations import ManagedClustersOperations +from ._maintenance_configurations_operations import MaintenanceConfigurationsOperations +from ._agent_pools_operations import AgentPoolsOperations +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations +from ._private_link_resources_operations import PrivateLinkResourcesOperations +from ._resolve_private_link_service_id_operations import ResolvePrivateLinkServiceIdOperations +from ._snapshots_operations import SnapshotsOperations +from ._managed_cluster_snapshots_operations import ManagedClusterSnapshotsOperations +from ._trusted_access_roles_operations import TrustedAccessRolesOperations +from ._trusted_access_role_bindings_operations import TrustedAccessRoleBindingsOperations +from ._fleets_operations import FleetsOperations +from ._fleet_members_operations import FleetMembersOperations + +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'Operations', + 'ManagedClustersOperations', + 'MaintenanceConfigurationsOperations', + 'AgentPoolsOperations', + 'PrivateEndpointConnectionsOperations', + 'PrivateLinkResourcesOperations', + 'ResolvePrivateLinkServiceIdOperations', + 'SnapshotsOperations', + 'ManagedClusterSnapshotsOperations', + 'TrustedAccessRolesOperations', + 'TrustedAccessRoleBindingsOperations', + 'FleetsOperations', + 'FleetMembersOperations', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py new file mode 100644 index 00000000000..4bb851949e2 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_agent_pools_operations.py @@ -0,0 +1,776 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._agent_pools_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_available_agent_pool_versions_request, build_get_request, build_get_upgrade_profile_request, build_list_request, build_upgrade_node_image_version_request_initial +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class AgentPoolsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`agent_pools` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.AgentPoolListResult]: + """Gets a list of agent pools in the specified managed cluster. + + Gets a list of agent pools in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("AgentPoolListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> _models.AgentPool: + """Gets the specified managed cluster agent pool. + + Gets the specified managed cluster agent pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPool, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + async def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + parameters: _models.AgentPool, + **kwargs: Any + ) -> _models.AgentPool: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + + _json = self._serialize.body(parameters, 'AgentPool') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + @distributed_trace_async + async def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + parameters: _models.AgentPool, + **kwargs: Any + ) -> AsyncLROPoller[_models.AgentPool]: + """Creates or updates an agent pool in the specified managed cluster. + + Creates or updates an agent pool in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param parameters: The agent pool to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either AgentPool or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes an agent pool in the specified managed cluster. + + Deletes an agent pool in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param ignore_pod_disruption_budget: ignore-pod-disruption-budget=true to delete those pods on + a node without considering Pod Disruption Budget. Default value is None. + :type ignore_pod_disruption_budget: bool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + @distributed_trace_async + async def get_upgrade_profile( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> _models.AgentPoolUpgradeProfile: + """Gets the upgrade profile for an agent pool. + + Gets the upgrade profile for an agent pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolUpgradeProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolUpgradeProfile] + + + request = build_get_upgrade_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.get_upgrade_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolUpgradeProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_upgrade_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeProfiles/default"} # type: ignore + + + @distributed_trace_async + async def get_available_agent_pool_versions( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.AgentPoolAvailableVersions: + """Gets a list of supported Kubernetes versions for the specified agent pool. + + See `supported Kubernetes versions + `_ for more details about + the version lifecycle. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolAvailableVersions, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersions + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolAvailableVersions] + + + request = build_get_available_agent_pool_versions_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get_available_agent_pool_versions.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolAvailableVersions', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_available_agent_pool_versions.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/availableAgentPoolVersions"} # type: ignore + + + async def _upgrade_node_image_version_initial( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> Optional[_models.AgentPool]: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.AgentPool]] + + + request = build_upgrade_node_image_version_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self._upgrade_node_image_version_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + response_headers = {} + if response.status_code == 202: + response_headers['Azure-AsyncOperation']=self._deserialize('str', response.headers.get('Azure-AsyncOperation')) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, response_headers) + + return deserialized + + _upgrade_node_image_version_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeNodeImageVersion"} # type: ignore + + + @distributed_trace_async + async def begin_upgrade_node_image_version( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> AsyncLROPoller[_models.AgentPool]: + """Upgrades the node image version of an agent pool to the latest. + + Upgrading the node image version of an agent pool applies the newest OS and runtime updates to + the nodes. AKS provides one new image per week with the latest updates. For more details on + node image versions, see: https://docs.microsoft.com/azure/aks/node-image-upgrade. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either AgentPool or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._upgrade_node_image_version_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + response_headers = {} + response = pipeline_response.http_response + response_headers['Azure-AsyncOperation']=self._deserialize('str', response.headers.get('Azure-AsyncOperation')) + + deserialized = self._deserialize('AgentPool', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, response_headers) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_upgrade_node_image_version.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeNodeImageVersion"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py new file mode 100644 index 00000000000..725d03cd0df --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleet_members_operations.py @@ -0,0 +1,515 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._fleet_members_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_request, build_list_by_fleet_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class FleetMembersOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`fleet_members` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + async def _create_or_update_initial( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + parameters: _models.FleetMember, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.FleetMember: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + + _json = self._serialize.body(parameters, 'FleetMember') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + if_none_match=if_none_match, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('FleetMember', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('FleetMember', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + @distributed_trace_async + async def begin_create_or_update( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + parameters: _models.FleetMember, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> AsyncLROPoller[_models.FleetMember]: + """Creates or updates a fleet member. + + A member contains a reference to an existing Kubernetes cluster. Creating a member makes the + referenced cluster join the Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :param parameters: The Fleet member to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param if_none_match: Set to '*' to allow a new resource to be created and prevent updating an + existing resource. Other values will result in a 412 Pre-condition Failed response. Default + value is None. + :type if_none_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either FleetMember or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + parameters=parameters, + if_match=if_match, + if_none_match=if_none_match, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('FleetMember', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + **kwargs: Any + ) -> _models.FleetMember: + """Gets a Fleet member. + + Gets a Fleet member. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: FleetMember, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('FleetMember', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + if_match=if_match, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes a fleet member. + + Deleting a Fleet member results in the member cluster leaving fleet. The Member azure resource + is deleted upon success. The underlying cluster is not deleted. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + if_match=if_match, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + lro_options={'final-state-via': 'location'}, + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + @distributed_trace + def list_by_fleet( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.FleetMembersListResult]: + """Lists the members of a fleet. + + Lists the members of a fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetMembersListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMembersListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMembersListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_fleet_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.list_by_fleet.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_fleet_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("FleetMembersListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_fleet.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py new file mode 100644 index 00000000000..ce009db6def --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_fleets_operations.py @@ -0,0 +1,720 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._fleets_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_request, build_list_by_resource_group_request, build_list_credentials_request, build_list_request, build_update_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class FleetsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`fleets` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + async def _create_or_update_initial( + self, + resource_group_name: str, + fleet_name: str, + parameters: _models.Fleet, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.Fleet: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + _json = self._serialize.body(parameters, 'Fleet') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + if_none_match=if_none_match, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Fleet', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace_async + async def begin_create_or_update( + self, + resource_group_name: str, + fleet_name: str, + parameters: _models.Fleet, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> AsyncLROPoller[_models.Fleet]: + """Creates or updates a Fleet. + + Creates or updates a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param parameters: The Fleet to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param if_none_match: Set to '*' to allow a new resource to be created and prevent updating an + existing resource. Other values will result in a 412 Pre-condition Failed response. Default + value is None. + :type if_none_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either Fleet or the result of cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + parameters=parameters, + if_match=if_match, + if_none_match=if_none_match, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Fleet', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + @distributed_trace_async + async def update( + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + parameters: Optional[_models.FleetPatch] = None, + **kwargs: Any + ) -> _models.Fleet: + """Patches a fleet resource. + + Patches a fleet resource. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param parameters: The properties of a Fleet to update. Default value is None. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetPatch + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Fleet, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + if parameters is not None: + _json = self._serialize.body(parameters, 'FleetPatch') + else: + _json = None + + request = build_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + template_url=self.update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> _models.Fleet: + """Gets a Fleet. + + Gets a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Fleet, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + if_match=if_match, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes a Fleet. + + Deletes a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + if_match=if_match, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + lro_options={'final-state-via': 'location'}, + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.FleetListResult]: + """Lists fleets in the specified subscription and resource group. + + Lists fleets in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("FleetListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets"} # type: ignore + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.FleetListResult]: + """Lists fleets in the specified subscription. + + Lists fleets in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("FleetListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/fleets"} # type: ignore + + @distributed_trace_async + async def list_credentials( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> _models.FleetCredentialResults: + """Lists the user credentials of a Fleet. + + Lists the user credentials of a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: FleetCredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetCredentialResults] + + + request = build_list_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.list_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('FleetCredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/listCredentials"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py new file mode 100644 index 00000000000..92b8694edde --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_maintenance_configurations_operations.py @@ -0,0 +1,348 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._maintenance_configurations_operations import build_create_or_update_request, build_delete_request, build_get_request, build_list_by_managed_cluster_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class MaintenanceConfigurationsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`maintenance_configurations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list_by_managed_cluster( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.MaintenanceConfigurationListResult]: + """Gets a list of maintenance configurations in the specified managed cluster. + + Gets a list of maintenance configurations in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either MaintenanceConfigurationListResult or the result + of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfigurationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfigurationListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_managed_cluster_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list_by_managed_cluster.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_managed_cluster_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("MaintenanceConfigurationListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_managed_cluster.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any + ) -> _models.MaintenanceConfiguration: + """Gets the specified maintenance configuration of a managed cluster. + + Gets the specified maintenance configuration of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: MaintenanceConfiguration, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('MaintenanceConfiguration', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + + + @distributed_trace_async + async def create_or_update( + self, + resource_group_name: str, + resource_name: str, + config_name: str, + parameters: _models.MaintenanceConfiguration, + **kwargs: Any + ) -> _models.MaintenanceConfiguration: + """Creates or updates a maintenance configuration in the specified managed cluster. + + Creates or updates a maintenance configuration in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :param parameters: The maintenance configuration to create or update. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :keyword callable cls: A custom type or function that will be passed the direct response + :return: MaintenanceConfiguration, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] + + _json = self._serialize.body(parameters, 'MaintenanceConfiguration') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('MaintenanceConfiguration', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + + + @distributed_trace_async + async def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any + ) -> None: + """Deletes a maintenance configuration. + + Deletes a maintenance configuration. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py new file mode 100644 index 00000000000..b7703f90f60 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_cluster_snapshots_operations.py @@ -0,0 +1,489 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._managed_cluster_snapshots_operations import build_create_or_update_request, build_delete_request, build_get_request, build_list_by_resource_group_request, build_list_request, build_update_tags_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ManagedClusterSnapshotsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`managed_cluster_snapshots` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.ManagedClusterSnapshotListResult]: + """Gets a list of managed cluster snapshots in the specified subscription. + + Gets a list of managed cluster snapshots in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterSnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedclustersnapshots"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.ManagedClusterSnapshotListResult]: + """Lists managed cluster snapshots in the specified subscription and resource group. + + Lists managed cluster snapshots in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterSnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Gets a managed cluster snapshot. + + Gets a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterSnapshot, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Creates or updates a managed cluster snapshot. + + Creates or updates a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The managed cluster snapshot to create or update. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + _json = self._serialize.body(parameters, 'ManagedClusterSnapshot') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Updates tags on a managed cluster snapshot. + + Updates tags on a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update managed cluster snapshot Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update_tags.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Deletes a managed cluster snapshot. + + Deletes a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py new file mode 100644 index 00000000000..1af3f180a76 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_managed_clusters_operations.py @@ -0,0 +1,2185 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._managed_clusters_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_access_profile_request, build_get_command_result_request, build_get_os_options_request, build_get_request, build_get_upgrade_profile_request, build_list_by_resource_group_request, build_list_cluster_admin_credentials_request, build_list_cluster_monitoring_user_credentials_request, build_list_cluster_user_credentials_request, build_list_outbound_network_dependencies_endpoints_request, build_list_request, build_reset_aad_profile_request_initial, build_reset_service_principal_profile_request_initial, build_rotate_cluster_certificates_request_initial, build_rotate_service_account_signing_keys_request_initial, build_run_command_request_initial, build_start_request_initial, build_stop_request_initial, build_update_tags_request_initial +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ManagedClustersOperations: # pylint: disable=too-many-public-methods + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`managed_clusters` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace_async + async def get_os_options( + self, + location: str, + resource_type: Optional[str] = None, + **kwargs: Any + ) -> _models.OSOptionProfile: + """Gets supported OS options in the specified subscription. + + Gets supported OS options in the specified subscription. + + :param location: The name of Azure region. + :type location: str + :param resource_type: The resource type for which the OS options needs to be returned. Default + value is None. + :type resource_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OSOptionProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OSOptionProfile] + + + request = build_get_os_options_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + resource_type=resource_type, + template_url=self.get_os_options.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OSOptionProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_os_options.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/osOptions/default"} # type: ignore + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.ManagedClusterListResult]: + """Gets a list of managed clusters in the specified subscription. + + Gets a list of managed clusters in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedClusters"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.ManagedClusterListResult]: + """Lists managed clusters in the specified subscription and resource group. + + Lists managed clusters in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters"} # type: ignore + + @distributed_trace_async + async def get_upgrade_profile( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedClusterUpgradeProfile: + """Gets the upgrade profile of a managed cluster. + + Gets the upgrade profile of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterUpgradeProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterUpgradeProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterUpgradeProfile] + + + request = build_get_upgrade_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get_upgrade_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterUpgradeProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_upgrade_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/upgradeProfiles/default"} # type: ignore + + + @distributed_trace_async + async def get_access_profile( + self, + resource_group_name: str, + resource_name: str, + role_name: str, + **kwargs: Any + ) -> _models.ManagedClusterAccessProfile: + """Gets an access profile of a managed cluster. + + **WARNING**\ : This API will be deprecated. Instead use `ListClusterUserCredentials + `_ or + `ListClusterAdminCredentials + `_ . + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param role_name: The name of the role for managed cluster accessProfile resource. + :type role_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterAccessProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAccessProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterAccessProfile] + + + request = build_get_access_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + role_name=role_name, + api_version=api_version, + template_url=self.get_access_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterAccessProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_access_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/accessProfiles/{roleName}/listCredential"} # type: ignore + + + @distributed_trace_async + async def list_cluster_admin_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the admin credentials of a managed cluster. + + Lists the admin credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_admin_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + template_url=self.list_cluster_admin_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_admin_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterAdminCredential"} # type: ignore + + + @distributed_trace_async + async def list_cluster_user_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + format: Optional[Union[str, "_models.Format"]] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the user credentials of a managed cluster. + + Lists the user credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :param format: Only apply to AAD clusters, specifies the format of returned kubeconfig. Format + 'azure' will return azure auth-provider kubeconfig; format 'exec' will return exec format + kubeconfig, which requires kubelogin binary in the path. Default value is None. + :type format: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Format + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_user_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + format=format, + template_url=self.list_cluster_user_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_user_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterUserCredential"} # type: ignore + + + @distributed_trace_async + async def list_cluster_monitoring_user_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the cluster monitoring user credentials of a managed cluster. + + Lists the cluster monitoring user credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_monitoring_user_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + template_url=self.list_cluster_monitoring_user_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_monitoring_user_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterMonitoringUserCredential"} # type: ignore + + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedCluster: + """Gets a managed cluster. + + Gets a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedCluster, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + async def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedCluster, + **kwargs: Any + ) -> _models.ManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + _json = self._serialize.body(parameters, 'ManagedCluster') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedCluster, + **kwargs: Any + ) -> AsyncLROPoller[_models.ManagedCluster]: + """Creates or updates a managed cluster. + + Creates or updates a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The managed cluster to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + async def _update_tags_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.ManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._update_tags_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> AsyncLROPoller[_models.ManagedCluster]: + """Updates tags on a managed cluster. + + Updates tags on a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update Managed Cluster Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either ManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._update_tags_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes a managed cluster. + + Deletes a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param ignore_pod_disruption_budget: ignore-pod-disruption-budget=true to delete those pods on + a node without considering Pod Disruption Budget. Default value is None. + :type ignore_pod_disruption_budget: bool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + async def _reset_service_principal_profile_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterServicePrincipalProfile, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + + _json = self._serialize.body(parameters, 'ManagedClusterServicePrincipalProfile') + + request = build_reset_service_principal_profile_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._reset_service_principal_profile_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _reset_service_principal_profile_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetServicePrincipalProfile"} # type: ignore + + + @distributed_trace_async + async def begin_reset_service_principal_profile( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterServicePrincipalProfile, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Reset the Service Principal Profile of a managed cluster. + + This action cannot be performed on a cluster that is not using a service principal. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The service principal profile to set on the managed cluster. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._reset_service_principal_profile_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_reset_service_principal_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetServicePrincipalProfile"} # type: ignore + + async def _reset_aad_profile_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterAADProfile, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + + _json = self._serialize.body(parameters, 'ManagedClusterAADProfile') + + request = build_reset_aad_profile_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._reset_aad_profile_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _reset_aad_profile_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + + + @distributed_trace_async + async def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterAADProfile, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Reset the AAD Profile of a managed cluster. + + Reset the AAD Profile of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The AAD profile to set on the Managed Cluster. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._reset_aad_profile_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_reset_aad_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + + async def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_rotate_cluster_certificates_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._rotate_cluster_certificates_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _rotate_cluster_certificates_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateClusterCertificates"} # type: ignore + + + @distributed_trace_async + async def begin_rotate_cluster_certificates( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Rotates the certificates of a managed cluster. + + See `Certificate rotation `_ for + more details about rotating managed cluster certificates. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._rotate_cluster_certificates_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_rotate_cluster_certificates.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateClusterCertificates"} # type: ignore + + async def _rotate_service_account_signing_keys_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_rotate_service_account_signing_keys_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._rotate_service_account_signing_keys_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _rotate_service_account_signing_keys_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateServiceAccountSigningKeys"} # type: ignore + + + @distributed_trace_async + async def begin_rotate_service_account_signing_keys( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Rotates the service account signing keys of a managed cluster. + + Rotates the service account signing keys of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._rotate_service_account_signing_keys_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_rotate_service_account_signing_keys.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateServiceAccountSigningKeys"} # type: ignore + + async def _stop_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_stop_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._stop_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _stop_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/stop"} # type: ignore + + + @distributed_trace_async + async def begin_stop( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Stops a Managed Cluster. + + This can only be performed on Azure Virtual Machine Scale set backed clusters. Stopping a + cluster stops the control plane and agent nodes entirely, while maintaining all object and + cluster state. A cluster does not accrue charges while it is stopped. See `stopping a cluster + `_ for more details about stopping a + cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._stop_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_stop.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/stop"} # type: ignore + + async def _start_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_start_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._start_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _start_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/start"} # type: ignore + + + @distributed_trace_async + async def begin_start( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Starts a previously stopped Managed Cluster. + + See `starting a cluster `_ for more + details about starting a cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._start_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_start.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/start"} # type: ignore + + async def _run_command_initial( + self, + resource_group_name: str, + resource_name: str, + request_payload: _models.RunCommandRequest, + **kwargs: Any + ) -> Optional[_models.RunCommandResult]: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] + + _json = self._serialize.body(request_payload, 'RunCommandRequest') + + request = build_run_command_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._run_command_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('RunCommandResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _run_command_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/runCommand"} # type: ignore + + + @distributed_trace_async + async def begin_run_command( + self, + resource_group_name: str, + resource_name: str, + request_payload: _models.RunCommandRequest, + **kwargs: Any + ) -> AsyncLROPoller[_models.RunCommandResult]: + """Submits a command to run against the Managed Cluster. + + AKS will create a pod to run the command. This is primarily useful for private clusters. For + more information see `AKS Run Command + `_. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param request_payload: The run command request. + :type request_payload: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either RunCommandResult or the result of + cls(response) + :rtype: + ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.RunCommandResult] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._run_command_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + request_payload=request_payload, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('RunCommandResult', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_run_command.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/runCommand"} # type: ignore + + @distributed_trace_async + async def get_command_result( + self, + resource_group_name: str, + resource_name: str, + command_id: str, + **kwargs: Any + ) -> Optional[_models.RunCommandResult]: + """Gets the results of a command which has been run on the Managed Cluster. + + Gets the results of a command which has been run on the Managed Cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param command_id: Id of the command. + :type command_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RunCommandResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult or None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] + + + request = build_get_command_result_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + command_id=command_id, + api_version=api_version, + template_url=self.get_command_result.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('RunCommandResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_command_result.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/commandResults/{commandId}"} # type: ignore + + + @distributed_trace + def list_outbound_network_dependencies_endpoints( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.OutboundEnvironmentEndpointCollection]: + """Gets a list of egress endpoints (network endpoints of all outbound dependencies) in the + specified managed cluster. + + Gets a list of egress endpoints (network endpoints of all outbound dependencies) in the + specified managed cluster. The operation returns properties of each egress endpoint. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OutboundEnvironmentEndpointCollection or the + result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpointCollection] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OutboundEnvironmentEndpointCollection] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_outbound_network_dependencies_endpoints_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list_outbound_network_dependencies_endpoints.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_outbound_network_dependencies_endpoints_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("OutboundEnvironmentEndpointCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_outbound_network_dependencies_endpoints.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/outboundNetworkDependenciesEndpoints"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py new file mode 100644 index 00000000000..0531804ec4d --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_operations.py @@ -0,0 +1,123 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._operations import build_list_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class Operations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`operations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.OperationListResult]: + """Gets a list of operations. + + Gets a list of operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OperationListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("OperationListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/providers/Microsoft.ContainerService/operations"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py new file mode 100644 index 00000000000..b4123e1f596 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_endpoint_connections_operations.py @@ -0,0 +1,387 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar, Union, cast + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._private_endpoint_connections_operations import build_delete_request_initial, build_get_request, build_list_request, build_update_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class PrivateEndpointConnectionsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`private_endpoint_connections` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace_async + async def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.PrivateEndpointConnectionListResult: + """Gets a list of private endpoint connections in the specified managed cluster. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnectionListResult, or the result of cls(response) + :rtype: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnectionListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnectionListResult] + + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnectionListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections"} # type: ignore + + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> _models.PrivateEndpointConnection: + """Gets the specified private endpoint connection. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + @distributed_trace_async + async def update( + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + parameters: _models.PrivateEndpointConnection, + **kwargs: Any + ) -> _models.PrivateEndpointConnection: + """Updates a private endpoint connection. + + Updates a private endpoint connection. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :param parameters: The updated private endpoint connection. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] + + _json = self._serialize.body(parameters, 'PrivateEndpointConnection') + + request = build_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + async def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + @distributed_trace_async + async def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> AsyncLROPoller[None]: + """Deletes a private endpoint connection. + + Deletes a private endpoint connection. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for + this operation to not poll, or pass in your own initialized polling object for a personal + polling strategy. + :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.AsyncLROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = await self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(AsyncPollingMethod, AsyncARMPolling( + lro_delay, + + + **kwargs + )) # type: AsyncPollingMethod + elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) + else: polling_method = polling + if cont_token: + return AsyncLROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py new file mode 100644 index 00000000000..5666ff99f71 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_private_link_resources_operations.py @@ -0,0 +1,109 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._private_link_resources_operations import build_list_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class PrivateLinkResourcesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`private_link_resources` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace_async + async def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.PrivateLinkResourcesListResult: + """Gets a list of private link resources in the specified managed cluster. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateLinkResourcesListResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResourcesListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResourcesListResult] + + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateLinkResourcesListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateLinkResources"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py new file mode 100644 index 00000000000..6cdb62e23c4 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_resolve_private_link_service_id_operations.py @@ -0,0 +1,115 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._resolve_private_link_service_id_operations import build_post_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class ResolvePrivateLinkServiceIdOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`resolve_private_link_service_id` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace_async + async def post( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.PrivateLinkResource, + **kwargs: Any + ) -> _models.PrivateLinkResource: + """Gets the private link service ID for the specified managed cluster. + + Gets the private link service ID for the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters required in order to resolve a private link service ID. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateLinkResource, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResource] + + _json = self._serialize.body(parameters, 'PrivateLinkResource') + + request = build_post_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.post.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateLinkResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + post.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resolvePrivateLinkServiceId"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py new file mode 100644 index 00000000000..7774f20edc4 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_snapshots_operations.py @@ -0,0 +1,486 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._snapshots_operations import build_create_or_update_request, build_delete_request, build_get_request, build_list_by_resource_group_request, build_list_request, build_update_tags_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class SnapshotsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`snapshots` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> AsyncIterable[_models.SnapshotListResult]: + """Gets a list of snapshots in the specified subscription. + + Gets a list of snapshots in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SnapshotListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("SnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/snapshots"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.SnapshotListResult]: + """Lists snapshots in the specified subscription and resource group. + + Lists snapshots in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SnapshotListResult or the result of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("SnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.Snapshot: + """Gets a snapshot. + + Gets a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.Snapshot, + **kwargs: Any + ) -> _models.Snapshot: + """Creates or updates a snapshot. + + Creates or updates a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The snapshot to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + _json = self._serialize.body(parameters, 'Snapshot') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Snapshot', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.Snapshot: + """Updates tags on a snapshot. + + Updates tags on a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update snapshot Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update_tags.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace_async + async def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Deletes a snapshot. + + Deletes a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py new file mode 100644 index 00000000000..e1f0dc3dd2c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_role_bindings_operations.py @@ -0,0 +1,348 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.tracing.decorator_async import distributed_trace_async +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._trusted_access_role_bindings_operations import build_create_or_update_request, build_delete_request, build_get_request, build_list_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TrustedAccessRoleBindingsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`trusted_access_role_bindings` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> AsyncIterable[_models.TrustedAccessRoleBindingListResult]: + """List trusted access role bindings. + + List trusted access role bindings. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TrustedAccessRoleBindingListResult or the result + of cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBindingListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("TrustedAccessRoleBindingListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings"} # type: ignore + + @distributed_trace_async + async def get( + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any + ) -> _models.TrustedAccessRoleBinding: + """Get a trusted access role binding. + + Get a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TrustedAccessRoleBinding, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TrustedAccessRoleBinding', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + + + @distributed_trace_async + async def create_or_update( + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + trusted_access_role_binding: _models.TrustedAccessRoleBinding, + **kwargs: Any + ) -> _models.TrustedAccessRoleBinding: + """Create or update a trusted access role binding. + + Create or update a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :param trusted_access_role_binding: A trusted access role binding. + :type trusted_access_role_binding: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TrustedAccessRoleBinding, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] + + _json = self._serialize.body(trusted_access_role_binding, 'TrustedAccessRoleBinding') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TrustedAccessRoleBinding', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + + + @distributed_trace_async + async def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any + ) -> None: + """Delete a trusted access role binding. + + Delete a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py new file mode 100644 index 00000000000..762e95d442b --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/aio/operations/_trusted_access_roles_operations.py @@ -0,0 +1,131 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar + +from azure.core.async_paging import AsyncItemPaged, AsyncList +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import AsyncHttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from ... import models as _models +from ..._vendor import _convert_request +from ...operations._trusted_access_roles_operations import build_list_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] + +class TrustedAccessRolesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.aio.ContainerServiceClient`'s + :attr:`trusted_access_roles` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs) -> None: + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + location: str, + **kwargs: Any + ) -> AsyncIterable[_models.TrustedAccessRoleListResult]: + """List supported trusted access roles. + + List supported trusted access roles. + + :param location: The name of Azure region. + :type location: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TrustedAccessRoleListResult or the result of + cls(response) + :rtype: + ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + async def extract_data(pipeline_response): + deserialized = self._deserialize("TrustedAccessRoleListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, AsyncList(list_of_elem) + + async def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return AsyncItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/trustedAccessRoles"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py new file mode 100644 index 00000000000..ed73aaf1cee --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/__init__.py @@ -0,0 +1,345 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._models_py3 import AgentPool +from ._models_py3 import AgentPoolAvailableVersions +from ._models_py3 import AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem +from ._models_py3 import AgentPoolListResult +from ._models_py3 import AgentPoolUpgradeProfile +from ._models_py3 import AgentPoolUpgradeProfilePropertiesUpgradesItem +from ._models_py3 import AgentPoolUpgradeSettings +from ._models_py3 import AzureEntityResource +from ._models_py3 import AzureKeyVaultKms +from ._models_py3 import CloudErrorBody +from ._models_py3 import ContainerServiceDiagnosticsProfile +from ._models_py3 import ContainerServiceLinuxProfile +from ._models_py3 import ContainerServiceMasterProfile +from ._models_py3 import ContainerServiceNetworkProfile +from ._models_py3 import ContainerServiceSshConfiguration +from ._models_py3 import ContainerServiceSshPublicKey +from ._models_py3 import ContainerServiceVMDiagnostics +from ._models_py3 import CreationData +from ._models_py3 import CredentialResult +from ._models_py3 import CredentialResults +from ._models_py3 import EndpointDependency +from ._models_py3 import EndpointDetail +from ._models_py3 import ErrorAdditionalInfo +from ._models_py3 import ErrorDetail +from ._models_py3 import ErrorResponse +from ._models_py3 import ExtendedLocation +from ._models_py3 import Fleet +from ._models_py3 import FleetCredentialResult +from ._models_py3 import FleetCredentialResults +from ._models_py3 import FleetHubProfile +from ._models_py3 import FleetListResult +from ._models_py3 import FleetMember +from ._models_py3 import FleetMembersListResult +from ._models_py3 import FleetPatch +from ._models_py3 import KubeletConfig +from ._models_py3 import LinuxOSConfig +from ._models_py3 import MaintenanceConfiguration +from ._models_py3 import MaintenanceConfigurationListResult +from ._models_py3 import ManagedCluster +from ._models_py3 import ManagedClusterAADProfile +from ._models_py3 import ManagedClusterAPIServerAccessProfile +from ._models_py3 import ManagedClusterAccessProfile +from ._models_py3 import ManagedClusterAddonProfile +from ._models_py3 import ManagedClusterAddonProfileIdentity +from ._models_py3 import ManagedClusterAgentPoolProfile +from ._models_py3 import ManagedClusterAgentPoolProfileProperties +from ._models_py3 import ManagedClusterAutoUpgradeProfile +from ._models_py3 import ManagedClusterHTTPProxyConfig +from ._models_py3 import ManagedClusterIdentity +from ._models_py3 import ManagedClusterIngressProfile +from ._models_py3 import ManagedClusterIngressProfileWebAppRouting +from ._models_py3 import ManagedClusterListResult +from ._models_py3 import ManagedClusterLoadBalancerProfile +from ._models_py3 import ManagedClusterLoadBalancerProfileManagedOutboundIPs +from ._models_py3 import ManagedClusterLoadBalancerProfileOutboundIPPrefixes +from ._models_py3 import ManagedClusterLoadBalancerProfileOutboundIPs +from ._models_py3 import ManagedClusterManagedOutboundIPProfile +from ._models_py3 import ManagedClusterNATGatewayProfile +from ._models_py3 import ManagedClusterOIDCIssuerProfile +from ._models_py3 import ManagedClusterPodIdentity +from ._models_py3 import ManagedClusterPodIdentityException +from ._models_py3 import ManagedClusterPodIdentityProfile +from ._models_py3 import ManagedClusterPodIdentityProvisioningError +from ._models_py3 import ManagedClusterPodIdentityProvisioningErrorBody +from ._models_py3 import ManagedClusterPodIdentityProvisioningInfo +from ._models_py3 import ManagedClusterPoolUpgradeProfile +from ._models_py3 import ManagedClusterPoolUpgradeProfileUpgradesItem +from ._models_py3 import ManagedClusterPropertiesAutoScalerProfile +from ._models_py3 import ManagedClusterPropertiesForSnapshot +from ._models_py3 import ManagedClusterSKU +from ._models_py3 import ManagedClusterSecurityProfile +from ._models_py3 import ManagedClusterSecurityProfileDefender +from ._models_py3 import ManagedClusterSecurityProfileDefenderSecurityMonitoring +from ._models_py3 import ManagedClusterSecurityProfileNodeRestriction +from ._models_py3 import ManagedClusterSecurityProfileWorkloadIdentity +from ._models_py3 import ManagedClusterServicePrincipalProfile +from ._models_py3 import ManagedClusterSnapshot +from ._models_py3 import ManagedClusterSnapshotListResult +from ._models_py3 import ManagedClusterStorageProfile +from ._models_py3 import ManagedClusterStorageProfileBlobCSIDriver +from ._models_py3 import ManagedClusterStorageProfileDiskCSIDriver +from ._models_py3 import ManagedClusterStorageProfileFileCSIDriver +from ._models_py3 import ManagedClusterStorageProfileSnapshotController +from ._models_py3 import ManagedClusterUpgradeProfile +from ._models_py3 import ManagedClusterWindowsProfile +from ._models_py3 import ManagedClusterWorkloadAutoScalerProfile +from ._models_py3 import ManagedClusterWorkloadAutoScalerProfileKeda +from ._models_py3 import ManagedServiceIdentityUserAssignedIdentitiesValue +from ._models_py3 import NetworkProfileForSnapshot +from ._models_py3 import OSOptionProfile +from ._models_py3 import OSOptionProperty +from ._models_py3 import OperationListResult +from ._models_py3 import OperationValue +from ._models_py3 import OutboundEnvironmentEndpoint +from ._models_py3 import OutboundEnvironmentEndpointCollection +from ._models_py3 import PowerState +from ._models_py3 import PrivateEndpoint +from ._models_py3 import PrivateEndpointConnection +from ._models_py3 import PrivateEndpointConnectionListResult +from ._models_py3 import PrivateLinkResource +from ._models_py3 import PrivateLinkResourcesListResult +from ._models_py3 import PrivateLinkServiceConnectionState +from ._models_py3 import Resource +from ._models_py3 import ResourceReference +from ._models_py3 import RunCommandRequest +from ._models_py3 import RunCommandResult +from ._models_py3 import Snapshot +from ._models_py3 import SnapshotListResult +from ._models_py3 import SubResource +from ._models_py3 import SysctlConfig +from ._models_py3 import SystemData +from ._models_py3 import TagsObject +from ._models_py3 import TimeInWeek +from ._models_py3 import TimeSpan +from ._models_py3 import TrackedResource +from ._models_py3 import TrustedAccessRole +from ._models_py3 import TrustedAccessRoleBinding +from ._models_py3 import TrustedAccessRoleBindingListResult +from ._models_py3 import TrustedAccessRoleListResult +from ._models_py3 import TrustedAccessRoleRule +from ._models_py3 import UserAssignedIdentity +from ._models_py3 import WindowsGmsaProfile + + +from ._container_service_client_enums import ( + AgentPoolMode, + AgentPoolType, + Code, + ConnectionStatus, + ContainerServiceStorageProfileTypes, + ContainerServiceVMSizeTypes, + Count, + CreatedByType, + Expander, + ExtendedLocationTypes, + FleetMemberProvisioningState, + FleetProvisioningState, + Format, + GPUInstanceProfile, + IpFamily, + KeyVaultNetworkAccessTypes, + KubeletDiskType, + LicenseType, + LoadBalancerSku, + ManagedClusterPodIdentityProvisioningState, + ManagedClusterSKUName, + ManagedClusterSKUTier, + NetworkMode, + NetworkPlugin, + NetworkPluginMode, + NetworkPolicy, + OSDiskType, + OSSKU, + OSType, + OutboundType, + PrivateEndpointConnectionProvisioningState, + PublicNetworkAccess, + ResourceIdentityType, + ScaleDownMode, + ScaleSetEvictionPolicy, + ScaleSetPriority, + SnapshotType, + TrustedAccessRoleBindingProvisioningState, + UpgradeChannel, + WeekDay, + WorkloadRuntime, +) +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'AgentPool', + 'AgentPoolAvailableVersions', + 'AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem', + 'AgentPoolListResult', + 'AgentPoolUpgradeProfile', + 'AgentPoolUpgradeProfilePropertiesUpgradesItem', + 'AgentPoolUpgradeSettings', + 'AzureEntityResource', + 'AzureKeyVaultKms', + 'CloudErrorBody', + 'ContainerServiceDiagnosticsProfile', + 'ContainerServiceLinuxProfile', + 'ContainerServiceMasterProfile', + 'ContainerServiceNetworkProfile', + 'ContainerServiceSshConfiguration', + 'ContainerServiceSshPublicKey', + 'ContainerServiceVMDiagnostics', + 'CreationData', + 'CredentialResult', + 'CredentialResults', + 'EndpointDependency', + 'EndpointDetail', + 'ErrorAdditionalInfo', + 'ErrorDetail', + 'ErrorResponse', + 'ExtendedLocation', + 'Fleet', + 'FleetCredentialResult', + 'FleetCredentialResults', + 'FleetHubProfile', + 'FleetListResult', + 'FleetMember', + 'FleetMembersListResult', + 'FleetPatch', + 'KubeletConfig', + 'LinuxOSConfig', + 'MaintenanceConfiguration', + 'MaintenanceConfigurationListResult', + 'ManagedCluster', + 'ManagedClusterAADProfile', + 'ManagedClusterAPIServerAccessProfile', + 'ManagedClusterAccessProfile', + 'ManagedClusterAddonProfile', + 'ManagedClusterAddonProfileIdentity', + 'ManagedClusterAgentPoolProfile', + 'ManagedClusterAgentPoolProfileProperties', + 'ManagedClusterAutoUpgradeProfile', + 'ManagedClusterHTTPProxyConfig', + 'ManagedClusterIdentity', + 'ManagedClusterIngressProfile', + 'ManagedClusterIngressProfileWebAppRouting', + 'ManagedClusterListResult', + 'ManagedClusterLoadBalancerProfile', + 'ManagedClusterLoadBalancerProfileManagedOutboundIPs', + 'ManagedClusterLoadBalancerProfileOutboundIPPrefixes', + 'ManagedClusterLoadBalancerProfileOutboundIPs', + 'ManagedClusterManagedOutboundIPProfile', + 'ManagedClusterNATGatewayProfile', + 'ManagedClusterOIDCIssuerProfile', + 'ManagedClusterPodIdentity', + 'ManagedClusterPodIdentityException', + 'ManagedClusterPodIdentityProfile', + 'ManagedClusterPodIdentityProvisioningError', + 'ManagedClusterPodIdentityProvisioningErrorBody', + 'ManagedClusterPodIdentityProvisioningInfo', + 'ManagedClusterPoolUpgradeProfile', + 'ManagedClusterPoolUpgradeProfileUpgradesItem', + 'ManagedClusterPropertiesAutoScalerProfile', + 'ManagedClusterPropertiesForSnapshot', + 'ManagedClusterSKU', + 'ManagedClusterSecurityProfile', + 'ManagedClusterSecurityProfileDefender', + 'ManagedClusterSecurityProfileDefenderSecurityMonitoring', + 'ManagedClusterSecurityProfileNodeRestriction', + 'ManagedClusterSecurityProfileWorkloadIdentity', + 'ManagedClusterServicePrincipalProfile', + 'ManagedClusterSnapshot', + 'ManagedClusterSnapshotListResult', + 'ManagedClusterStorageProfile', + 'ManagedClusterStorageProfileBlobCSIDriver', + 'ManagedClusterStorageProfileDiskCSIDriver', + 'ManagedClusterStorageProfileFileCSIDriver', + 'ManagedClusterStorageProfileSnapshotController', + 'ManagedClusterUpgradeProfile', + 'ManagedClusterWindowsProfile', + 'ManagedClusterWorkloadAutoScalerProfile', + 'ManagedClusterWorkloadAutoScalerProfileKeda', + 'ManagedServiceIdentityUserAssignedIdentitiesValue', + 'NetworkProfileForSnapshot', + 'OSOptionProfile', + 'OSOptionProperty', + 'OperationListResult', + 'OperationValue', + 'OutboundEnvironmentEndpoint', + 'OutboundEnvironmentEndpointCollection', + 'PowerState', + 'PrivateEndpoint', + 'PrivateEndpointConnection', + 'PrivateEndpointConnectionListResult', + 'PrivateLinkResource', + 'PrivateLinkResourcesListResult', + 'PrivateLinkServiceConnectionState', + 'Resource', + 'ResourceReference', + 'RunCommandRequest', + 'RunCommandResult', + 'Snapshot', + 'SnapshotListResult', + 'SubResource', + 'SysctlConfig', + 'SystemData', + 'TagsObject', + 'TimeInWeek', + 'TimeSpan', + 'TrackedResource', + 'TrustedAccessRole', + 'TrustedAccessRoleBinding', + 'TrustedAccessRoleBindingListResult', + 'TrustedAccessRoleListResult', + 'TrustedAccessRoleRule', + 'UserAssignedIdentity', + 'WindowsGmsaProfile', + 'AgentPoolMode', + 'AgentPoolType', + 'Code', + 'ConnectionStatus', + 'ContainerServiceStorageProfileTypes', + 'ContainerServiceVMSizeTypes', + 'Count', + 'CreatedByType', + 'Expander', + 'ExtendedLocationTypes', + 'FleetMemberProvisioningState', + 'FleetProvisioningState', + 'Format', + 'GPUInstanceProfile', + 'IpFamily', + 'KeyVaultNetworkAccessTypes', + 'KubeletDiskType', + 'LicenseType', + 'LoadBalancerSku', + 'ManagedClusterPodIdentityProvisioningState', + 'ManagedClusterSKUName', + 'ManagedClusterSKUTier', + 'NetworkMode', + 'NetworkPlugin', + 'NetworkPluginMode', + 'NetworkPolicy', + 'OSDiskType', + 'OSSKU', + 'OSType', + 'OutboundType', + 'PrivateEndpointConnectionProvisioningState', + 'PublicNetworkAccess', + 'ResourceIdentityType', + 'ScaleDownMode', + 'ScaleSetEvictionPolicy', + 'ScaleSetPriority', + 'SnapshotType', + 'TrustedAccessRoleBindingProvisioningState', + 'UpgradeChannel', + 'WeekDay', + 'WorkloadRuntime', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py new file mode 100644 index 00000000000..bf773613491 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_container_service_client_enums.py @@ -0,0 +1,639 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 +from azure.core import CaseInsensitiveEnumMeta + + +class AgentPoolMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """A cluster must have at least one 'System' Agent Pool at all times. For additional information + on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools + """ + + #: System agent pools are primarily for hosting critical system pods such as CoreDNS and + #: metrics-server. System agent pools osType must be Linux. System agent pools VM SKU must have at + #: least 2vCPUs and 4GB of memory. + SYSTEM = "System" + #: User agent pools are primarily for hosting your application pods. + USER = "User" + +class AgentPoolType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of Agent Pool. + """ + + #: Create an Agent Pool backed by a Virtual Machine Scale Set. + VIRTUAL_MACHINE_SCALE_SETS = "VirtualMachineScaleSets" + #: Use of this is strongly discouraged. + AVAILABILITY_SET = "AvailabilitySet" + +class Code(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Tells whether the cluster is Running or Stopped + """ + + #: The cluster is running. + RUNNING = "Running" + #: The cluster is stopped. + STOPPED = "Stopped" + +class ConnectionStatus(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The private link service connection status. + """ + + PENDING = "Pending" + APPROVED = "Approved" + REJECTED = "Rejected" + DISCONNECTED = "Disconnected" + +class ContainerServiceStorageProfileTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Specifies what kind of storage to use. If omitted, the default will be chosen on your behalf + based on the choice of orchestrator. + """ + + STORAGE_ACCOUNT = "StorageAccount" + MANAGED_DISKS = "ManagedDisks" + +class ContainerServiceVMSizeTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Size of agent VMs. Note: This is no longer maintained. + """ + + STANDARD_A1 = "Standard_A1" + STANDARD_A10 = "Standard_A10" + STANDARD_A11 = "Standard_A11" + STANDARD_A1_V2 = "Standard_A1_v2" + STANDARD_A2 = "Standard_A2" + STANDARD_A2_V2 = "Standard_A2_v2" + STANDARD_A2_M_V2 = "Standard_A2m_v2" + STANDARD_A3 = "Standard_A3" + STANDARD_A4 = "Standard_A4" + STANDARD_A4_V2 = "Standard_A4_v2" + STANDARD_A4_M_V2 = "Standard_A4m_v2" + STANDARD_A5 = "Standard_A5" + STANDARD_A6 = "Standard_A6" + STANDARD_A7 = "Standard_A7" + STANDARD_A8 = "Standard_A8" + STANDARD_A8_V2 = "Standard_A8_v2" + STANDARD_A8_M_V2 = "Standard_A8m_v2" + STANDARD_A9 = "Standard_A9" + STANDARD_B2_MS = "Standard_B2ms" + STANDARD_B2_S = "Standard_B2s" + STANDARD_B4_MS = "Standard_B4ms" + STANDARD_B8_MS = "Standard_B8ms" + STANDARD_D1 = "Standard_D1" + STANDARD_D11 = "Standard_D11" + STANDARD_D11_V2 = "Standard_D11_v2" + STANDARD_D11_V2_PROMO = "Standard_D11_v2_Promo" + STANDARD_D12 = "Standard_D12" + STANDARD_D12_V2 = "Standard_D12_v2" + STANDARD_D12_V2_PROMO = "Standard_D12_v2_Promo" + STANDARD_D13 = "Standard_D13" + STANDARD_D13_V2 = "Standard_D13_v2" + STANDARD_D13_V2_PROMO = "Standard_D13_v2_Promo" + STANDARD_D14 = "Standard_D14" + STANDARD_D14_V2 = "Standard_D14_v2" + STANDARD_D14_V2_PROMO = "Standard_D14_v2_Promo" + STANDARD_D15_V2 = "Standard_D15_v2" + STANDARD_D16_V3 = "Standard_D16_v3" + STANDARD_D16_S_V3 = "Standard_D16s_v3" + STANDARD_D1_V2 = "Standard_D1_v2" + STANDARD_D2 = "Standard_D2" + STANDARD_D2_V2 = "Standard_D2_v2" + STANDARD_D2_V2_PROMO = "Standard_D2_v2_Promo" + STANDARD_D2_V3 = "Standard_D2_v3" + STANDARD_D2_S_V3 = "Standard_D2s_v3" + STANDARD_D3 = "Standard_D3" + STANDARD_D32_V3 = "Standard_D32_v3" + STANDARD_D32_S_V3 = "Standard_D32s_v3" + STANDARD_D3_V2 = "Standard_D3_v2" + STANDARD_D3_V2_PROMO = "Standard_D3_v2_Promo" + STANDARD_D4 = "Standard_D4" + STANDARD_D4_V2 = "Standard_D4_v2" + STANDARD_D4_V2_PROMO = "Standard_D4_v2_Promo" + STANDARD_D4_V3 = "Standard_D4_v3" + STANDARD_D4_S_V3 = "Standard_D4s_v3" + STANDARD_D5_V2 = "Standard_D5_v2" + STANDARD_D5_V2_PROMO = "Standard_D5_v2_Promo" + STANDARD_D64_V3 = "Standard_D64_v3" + STANDARD_D64_S_V3 = "Standard_D64s_v3" + STANDARD_D8_V3 = "Standard_D8_v3" + STANDARD_D8_S_V3 = "Standard_D8s_v3" + STANDARD_DS1 = "Standard_DS1" + STANDARD_DS11 = "Standard_DS11" + STANDARD_DS11_V2 = "Standard_DS11_v2" + STANDARD_DS11_V2_PROMO = "Standard_DS11_v2_Promo" + STANDARD_DS12 = "Standard_DS12" + STANDARD_DS12_V2 = "Standard_DS12_v2" + STANDARD_DS12_V2_PROMO = "Standard_DS12_v2_Promo" + STANDARD_DS13 = "Standard_DS13" + STANDARD_DS13_2_V2 = "Standard_DS13-2_v2" + STANDARD_DS13_4_V2 = "Standard_DS13-4_v2" + STANDARD_DS13_V2 = "Standard_DS13_v2" + STANDARD_DS13_V2_PROMO = "Standard_DS13_v2_Promo" + STANDARD_DS14 = "Standard_DS14" + STANDARD_DS14_4_V2 = "Standard_DS14-4_v2" + STANDARD_DS14_8_V2 = "Standard_DS14-8_v2" + STANDARD_DS14_V2 = "Standard_DS14_v2" + STANDARD_DS14_V2_PROMO = "Standard_DS14_v2_Promo" + STANDARD_DS15_V2 = "Standard_DS15_v2" + STANDARD_DS1_V2 = "Standard_DS1_v2" + STANDARD_DS2 = "Standard_DS2" + STANDARD_DS2_V2 = "Standard_DS2_v2" + STANDARD_DS2_V2_PROMO = "Standard_DS2_v2_Promo" + STANDARD_DS3 = "Standard_DS3" + STANDARD_DS3_V2 = "Standard_DS3_v2" + STANDARD_DS3_V2_PROMO = "Standard_DS3_v2_Promo" + STANDARD_DS4 = "Standard_DS4" + STANDARD_DS4_V2 = "Standard_DS4_v2" + STANDARD_DS4_V2_PROMO = "Standard_DS4_v2_Promo" + STANDARD_DS5_V2 = "Standard_DS5_v2" + STANDARD_DS5_V2_PROMO = "Standard_DS5_v2_Promo" + STANDARD_E16_V3 = "Standard_E16_v3" + STANDARD_E16_S_V3 = "Standard_E16s_v3" + STANDARD_E2_V3 = "Standard_E2_v3" + STANDARD_E2_S_V3 = "Standard_E2s_v3" + STANDARD_E32_16_S_V3 = "Standard_E32-16s_v3" + STANDARD_E32_8_S_V3 = "Standard_E32-8s_v3" + STANDARD_E32_V3 = "Standard_E32_v3" + STANDARD_E32_S_V3 = "Standard_E32s_v3" + STANDARD_E4_V3 = "Standard_E4_v3" + STANDARD_E4_S_V3 = "Standard_E4s_v3" + STANDARD_E64_16_S_V3 = "Standard_E64-16s_v3" + STANDARD_E64_32_S_V3 = "Standard_E64-32s_v3" + STANDARD_E64_V3 = "Standard_E64_v3" + STANDARD_E64_S_V3 = "Standard_E64s_v3" + STANDARD_E8_V3 = "Standard_E8_v3" + STANDARD_E8_S_V3 = "Standard_E8s_v3" + STANDARD_F1 = "Standard_F1" + STANDARD_F16 = "Standard_F16" + STANDARD_F16_S = "Standard_F16s" + STANDARD_F16_S_V2 = "Standard_F16s_v2" + STANDARD_F1_S = "Standard_F1s" + STANDARD_F2 = "Standard_F2" + STANDARD_F2_S = "Standard_F2s" + STANDARD_F2_S_V2 = "Standard_F2s_v2" + STANDARD_F32_S_V2 = "Standard_F32s_v2" + STANDARD_F4 = "Standard_F4" + STANDARD_F4_S = "Standard_F4s" + STANDARD_F4_S_V2 = "Standard_F4s_v2" + STANDARD_F64_S_V2 = "Standard_F64s_v2" + STANDARD_F72_S_V2 = "Standard_F72s_v2" + STANDARD_F8 = "Standard_F8" + STANDARD_F8_S = "Standard_F8s" + STANDARD_F8_S_V2 = "Standard_F8s_v2" + STANDARD_G1 = "Standard_G1" + STANDARD_G2 = "Standard_G2" + STANDARD_G3 = "Standard_G3" + STANDARD_G4 = "Standard_G4" + STANDARD_G5 = "Standard_G5" + STANDARD_GS1 = "Standard_GS1" + STANDARD_GS2 = "Standard_GS2" + STANDARD_GS3 = "Standard_GS3" + STANDARD_GS4 = "Standard_GS4" + STANDARD_GS4_4 = "Standard_GS4-4" + STANDARD_GS4_8 = "Standard_GS4-8" + STANDARD_GS5 = "Standard_GS5" + STANDARD_GS5_16 = "Standard_GS5-16" + STANDARD_GS5_8 = "Standard_GS5-8" + STANDARD_H16 = "Standard_H16" + STANDARD_H16_M = "Standard_H16m" + STANDARD_H16_MR = "Standard_H16mr" + STANDARD_H16_R = "Standard_H16r" + STANDARD_H8 = "Standard_H8" + STANDARD_H8_M = "Standard_H8m" + STANDARD_L16_S = "Standard_L16s" + STANDARD_L32_S = "Standard_L32s" + STANDARD_L4_S = "Standard_L4s" + STANDARD_L8_S = "Standard_L8s" + STANDARD_M128_32_MS = "Standard_M128-32ms" + STANDARD_M128_64_MS = "Standard_M128-64ms" + STANDARD_M128_MS = "Standard_M128ms" + STANDARD_M128_S = "Standard_M128s" + STANDARD_M64_16_MS = "Standard_M64-16ms" + STANDARD_M64_32_MS = "Standard_M64-32ms" + STANDARD_M64_MS = "Standard_M64ms" + STANDARD_M64_S = "Standard_M64s" + STANDARD_NC12 = "Standard_NC12" + STANDARD_NC12_S_V2 = "Standard_NC12s_v2" + STANDARD_NC12_S_V3 = "Standard_NC12s_v3" + STANDARD_NC24 = "Standard_NC24" + STANDARD_NC24_R = "Standard_NC24r" + STANDARD_NC24_RS_V2 = "Standard_NC24rs_v2" + STANDARD_NC24_RS_V3 = "Standard_NC24rs_v3" + STANDARD_NC24_S_V2 = "Standard_NC24s_v2" + STANDARD_NC24_S_V3 = "Standard_NC24s_v3" + STANDARD_NC6 = "Standard_NC6" + STANDARD_NC6_S_V2 = "Standard_NC6s_v2" + STANDARD_NC6_S_V3 = "Standard_NC6s_v3" + STANDARD_ND12_S = "Standard_ND12s" + STANDARD_ND24_RS = "Standard_ND24rs" + STANDARD_ND24_S = "Standard_ND24s" + STANDARD_ND6_S = "Standard_ND6s" + STANDARD_NV12 = "Standard_NV12" + STANDARD_NV24 = "Standard_NV24" + STANDARD_NV6 = "Standard_NV6" + +class Count(int, Enum, metaclass=CaseInsensitiveEnumMeta): + """Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, and 5. The + default value is 1. + """ + + ONE = 1 + THREE = 3 + FIVE = 5 + +class CreatedByType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of identity that created the resource. + """ + + USER = "User" + APPLICATION = "Application" + MANAGED_IDENTITY = "ManagedIdentity" + KEY = "Key" + +class Expander(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """If not specified, the default is 'random'. See `expanders + `_ + for more information. + """ + + #: Selects the node group that will have the least idle CPU (if tied, unused memory) after + #: scale-up. This is useful when you have different classes of nodes, for example, high CPU or + #: high memory nodes, and only want to expand those when there are pending pods that need a lot of + #: those resources. + LEAST_WASTE = "least-waste" + #: Selects the node group that would be able to schedule the most pods when scaling up. This is + #: useful when you are using nodeSelector to make sure certain pods land on certain nodes. Note + #: that this won't cause the autoscaler to select bigger nodes vs. smaller, as it can add multiple + #: smaller nodes at once. + MOST_PODS = "most-pods" + #: Selects the node group that has the highest priority assigned by the user. It's configuration + #: is described in more details `here + #: `_. + PRIORITY = "priority" + #: Used when you don't have a particular need for the node groups to scale differently. + RANDOM = "random" + +class ExtendedLocationTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of extendedLocation. + """ + + EDGE_ZONE = "EdgeZone" + +class FleetMemberProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The provisioning state of the last accepted operation. + """ + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + JOINING = "Joining" + LEAVING = "Leaving" + UPDATING = "Updating" + +class FleetProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The provisioning state of the last accepted operation. + """ + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + CANCELED = "Canceled" + CREATING = "Creating" + DELETING = "Deleting" + UPDATING = "Updating" + +class Format(str, Enum, metaclass=CaseInsensitiveEnumMeta): + + #: Return azure auth-provider kubeconfig. This format is deprecated in 1.22 and will be fully + #: removed in 1.25. + AZURE = "azure" + #: Return exec format kubeconfig. This format requires kubelogin binary in the path. + EXEC_ENUM = "exec" + +class GPUInstanceProfile(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """GPUInstanceProfile to be used to specify GPU MIG instance profile for supported GPU VM SKU. + """ + + MIG1_G = "MIG1g" + MIG2_G = "MIG2g" + MIG3_G = "MIG3g" + MIG4_G = "MIG4g" + MIG7_G = "MIG7g" + +class IpFamily(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The IP version to use for cluster networking and IP assignment. + """ + + I_PV4 = "IPv4" + I_PV6 = "IPv6" + +class KeyVaultNetworkAccessTypes(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Network access of key vault. The possible values are ``Public`` and ``Private``. ``Public`` + means the key vault allows public access from all networks. ``Private`` means the key vault + disables public access and enables private link. The default value is ``Public``. + """ + + PUBLIC = "Public" + PRIVATE = "Private" + +class KubeletDiskType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Determines the placement of emptyDir volumes, container runtime data root, and Kubelet + ephemeral storage. + """ + + #: Kubelet will use the OS disk for its data. + OS = "OS" + #: Kubelet will use the temporary disk for its data. + TEMPORARY = "Temporary" + +class LicenseType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The license type to use for Windows VMs. See `Azure Hybrid User Benefits + `_ for more details. + """ + + #: No additional licensing is applied. + NONE = "None" + #: Enables Azure Hybrid User Benefits for Windows VMs. + WINDOWS_SERVER = "Windows_Server" + +class LoadBalancerSku(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The default is 'standard'. See `Azure Load Balancer SKUs + `_ for more information about the + differences between load balancer SKUs. + """ + + #: Use a a standard Load Balancer. This is the recommended Load Balancer SKU. For more information + #: about on working with the load balancer in the managed cluster, see the `standard Load Balancer + #: `_ article. + STANDARD = "standard" + #: Use a basic Load Balancer with limited functionality. + BASIC = "basic" + +class ManagedClusterPodIdentityProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The current provisioning state of the pod identity. + """ + + ASSIGNED = "Assigned" + UPDATING = "Updating" + DELETING = "Deleting" + FAILED = "Failed" + +class ManagedClusterSKUName(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The name of a managed cluster SKU. + """ + + BASIC = "Basic" + +class ManagedClusterSKUTier(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """If not specified, the default is 'Free'. See `uptime SLA + `_ for more details. + """ + + #: Guarantees 99.95% availability of the Kubernetes API server endpoint for clusters that use + #: Availability Zones and 99.9% of availability for clusters that don't use Availability Zones. + PAID = "Paid" + #: No guaranteed SLA, no additional charges. Free tier clusters have an SLO of 99.5%. + FREE = "Free" + +class NetworkMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """This cannot be specified if networkPlugin is anything other than 'azure'. + """ + + #: No bridge is created. Intra-VM Pod to Pod communication is through IP routes created by Azure + #: CNI. See `Transparent Mode `_ for + #: more information. + TRANSPARENT = "transparent" + #: This is no longer supported. + BRIDGE = "bridge" + +class NetworkPlugin(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Network plugin used for building the Kubernetes network. + """ + + #: Use the Azure CNI network plugin. See `Azure CNI (advanced) networking + #: `_ for + #: more information. + AZURE = "azure" + #: Use the Kubenet network plugin. See `Kubenet (basic) networking + #: `_ for more + #: information. + KUBENET = "kubenet" + #: Do not use a network plugin. A custom CNI will need to be installed after cluster creation for + #: networking functionality. + NONE = "none" + +class NetworkPluginMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The mode the network plugin should use. + """ + + #: Pods are given IPs from the PodCIDR address space but use Azure Routing Domains rather than + #: Kubenet reference plugins host-local and bridge. + OVERLAY = "Overlay" + +class NetworkPolicy(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Network policy used for building the Kubernetes network. + """ + + #: Use Calico network policies. See `differences between Azure and Calico policies + #: `_ + #: for more information. + CALICO = "calico" + #: Use Azure network policies. See `differences between Azure and Calico policies + #: `_ + #: for more information. + AZURE = "azure" + +class OSDiskType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The default is 'Ephemeral' if the VM supports it and has a cache disk larger than the requested + OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed after creation. For more + information see `Ephemeral OS + `_. + """ + + #: Azure replicates the operating system disk for a virtual machine to Azure storage to avoid data + #: loss should the VM need to be relocated to another host. Since containers aren't designed to + #: have local state persisted, this behavior offers limited value while providing some drawbacks, + #: including slower node provisioning and higher read/write latency. + MANAGED = "Managed" + #: Ephemeral OS disks are stored only on the host machine, just like a temporary disk. This + #: provides lower read/write latency, along with faster node scaling and cluster upgrades. + EPHEMERAL = "Ephemeral" + +class OSSKU(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Specifies the OS SKU used by the agent pool. If not specified, the default is Ubuntu if + OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be changed to + Windows2022 after Windows2019 is deprecated. + """ + + UBUNTU = "Ubuntu" + CBL_MARINER = "CBLMariner" + WINDOWS2019 = "Windows2019" + WINDOWS2022 = "Windows2022" + +class OSType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The operating system type. The default is Linux. + """ + + #: Use Linux. + LINUX = "Linux" + #: Use Windows. + WINDOWS = "Windows" + +class OutboundType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """This can only be set at cluster creation time and cannot be changed later. For more information + see `egress outbound type `_. + """ + + #: The load balancer is used for egress through an AKS assigned public IP. This supports + #: Kubernetes services of type 'loadBalancer'. For more information see `outbound type + #: loadbalancer + #: `_. + LOAD_BALANCER = "loadBalancer" + #: Egress paths must be defined by the user. This is an advanced scenario and requires proper + #: network configuration. For more information see `outbound type userDefinedRouting + #: `_. + USER_DEFINED_ROUTING = "userDefinedRouting" + #: The AKS-managed NAT gateway is used for egress. + MANAGED_NAT_GATEWAY = "managedNATGateway" + #: The user-assigned NAT gateway associated to the cluster subnet is used for egress. This is an + #: advanced scenario and requires proper network configuration. + USER_ASSIGNED_NAT_GATEWAY = "userAssignedNATGateway" + +class PrivateEndpointConnectionProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The current provisioning state. + """ + + SUCCEEDED = "Succeeded" + CREATING = "Creating" + DELETING = "Deleting" + FAILED = "Failed" + +class PublicNetworkAccess(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Allow or deny public network access for AKS + """ + + ENABLED = "Enabled" + DISABLED = "Disabled" + +class ResourceIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """For more information see `use managed identities in AKS + `_. + """ + + #: Use an implicitly created system assigned managed identity to manage cluster resources. Master + #: components in the control plane such as kube-controller-manager will use the system assigned + #: managed identity to manipulate Azure resources. + SYSTEM_ASSIGNED = "SystemAssigned" + #: Use a user-specified identity to manage cluster resources. Master components in the control + #: plane such as kube-controller-manager will use the specified user assigned managed identity to + #: manipulate Azure resources. + USER_ASSIGNED = "UserAssigned" + #: Do not use a managed identity for the Managed Cluster, service principal will be used instead. + NONE = "None" + +class ScaleDownMode(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Describes how VMs are added to or removed from Agent Pools. See `billing states + `_. + """ + + #: Create new instances during scale up and remove instances during scale down. + DELETE = "Delete" + #: Attempt to start deallocated instances (if they exist) during scale up and deallocate instances + #: during scale down. + DEALLOCATE = "Deallocate" + +class ScaleSetEvictionPolicy(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The eviction policy specifies what to do with the VM when it is evicted. The default is Delete. + For more information about eviction see `spot VMs + `_ + """ + + #: Nodes in the underlying Scale Set of the node pool are deleted when they're evicted. + DELETE = "Delete" + #: Nodes in the underlying Scale Set of the node pool are set to the stopped-deallocated state + #: upon eviction. Nodes in the stopped-deallocated state count against your compute quota and can + #: cause issues with cluster scaling or upgrading. + DEALLOCATE = "Deallocate" + +class ScaleSetPriority(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The Virtual Machine Scale Set priority. + """ + + #: Spot priority VMs will be used. There is no SLA for spot nodes. See `spot on AKS + #: `_ for more information. + SPOT = "Spot" + #: Regular VMs will be used. + REGULAR = "Regular" + +class SnapshotType(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The type of a snapshot. The default is NodePool. + """ + + #: The snapshot is a snapshot of a node pool. + NODE_POOL = "NodePool" + #: The snapshot is a snapshot of a managed cluster. + MANAGED_CLUSTER = "ManagedCluster" + +class TrustedAccessRoleBindingProvisioningState(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The current provisioning state of trusted access role binding. + """ + + SUCCEEDED = "Succeeded" + FAILED = "Failed" + UPDATING = "Updating" + DELETING = "Deleting" + +class UpgradeChannel(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """For more information see `setting the AKS cluster auto-upgrade channel + `_. + """ + + #: Automatically upgrade the cluster to the latest supported patch release on the latest supported + #: minor version. In cases where the cluster is at a version of Kubernetes that is at an N-2 minor + #: version where N is the latest supported minor version, the cluster first upgrades to the latest + #: supported patch version on N-1 minor version. For example, if a cluster is running version + #: 1.17.7 and versions 1.17.9, 1.18.4, 1.18.6, and 1.19.1 are available, your cluster first is + #: upgraded to 1.18.6, then is upgraded to 1.19.1. + RAPID = "rapid" + #: Automatically upgrade the cluster to the latest supported patch release on minor version N-1, + #: where N is the latest supported minor version. For example, if a cluster is running version + #: 1.17.7 and versions 1.17.9, 1.18.4, 1.18.6, and 1.19.1 are available, your cluster is upgraded + #: to 1.18.6. + STABLE = "stable" + #: Automatically upgrade the cluster to the latest supported patch version when it becomes + #: available while keeping the minor version the same. For example, if a cluster is running + #: version 1.17.7 and versions 1.17.9, 1.18.4, 1.18.6, and 1.19.1 are available, your cluster is + #: upgraded to 1.17.9. + PATCH = "patch" + #: Automatically upgrade the node image to the latest version available. Microsoft provides + #: patches and new images for image nodes frequently (usually weekly), but your running nodes + #: won't get the new images unless you do a node image upgrade. Turning on the node-image channel + #: will automatically update your node images whenever a new version is available. + NODE_IMAGE = "node-image" + #: Disables auto-upgrades and keeps the cluster at its current version of Kubernetes. + NONE = "none" + +class WeekDay(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """The weekday enum. + """ + + SUNDAY = "Sunday" + MONDAY = "Monday" + TUESDAY = "Tuesday" + WEDNESDAY = "Wednesday" + THURSDAY = "Thursday" + FRIDAY = "Friday" + SATURDAY = "Saturday" + +class WorkloadRuntime(str, Enum, metaclass=CaseInsensitiveEnumMeta): + """Determines the type of workload a node can run. + """ + + #: Nodes will use Kubelet to run standard OCI container workloads. + OCI_CONTAINER = "OCIContainer" + #: Nodes will use Krustlet to run WASM workloads using the WASI provider (Preview). + WASM_WASI = "WasmWasi" diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py new file mode 100644 index 00000000000..519a0d572f2 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_models_py3.py @@ -0,0 +1,7631 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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. +# -------------------------------------------------------------------------- + +import datetime +from typing import Dict, List, Optional, TYPE_CHECKING, Union + +from azure.core.exceptions import HttpResponseError +import msrest.serialization + +if TYPE_CHECKING: + # pylint: disable=unused-import,ungrouped-imports + import __init__ as _models + + +class SubResource(msrest.serialization.Model): + """Reference to another subresource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: The name of the resource that is unique within a resource group. This name can be + used to access the resource. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + """ + + _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'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(SubResource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + + +class AgentPool(SubResource): + """Agent Pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: The name of the resource that is unique within a resource group. This name can be + used to access the resource. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :vartype count: int + :ivar vm_size: VM size availability varies by region. If a node contains insufficient compute + resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted + VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :vartype vm_size: str + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in the master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :vartype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data + root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :vartype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :ivar workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :vartype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :vartype message_of_the_day: str + :ivar vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and used. + If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just + nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype vnet_subnet_id: str + :ivar pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype pod_subnet_id: str + :ivar max_pods: The maximum number of pods that can run on a node. + :vartype max_pods: int + :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :ivar max_count: The maximum number of nodes for auto-scaling. + :vartype max_count: int + :ivar min_count: The minimum number of nodes for auto-scaling. + :vartype min_count: int + :ivar enable_auto_scaling: Whether to enable auto-scaler. + :vartype enable_auto_scaling: bool + :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it + defaults to Delete. Known values are: "Delete", "Deallocate". + :vartype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :ivar type_properties_type: The type of Agent Pool. Known values are: + "VirtualMachineScaleSets", "AvailabilitySet". + :vartype type_properties_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional + information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :ivar orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :vartype orchestrator_version: str + :ivar current_orchestrator_version: If orchestratorVersion was a fully specified version + , this field will be exactly equal to it. If orchestratorVersion was + , this field will contain the full version being used. + :vartype current_orchestrator_version: str + :ivar node_image_version: The version of node image. + :vartype node_image_version: str + :ivar upgrade_settings: Settings for upgrading the agentpool. + :vartype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :ivar provisioning_state: The current deployment or provisioning state. + :vartype provisioning_state: str + :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool + can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and + does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :ivar availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :vartype availability_zones: list[str] + :ivar enable_node_public_ip: Some scenarios may require nodes in a node pool to receive their + own dedicated public IP addresses. A common scenario is for gaming workloads, where a console + needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :vartype enable_node_public_ip: bool + :ivar enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :vartype enable_custom_ca_trust: bool + :ivar node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :vartype node_public_ip_prefix_id: str + :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default + is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :vartype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :vartype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :vartype spot_max_price: float + :ivar tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :vartype tags: dict[str, str] + :ivar node_labels: The node labels to be persisted across all nodes in agent pool. + :vartype node_labels: dict[str, str] + :ivar node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :vartype node_taints: list[str] + :ivar proximity_placement_group_id: The ID for Proximity Placement Group. + :vartype proximity_placement_group_id: str + :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :ivar linux_os_config: The OS configuration of Linux agent nodes. + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :vartype enable_encryption_at_host: bool + :ivar enable_ultra_ssd: Whether to enable UltraSSD. + :vartype enable_ultra_ssd: bool + :ivar enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :vartype enable_fips: bool + :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile + for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". + :vartype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool + will be created/upgraded using a snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :vartype capacity_reservation_group_id: str + :ivar host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :vartype host_group_id: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'os_disk_size_gb': {'maximum': 2048, 'minimum': 0}, + 'current_orchestrator_version': {'readonly': True}, + 'node_image_version': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'count': {'key': 'properties.count', 'type': 'int'}, + 'vm_size': {'key': 'properties.vmSize', 'type': 'str'}, + 'os_disk_size_gb': {'key': 'properties.osDiskSizeGB', 'type': 'int'}, + 'os_disk_type': {'key': 'properties.osDiskType', 'type': 'str'}, + 'kubelet_disk_type': {'key': 'properties.kubeletDiskType', 'type': 'str'}, + 'workload_runtime': {'key': 'properties.workloadRuntime', 'type': 'str'}, + 'message_of_the_day': {'key': 'properties.messageOfTheDay', 'type': 'str'}, + 'vnet_subnet_id': {'key': 'properties.vnetSubnetID', 'type': 'str'}, + 'pod_subnet_id': {'key': 'properties.podSubnetID', 'type': 'str'}, + 'max_pods': {'key': 'properties.maxPods', 'type': 'int'}, + 'os_type': {'key': 'properties.osType', 'type': 'str'}, + 'os_sku': {'key': 'properties.osSKU', 'type': 'str'}, + 'max_count': {'key': 'properties.maxCount', 'type': 'int'}, + 'min_count': {'key': 'properties.minCount', 'type': 'int'}, + 'enable_auto_scaling': {'key': 'properties.enableAutoScaling', 'type': 'bool'}, + 'scale_down_mode': {'key': 'properties.scaleDownMode', 'type': 'str'}, + 'type_properties_type': {'key': 'properties.type', 'type': 'str'}, + 'mode': {'key': 'properties.mode', 'type': 'str'}, + 'orchestrator_version': {'key': 'properties.orchestratorVersion', 'type': 'str'}, + 'current_orchestrator_version': {'key': 'properties.currentOrchestratorVersion', 'type': 'str'}, + 'node_image_version': {'key': 'properties.nodeImageVersion', 'type': 'str'}, + 'upgrade_settings': {'key': 'properties.upgradeSettings', 'type': 'AgentPoolUpgradeSettings'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'power_state': {'key': 'properties.powerState', 'type': 'PowerState'}, + 'availability_zones': {'key': 'properties.availabilityZones', 'type': '[str]'}, + 'enable_node_public_ip': {'key': 'properties.enableNodePublicIP', 'type': 'bool'}, + 'enable_custom_ca_trust': {'key': 'properties.enableCustomCATrust', 'type': 'bool'}, + 'node_public_ip_prefix_id': {'key': 'properties.nodePublicIPPrefixID', 'type': 'str'}, + 'scale_set_priority': {'key': 'properties.scaleSetPriority', 'type': 'str'}, + 'scale_set_eviction_policy': {'key': 'properties.scaleSetEvictionPolicy', 'type': 'str'}, + 'spot_max_price': {'key': 'properties.spotMaxPrice', 'type': 'float'}, + 'tags': {'key': 'properties.tags', 'type': '{str}'}, + 'node_labels': {'key': 'properties.nodeLabels', 'type': '{str}'}, + 'node_taints': {'key': 'properties.nodeTaints', 'type': '[str]'}, + 'proximity_placement_group_id': {'key': 'properties.proximityPlacementGroupID', 'type': 'str'}, + 'kubelet_config': {'key': 'properties.kubeletConfig', 'type': 'KubeletConfig'}, + 'linux_os_config': {'key': 'properties.linuxOSConfig', 'type': 'LinuxOSConfig'}, + 'enable_encryption_at_host': {'key': 'properties.enableEncryptionAtHost', 'type': 'bool'}, + 'enable_ultra_ssd': {'key': 'properties.enableUltraSSD', 'type': 'bool'}, + 'enable_fips': {'key': 'properties.enableFIPS', 'type': 'bool'}, + 'gpu_instance_profile': {'key': 'properties.gpuInstanceProfile', 'type': 'str'}, + 'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'}, + 'capacity_reservation_group_id': {'key': 'properties.capacityReservationGroupID', 'type': 'str'}, + 'host_group_id': {'key': 'properties.hostGroupID', 'type': 'str'}, + } + + def __init__( + self, + *, + count: Optional[int] = None, + vm_size: Optional[str] = None, + os_disk_size_gb: Optional[int] = None, + os_disk_type: Optional[Union[str, "_models.OSDiskType"]] = None, + kubelet_disk_type: Optional[Union[str, "_models.KubeletDiskType"]] = None, + workload_runtime: Optional[Union[str, "_models.WorkloadRuntime"]] = None, + message_of_the_day: Optional[str] = None, + vnet_subnet_id: Optional[str] = None, + pod_subnet_id: Optional[str] = None, + max_pods: Optional[int] = None, + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", + os_sku: Optional[Union[str, "_models.OSSKU"]] = None, + max_count: Optional[int] = None, + min_count: Optional[int] = None, + enable_auto_scaling: Optional[bool] = None, + scale_down_mode: Optional[Union[str, "_models.ScaleDownMode"]] = None, + type_properties_type: Optional[Union[str, "_models.AgentPoolType"]] = None, + mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, + orchestrator_version: Optional[str] = None, + upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, + power_state: Optional["_models.PowerState"] = None, + availability_zones: Optional[List[str]] = None, + enable_node_public_ip: Optional[bool] = None, + enable_custom_ca_trust: Optional[bool] = None, + node_public_ip_prefix_id: Optional[str] = None, + scale_set_priority: Optional[Union[str, "_models.ScaleSetPriority"]] = "Regular", + scale_set_eviction_policy: Optional[Union[str, "_models.ScaleSetEvictionPolicy"]] = "Delete", + spot_max_price: Optional[float] = -1, + tags: Optional[Dict[str, str]] = None, + node_labels: Optional[Dict[str, str]] = None, + node_taints: Optional[List[str]] = None, + proximity_placement_group_id: Optional[str] = None, + kubelet_config: Optional["_models.KubeletConfig"] = None, + linux_os_config: Optional["_models.LinuxOSConfig"] = None, + enable_encryption_at_host: Optional[bool] = None, + enable_ultra_ssd: Optional[bool] = None, + enable_fips: Optional[bool] = None, + gpu_instance_profile: Optional[Union[str, "_models.GPUInstanceProfile"]] = None, + creation_data: Optional["_models.CreationData"] = None, + capacity_reservation_group_id: Optional[str] = None, + host_group_id: Optional[str] = None, + **kwargs + ): + """ + :keyword count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :paramtype count: int + :keyword vm_size: VM size availability varies by region. If a node contains insufficient + compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on + restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :paramtype vm_size: str + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in the master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :paramtype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime + data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :paramtype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :keyword workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :paramtype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :paramtype message_of_the_day: str + :keyword vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and + used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to + just nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype vnet_subnet_id: str + :keyword pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype pod_subnet_id: str + :keyword max_pods: The maximum number of pods that can run on a node. + :paramtype max_pods: int + :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :keyword max_count: The maximum number of nodes for auto-scaling. + :paramtype max_count: int + :keyword min_count: The minimum number of nodes for auto-scaling. + :paramtype min_count: int + :keyword enable_auto_scaling: Whether to enable auto-scaler. + :paramtype enable_auto_scaling: bool + :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, + it defaults to Delete. Known values are: "Delete", "Deallocate". + :paramtype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :keyword type_properties_type: The type of Agent Pool. Known values are: + "VirtualMachineScaleSets", "AvailabilitySet". + :paramtype type_properties_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For + additional information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :keyword orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :paramtype orchestrator_version: str + :keyword upgrade_settings: Settings for upgrading the agentpool. + :paramtype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent + Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs + and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :keyword availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :paramtype availability_zones: list[str] + :keyword enable_node_public_ip: Some scenarios may require nodes in a node pool to receive + their own dedicated public IP addresses. A common scenario is for gaming workloads, where a + console needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :paramtype enable_node_public_ip: bool + :keyword enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :paramtype enable_custom_ca_trust: bool + :keyword node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :paramtype node_public_ip_prefix_id: str + :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the + default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :paramtype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :paramtype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :paramtype spot_max_price: float + :keyword tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :paramtype tags: dict[str, str] + :keyword node_labels: The node labels to be persisted across all nodes in agent pool. + :paramtype node_labels: dict[str, str] + :keyword node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :paramtype node_taints: list[str] + :keyword proximity_placement_group_id: The ID for Proximity Placement Group. + :paramtype proximity_placement_group_id: str + :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. + :paramtype kubelet_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :keyword linux_os_config: The OS configuration of Linux agent nodes. + :paramtype linux_os_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :paramtype enable_encryption_at_host: bool + :keyword enable_ultra_ssd: Whether to enable UltraSSD. + :paramtype enable_ultra_ssd: bool + :keyword enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :paramtype enable_fips: bool + :keyword gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance + profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", + "MIG7g". + :paramtype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node + pool will be created/upgraded using a snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :paramtype capacity_reservation_group_id: str + :keyword host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :paramtype host_group_id: str + """ + super(AgentPool, self).__init__(**kwargs) + self.count = count + self.vm_size = vm_size + self.os_disk_size_gb = os_disk_size_gb + self.os_disk_type = os_disk_type + self.kubelet_disk_type = kubelet_disk_type + self.workload_runtime = workload_runtime + self.message_of_the_day = message_of_the_day + self.vnet_subnet_id = vnet_subnet_id + self.pod_subnet_id = pod_subnet_id + self.max_pods = max_pods + self.os_type = os_type + self.os_sku = os_sku + self.max_count = max_count + self.min_count = min_count + self.enable_auto_scaling = enable_auto_scaling + self.scale_down_mode = scale_down_mode + self.type_properties_type = type_properties_type + self.mode = mode + self.orchestrator_version = orchestrator_version + self.current_orchestrator_version = None + self.node_image_version = None + self.upgrade_settings = upgrade_settings + self.provisioning_state = None + self.power_state = power_state + self.availability_zones = availability_zones + self.enable_node_public_ip = enable_node_public_ip + self.enable_custom_ca_trust = enable_custom_ca_trust + self.node_public_ip_prefix_id = node_public_ip_prefix_id + self.scale_set_priority = scale_set_priority + self.scale_set_eviction_policy = scale_set_eviction_policy + self.spot_max_price = spot_max_price + self.tags = tags + self.node_labels = node_labels + self.node_taints = node_taints + self.proximity_placement_group_id = proximity_placement_group_id + self.kubelet_config = kubelet_config + self.linux_os_config = linux_os_config + self.enable_encryption_at_host = enable_encryption_at_host + self.enable_ultra_ssd = enable_ultra_ssd + self.enable_fips = enable_fips + self.gpu_instance_profile = gpu_instance_profile + self.creation_data = creation_data + self.capacity_reservation_group_id = capacity_reservation_group_id + self.host_group_id = host_group_id + + +class AgentPoolAvailableVersions(msrest.serialization.Model): + """The list of available versions for an agent pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The ID of the agent pool version list. + :vartype id: str + :ivar name: The name of the agent pool version list. + :vartype name: str + :ivar type: Type of the agent pool version list. + :vartype type: str + :ivar agent_pool_versions: List of versions available for agent pool. + :vartype agent_pool_versions: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] + """ + + _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'}, + 'agent_pool_versions': {'key': 'properties.agentPoolVersions', 'type': '[AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem]'}, + } + + def __init__( + self, + *, + agent_pool_versions: Optional[List["_models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem"]] = None, + **kwargs + ): + """ + :keyword agent_pool_versions: List of versions available for agent pool. + :paramtype agent_pool_versions: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem] + """ + super(AgentPoolAvailableVersions, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.agent_pool_versions = agent_pool_versions + + +class AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem(msrest.serialization.Model): + """AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem. + + :ivar default: Whether this version is the default agent pool version. + :vartype default: bool + :ivar kubernetes_version: The Kubernetes version (major.minor.patch). + :vartype kubernetes_version: str + :ivar is_preview: Whether Kubernetes version is currently in preview. + :vartype is_preview: bool + """ + + _attribute_map = { + 'default': {'key': 'default', 'type': 'bool'}, + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + 'is_preview': {'key': 'isPreview', 'type': 'bool'}, + } + + def __init__( + self, + *, + default: Optional[bool] = None, + kubernetes_version: Optional[str] = None, + is_preview: Optional[bool] = None, + **kwargs + ): + """ + :keyword default: Whether this version is the default agent pool version. + :paramtype default: bool + :keyword kubernetes_version: The Kubernetes version (major.minor.patch). + :paramtype kubernetes_version: str + :keyword is_preview: Whether Kubernetes version is currently in preview. + :paramtype is_preview: bool + """ + super(AgentPoolAvailableVersionsPropertiesAgentPoolVersionsItem, self).__init__(**kwargs) + self.default = default + self.kubernetes_version = kubernetes_version + self.is_preview = is_preview + + +class AgentPoolListResult(msrest.serialization.Model): + """The response from the List Agent Pools operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of agent pools. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :ivar next_link: The URL to get the next set of agent pool results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[AgentPool]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.AgentPool"]] = None, + **kwargs + ): + """ + :keyword value: The list of agent pools. + :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + """ + super(AgentPoolListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class AgentPoolUpgradeProfile(msrest.serialization.Model): + """The list of available upgrades for an agent pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The ID of the agent pool upgrade profile. + :vartype id: str + :ivar name: The name of the agent pool upgrade profile. + :vartype name: str + :ivar type: The type of the agent pool upgrade profile. + :vartype type: str + :ivar kubernetes_version: Required. The Kubernetes version (major.minor.patch). + :vartype kubernetes_version: str + :ivar os_type: Required. The operating system type. The default is Linux. Known values are: + "Linux", "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar upgrades: List of orchestrator types and versions available for upgrade. + :vartype upgrades: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] + :ivar latest_node_image_version: The latest AKS supported node image version. + :vartype latest_node_image_version: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'kubernetes_version': {'required': True}, + 'os_type': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'kubernetes_version': {'key': 'properties.kubernetesVersion', 'type': 'str'}, + 'os_type': {'key': 'properties.osType', 'type': 'str'}, + 'upgrades': {'key': 'properties.upgrades', 'type': '[AgentPoolUpgradeProfilePropertiesUpgradesItem]'}, + 'latest_node_image_version': {'key': 'properties.latestNodeImageVersion', 'type': 'str'}, + } + + def __init__( + self, + *, + kubernetes_version: str, + os_type: Union[str, "_models.OSType"] = "Linux", + upgrades: Optional[List["_models.AgentPoolUpgradeProfilePropertiesUpgradesItem"]] = None, + latest_node_image_version: Optional[str] = None, + **kwargs + ): + """ + :keyword kubernetes_version: Required. The Kubernetes version (major.minor.patch). + :paramtype kubernetes_version: str + :keyword os_type: Required. The operating system type. The default is Linux. Known values are: + "Linux", "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :keyword upgrades: List of orchestrator types and versions available for upgrade. + :paramtype upgrades: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfilePropertiesUpgradesItem] + :keyword latest_node_image_version: The latest AKS supported node image version. + :paramtype latest_node_image_version: str + """ + super(AgentPoolUpgradeProfile, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.kubernetes_version = kubernetes_version + self.os_type = os_type + self.upgrades = upgrades + self.latest_node_image_version = latest_node_image_version + + +class AgentPoolUpgradeProfilePropertiesUpgradesItem(msrest.serialization.Model): + """AgentPoolUpgradeProfilePropertiesUpgradesItem. + + :ivar kubernetes_version: The Kubernetes version (major.minor.patch). + :vartype kubernetes_version: str + :ivar is_preview: Whether the Kubernetes version is currently in preview. + :vartype is_preview: bool + """ + + _attribute_map = { + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + 'is_preview': {'key': 'isPreview', 'type': 'bool'}, + } + + def __init__( + self, + *, + kubernetes_version: Optional[str] = None, + is_preview: Optional[bool] = None, + **kwargs + ): + """ + :keyword kubernetes_version: The Kubernetes version (major.minor.patch). + :paramtype kubernetes_version: str + :keyword is_preview: Whether the Kubernetes version is currently in preview. + :paramtype is_preview: bool + """ + super(AgentPoolUpgradeProfilePropertiesUpgradesItem, self).__init__(**kwargs) + self.kubernetes_version = kubernetes_version + self.is_preview = is_preview + + +class AgentPoolUpgradeSettings(msrest.serialization.Model): + """Settings for upgrading an agentpool. + + :ivar max_surge: This can either be set to an integer (e.g. '5') or a percentage (e.g. '50%'). + If a percentage is specified, it is the percentage of the total agent pool size at the time of + the upgrade. For percentages, fractional nodes are rounded up. If not specified, the default is + 1. For more information, including best practices, see: + https://docs.microsoft.com/azure/aks/upgrade-cluster#customize-node-surge-upgrade. + :vartype max_surge: str + """ + + _attribute_map = { + 'max_surge': {'key': 'maxSurge', 'type': 'str'}, + } + + def __init__( + self, + *, + max_surge: Optional[str] = None, + **kwargs + ): + """ + :keyword max_surge: This can either be set to an integer (e.g. '5') or a percentage (e.g. + '50%'). If a percentage is specified, it is the percentage of the total agent pool size at the + time of the upgrade. For percentages, fractional nodes are rounded up. If not specified, the + default is 1. For more information, including best practices, see: + https://docs.microsoft.com/azure/aks/upgrade-cluster#customize-node-surge-upgrade. + :paramtype max_surge: str + """ + super(AgentPoolUpgradeSettings, self).__init__(**kwargs) + self.max_surge = max_surge + + +class Resource(msrest.serialization.Model): + """Common fields that are returned in the response for all Azure Resource Manager resources. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(Resource, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.system_data = None + + +class AzureEntityResource(Resource): + """The resource model definition for an Azure Resource Manager resource with an etag. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar etag: Resource Etag. + :vartype etag: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'etag': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'etag': {'key': 'etag', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(AzureEntityResource, self).__init__(**kwargs) + self.etag = None + + +class AzureKeyVaultKms(msrest.serialization.Model): + """Azure Key Vault key management service settings for the security profile. + + :ivar enabled: Whether to enable Azure Key Vault key management service. The default is false. + :vartype enabled: bool + :ivar key_id: Identifier of Azure Key Vault key. See `key identifier format + `_ + for more details. When Azure Key Vault key management service is enabled, this field is + required and must be a valid key identifier. When Azure Key Vault key management service is + disabled, leave the field empty. + :vartype key_id: str + :ivar key_vault_network_access: Network access of key vault. The possible values are ``Public`` + and ``Private``. ``Public`` means the key vault allows public access from all networks. + ``Private`` means the key vault disables public access and enables private link. The default + value is ``Public``. Known values are: "Public", "Private". Default value: "Public". + :vartype key_vault_network_access: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KeyVaultNetworkAccessTypes + :ivar key_vault_resource_id: Resource ID of key vault. When keyVaultNetworkAccess is + ``Private``\ , this field is required and must be a valid resource ID. When + keyVaultNetworkAccess is ``Public``\ , leave the field empty. + :vartype key_vault_resource_id: str + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'key_id': {'key': 'keyId', 'type': 'str'}, + 'key_vault_network_access': {'key': 'keyVaultNetworkAccess', 'type': 'str'}, + 'key_vault_resource_id': {'key': 'keyVaultResourceId', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + key_id: Optional[str] = None, + key_vault_network_access: Optional[Union[str, "_models.KeyVaultNetworkAccessTypes"]] = "Public", + key_vault_resource_id: Optional[str] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Azure Key Vault key management service. The default is + false. + :paramtype enabled: bool + :keyword key_id: Identifier of Azure Key Vault key. See `key identifier format + `_ + for more details. When Azure Key Vault key management service is enabled, this field is + required and must be a valid key identifier. When Azure Key Vault key management service is + disabled, leave the field empty. + :paramtype key_id: str + :keyword key_vault_network_access: Network access of key vault. The possible values are + ``Public`` and ``Private``. ``Public`` means the key vault allows public access from all + networks. ``Private`` means the key vault disables public access and enables private link. The + default value is ``Public``. Known values are: "Public", "Private". Default value: "Public". + :paramtype key_vault_network_access: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KeyVaultNetworkAccessTypes + :keyword key_vault_resource_id: Resource ID of key vault. When keyVaultNetworkAccess is + ``Private``\ , this field is required and must be a valid resource ID. When + keyVaultNetworkAccess is ``Public``\ , leave the field empty. + :paramtype key_vault_resource_id: str + """ + super(AzureKeyVaultKms, self).__init__(**kwargs) + self.enabled = enabled + self.key_id = key_id + self.key_vault_network_access = key_vault_network_access + self.key_vault_resource_id = key_vault_resource_id + + +class CloudErrorBody(msrest.serialization.Model): + """An error response from the Container service. + + :ivar code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :vartype code: str + :ivar message: A message describing the error, intended to be suitable for display in a user + interface. + :vartype message: str + :ivar target: The target of the particular error. For example, the name of the property in + error. + :vartype target: str + :ivar details: A list of additional details about the error. + :vartype details: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CloudErrorBody] + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[CloudErrorBody]'}, + } + + def __init__( + self, + *, + code: Optional[str] = None, + message: Optional[str] = None, + target: Optional[str] = None, + details: Optional[List["_models.CloudErrorBody"]] = None, + **kwargs + ): + """ + :keyword code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :paramtype code: str + :keyword message: A message describing the error, intended to be suitable for display in a user + interface. + :paramtype message: str + :keyword target: The target of the particular error. For example, the name of the property in + error. + :paramtype target: str + :keyword details: A list of additional details about the error. + :paramtype details: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CloudErrorBody] + """ + super(CloudErrorBody, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + self.details = details + + +class ContainerServiceDiagnosticsProfile(msrest.serialization.Model): + """Profile for diagnostics on the container service cluster. + + All required parameters must be populated in order to send to Azure. + + :ivar vm_diagnostics: Required. Profile for diagnostics on the container service VMs. + :vartype vm_diagnostics: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMDiagnostics + """ + + _validation = { + 'vm_diagnostics': {'required': True}, + } + + _attribute_map = { + 'vm_diagnostics': {'key': 'vmDiagnostics', 'type': 'ContainerServiceVMDiagnostics'}, + } + + def __init__( + self, + *, + vm_diagnostics: "_models.ContainerServiceVMDiagnostics", + **kwargs + ): + """ + :keyword vm_diagnostics: Required. Profile for diagnostics on the container service VMs. + :paramtype vm_diagnostics: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMDiagnostics + """ + super(ContainerServiceDiagnosticsProfile, self).__init__(**kwargs) + self.vm_diagnostics = vm_diagnostics + + +class ContainerServiceLinuxProfile(msrest.serialization.Model): + """Profile for Linux VMs in the container service cluster. + + All required parameters must be populated in order to send to Azure. + + :ivar admin_username: Required. The administrator username to use for Linux VMs. + :vartype admin_username: str + :ivar ssh: Required. The SSH configuration for Linux-based VMs running on Azure. + :vartype ssh: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshConfiguration + """ + + _validation = { + 'admin_username': {'required': True, 'pattern': r'^[A-Za-z][-A-Za-z0-9_]*$'}, + 'ssh': {'required': True}, + } + + _attribute_map = { + 'admin_username': {'key': 'adminUsername', 'type': 'str'}, + 'ssh': {'key': 'ssh', 'type': 'ContainerServiceSshConfiguration'}, + } + + def __init__( + self, + *, + admin_username: str, + ssh: "_models.ContainerServiceSshConfiguration", + **kwargs + ): + """ + :keyword admin_username: Required. The administrator username to use for Linux VMs. + :paramtype admin_username: str + :keyword ssh: Required. The SSH configuration for Linux-based VMs running on Azure. + :paramtype ssh: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshConfiguration + """ + super(ContainerServiceLinuxProfile, self).__init__(**kwargs) + self.admin_username = admin_username + self.ssh = ssh + + +class ContainerServiceMasterProfile(msrest.serialization.Model): + """Profile for the container service master. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar count: Number of masters (VMs) in the container service cluster. Allowed values are 1, 3, + and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". + :vartype count: int or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Count + :ivar dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. + :vartype dns_prefix: str + :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", + "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", + "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", + "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", + "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", + "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", + "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", + "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", + "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", + "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", + "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", + "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", + "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", + "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", + "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", + "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", + "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", + "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", + "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", + "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", + "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", + "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", + "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", + "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", + "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", + "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", + "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", + "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", + "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", + "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", + "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". + :vartype vm_size: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMSizeTypes + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in this master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :vartype vnet_subnet_id: str + :ivar first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static ip + of masters. + :vartype first_consecutive_static_ip: str + :ivar storage_profile: Storage profile specifies what kind of storage used. Choose from + StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :vartype storage_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceStorageProfileTypes + :ivar fqdn: FQDN for the master pool. + :vartype fqdn: str + """ + + _validation = { + 'dns_prefix': {'required': True}, + 'vm_size': {'required': True}, + 'os_disk_size_gb': {'maximum': 2048, 'minimum': 0}, + 'fqdn': {'readonly': True}, + } + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + 'dns_prefix': {'key': 'dnsPrefix', 'type': 'str'}, + 'vm_size': {'key': 'vmSize', 'type': 'str'}, + 'os_disk_size_gb': {'key': 'osDiskSizeGB', 'type': 'int'}, + 'vnet_subnet_id': {'key': 'vnetSubnetID', 'type': 'str'}, + 'first_consecutive_static_ip': {'key': 'firstConsecutiveStaticIP', 'type': 'str'}, + 'storage_profile': {'key': 'storageProfile', 'type': 'str'}, + 'fqdn': {'key': 'fqdn', 'type': 'str'}, + } + + def __init__( + self, + *, + dns_prefix: str, + vm_size: Union[str, "_models.ContainerServiceVMSizeTypes"], + count: Optional[Union[int, "_models.Count"]] = 1, + os_disk_size_gb: Optional[int] = None, + vnet_subnet_id: Optional[str] = None, + first_consecutive_static_ip: Optional[str] = "10.240.255.5", + storage_profile: Optional[Union[str, "_models.ContainerServiceStorageProfileTypes"]] = None, + **kwargs + ): + """ + :keyword count: Number of masters (VMs) in the container service cluster. Allowed values are 1, + 3, and 5. The default value is 1. Known values are: 1, 3, 5. Default value: "1". + :paramtype count: int or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Count + :keyword dns_prefix: Required. DNS prefix to be used to create the FQDN for the master pool. + :paramtype dns_prefix: str + :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_A1", "Standard_A10", + "Standard_A11", "Standard_A1_v2", "Standard_A2", "Standard_A2_v2", "Standard_A2m_v2", + "Standard_A3", "Standard_A4", "Standard_A4_v2", "Standard_A4m_v2", "Standard_A5", + "Standard_A6", "Standard_A7", "Standard_A8", "Standard_A8_v2", "Standard_A8m_v2", + "Standard_A9", "Standard_B2ms", "Standard_B2s", "Standard_B4ms", "Standard_B8ms", + "Standard_D1", "Standard_D11", "Standard_D11_v2", "Standard_D11_v2_Promo", "Standard_D12", + "Standard_D12_v2", "Standard_D12_v2_Promo", "Standard_D13", "Standard_D13_v2", + "Standard_D13_v2_Promo", "Standard_D14", "Standard_D14_v2", "Standard_D14_v2_Promo", + "Standard_D15_v2", "Standard_D16_v3", "Standard_D16s_v3", "Standard_D1_v2", "Standard_D2", + "Standard_D2_v2", "Standard_D2_v2_Promo", "Standard_D2_v3", "Standard_D2s_v3", "Standard_D3", + "Standard_D32_v3", "Standard_D32s_v3", "Standard_D3_v2", "Standard_D3_v2_Promo", "Standard_D4", + "Standard_D4_v2", "Standard_D4_v2_Promo", "Standard_D4_v3", "Standard_D4s_v3", + "Standard_D5_v2", "Standard_D5_v2_Promo", "Standard_D64_v3", "Standard_D64s_v3", + "Standard_D8_v3", "Standard_D8s_v3", "Standard_DS1", "Standard_DS11", "Standard_DS11_v2", + "Standard_DS11_v2_Promo", "Standard_DS12", "Standard_DS12_v2", "Standard_DS12_v2_Promo", + "Standard_DS13", "Standard_DS13-2_v2", "Standard_DS13-4_v2", "Standard_DS13_v2", + "Standard_DS13_v2_Promo", "Standard_DS14", "Standard_DS14-4_v2", "Standard_DS14-8_v2", + "Standard_DS14_v2", "Standard_DS14_v2_Promo", "Standard_DS15_v2", "Standard_DS1_v2", + "Standard_DS2", "Standard_DS2_v2", "Standard_DS2_v2_Promo", "Standard_DS3", "Standard_DS3_v2", + "Standard_DS3_v2_Promo", "Standard_DS4", "Standard_DS4_v2", "Standard_DS4_v2_Promo", + "Standard_DS5_v2", "Standard_DS5_v2_Promo", "Standard_E16_v3", "Standard_E16s_v3", + "Standard_E2_v3", "Standard_E2s_v3", "Standard_E32-16s_v3", "Standard_E32-8s_v3", + "Standard_E32_v3", "Standard_E32s_v3", "Standard_E4_v3", "Standard_E4s_v3", + "Standard_E64-16s_v3", "Standard_E64-32s_v3", "Standard_E64_v3", "Standard_E64s_v3", + "Standard_E8_v3", "Standard_E8s_v3", "Standard_F1", "Standard_F16", "Standard_F16s", + "Standard_F16s_v2", "Standard_F1s", "Standard_F2", "Standard_F2s", "Standard_F2s_v2", + "Standard_F32s_v2", "Standard_F4", "Standard_F4s", "Standard_F4s_v2", "Standard_F64s_v2", + "Standard_F72s_v2", "Standard_F8", "Standard_F8s", "Standard_F8s_v2", "Standard_G1", + "Standard_G2", "Standard_G3", "Standard_G4", "Standard_G5", "Standard_GS1", "Standard_GS2", + "Standard_GS3", "Standard_GS4", "Standard_GS4-4", "Standard_GS4-8", "Standard_GS5", + "Standard_GS5-16", "Standard_GS5-8", "Standard_H16", "Standard_H16m", "Standard_H16mr", + "Standard_H16r", "Standard_H8", "Standard_H8m", "Standard_L16s", "Standard_L32s", + "Standard_L4s", "Standard_L8s", "Standard_M128-32ms", "Standard_M128-64ms", "Standard_M128ms", + "Standard_M128s", "Standard_M64-16ms", "Standard_M64-32ms", "Standard_M64ms", "Standard_M64s", + "Standard_NC12", "Standard_NC12s_v2", "Standard_NC12s_v3", "Standard_NC24", "Standard_NC24r", + "Standard_NC24rs_v2", "Standard_NC24rs_v3", "Standard_NC24s_v2", "Standard_NC24s_v3", + "Standard_NC6", "Standard_NC6s_v2", "Standard_NC6s_v3", "Standard_ND12s", "Standard_ND24rs", + "Standard_ND24s", "Standard_ND6s", "Standard_NV12", "Standard_NV24", "Standard_NV6". + :paramtype vm_size: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceVMSizeTypes + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in this master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword vnet_subnet_id: VNet SubnetID specifies the VNet's subnet identifier. + :paramtype vnet_subnet_id: str + :keyword first_consecutive_static_ip: FirstConsecutiveStaticIP used to specify the first static + ip of masters. + :paramtype first_consecutive_static_ip: str + :keyword storage_profile: Storage profile specifies what kind of storage used. Choose from + StorageAccount and ManagedDisks. Leave it empty, we will choose for you based on the + orchestrator choice. Known values are: "StorageAccount", "ManagedDisks". + :paramtype storage_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceStorageProfileTypes + """ + super(ContainerServiceMasterProfile, self).__init__(**kwargs) + self.count = count + self.dns_prefix = dns_prefix + self.vm_size = vm_size + self.os_disk_size_gb = os_disk_size_gb + self.vnet_subnet_id = vnet_subnet_id + self.first_consecutive_static_ip = first_consecutive_static_ip + self.storage_profile = storage_profile + self.fqdn = None + + +class ContainerServiceNetworkProfile(msrest.serialization.Model): + """Profile of network configuration. + + :ivar network_plugin: Network plugin used for building the Kubernetes network. Known values + are: "azure", "kubenet", "none". Default value: "kubenet". + :vartype network_plugin: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + :ivar network_plugin_mode: Network plugin mode used for building the Kubernetes network. Known + values are: "Overlay". + :vartype network_plugin_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + :ivar network_policy: Network policy used for building the Kubernetes network. Known values + are: "calico", "azure". + :vartype network_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + :ivar network_mode: This cannot be specified if networkPlugin is anything other than 'azure'. + Known values are: "transparent", "bridge". + :vartype network_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + :ivar pod_cidr: A CIDR notation IP range from which to assign pod IPs when kubenet is used. + :vartype pod_cidr: str + :ivar service_cidr: A CIDR notation IP range from which to assign service cluster IPs. It must + not overlap with any Subnet IP ranges. + :vartype service_cidr: str + :ivar dns_service_ip: An IP address assigned to the Kubernetes DNS service. It must be within + the Kubernetes service address range specified in serviceCidr. + :vartype dns_service_ip: str + :ivar docker_bridge_cidr: A CIDR notation IP range assigned to the Docker bridge network. It + must not overlap with any Subnet IP ranges or the Kubernetes service address range. + :vartype docker_bridge_cidr: str + :ivar outbound_type: This can only be set at cluster creation time and cannot be changed later. + For more information see `egress outbound type + `_. Known values are: "loadBalancer", + "userDefinedRouting", "managedNATGateway", "userAssignedNATGateway". Default value: + "loadBalancer". + :vartype outbound_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundType + :ivar load_balancer_sku: The default is 'standard'. See `Azure Load Balancer SKUs + `_ for more information about the + differences between load balancer SKUs. Known values are: "standard", "basic". + :vartype load_balancer_sku: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + :ivar load_balancer_profile: Profile of the cluster load balancer. + :vartype load_balancer_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfile + :ivar nat_gateway_profile: Profile of the cluster NAT gateway. + :vartype nat_gateway_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterNATGatewayProfile + :ivar pod_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one for each + IP family (IPv4/IPv6), is expected for dual-stack networking. + :vartype pod_cidrs: list[str] + :ivar service_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one for + each IP family (IPv4/IPv6), is expected for dual-stack networking. They must not overlap with + any Subnet IP ranges. + :vartype service_cidrs: list[str] + :ivar ip_families: IP families are used to determine single-stack or dual-stack clusters. For + single-stack, the expected value is IPv4. For dual-stack, the expected values are IPv4 and + IPv6. + :vartype ip_families: list[str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.IpFamily] + """ + + _validation = { + 'pod_cidr': {'pattern': r'^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$'}, + 'service_cidr': {'pattern': r'^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$'}, + 'dns_service_ip': {'pattern': r'^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$'}, + 'docker_bridge_cidr': {'pattern': r'^([0-9]{1,3}\.){3}[0-9]{1,3}(\/([0-9]|[1-2][0-9]|3[0-2]))?$'}, + } + + _attribute_map = { + 'network_plugin': {'key': 'networkPlugin', 'type': 'str'}, + 'network_plugin_mode': {'key': 'networkPluginMode', 'type': 'str'}, + 'network_policy': {'key': 'networkPolicy', 'type': 'str'}, + 'network_mode': {'key': 'networkMode', 'type': 'str'}, + 'pod_cidr': {'key': 'podCidr', 'type': 'str'}, + 'service_cidr': {'key': 'serviceCidr', 'type': 'str'}, + 'dns_service_ip': {'key': 'dnsServiceIP', 'type': 'str'}, + 'docker_bridge_cidr': {'key': 'dockerBridgeCidr', 'type': 'str'}, + 'outbound_type': {'key': 'outboundType', 'type': 'str'}, + 'load_balancer_sku': {'key': 'loadBalancerSku', 'type': 'str'}, + 'load_balancer_profile': {'key': 'loadBalancerProfile', 'type': 'ManagedClusterLoadBalancerProfile'}, + 'nat_gateway_profile': {'key': 'natGatewayProfile', 'type': 'ManagedClusterNATGatewayProfile'}, + 'pod_cidrs': {'key': 'podCidrs', 'type': '[str]'}, + 'service_cidrs': {'key': 'serviceCidrs', 'type': '[str]'}, + 'ip_families': {'key': 'ipFamilies', 'type': '[str]'}, + } + + def __init__( + self, + *, + network_plugin: Optional[Union[str, "_models.NetworkPlugin"]] = "kubenet", + network_plugin_mode: Optional[Union[str, "_models.NetworkPluginMode"]] = None, + network_policy: Optional[Union[str, "_models.NetworkPolicy"]] = None, + network_mode: Optional[Union[str, "_models.NetworkMode"]] = None, + pod_cidr: Optional[str] = "10.244.0.0/16", + service_cidr: Optional[str] = "10.0.0.0/16", + dns_service_ip: Optional[str] = "10.0.0.10", + docker_bridge_cidr: Optional[str] = "172.17.0.1/16", + outbound_type: Optional[Union[str, "_models.OutboundType"]] = "loadBalancer", + load_balancer_sku: Optional[Union[str, "_models.LoadBalancerSku"]] = None, + load_balancer_profile: Optional["_models.ManagedClusterLoadBalancerProfile"] = None, + nat_gateway_profile: Optional["_models.ManagedClusterNATGatewayProfile"] = None, + pod_cidrs: Optional[List[str]] = None, + service_cidrs: Optional[List[str]] = None, + ip_families: Optional[List[Union[str, "_models.IpFamily"]]] = None, + **kwargs + ): + """ + :keyword network_plugin: Network plugin used for building the Kubernetes network. Known values + are: "azure", "kubenet", "none". Default value: "kubenet". + :paramtype network_plugin: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + :keyword network_plugin_mode: Network plugin mode used for building the Kubernetes network. + Known values are: "Overlay". + :paramtype network_plugin_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + :keyword network_policy: Network policy used for building the Kubernetes network. Known values + are: "calico", "azure". + :paramtype network_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + :keyword network_mode: This cannot be specified if networkPlugin is anything other than + 'azure'. Known values are: "transparent", "bridge". + :paramtype network_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + :keyword pod_cidr: A CIDR notation IP range from which to assign pod IPs when kubenet is used. + :paramtype pod_cidr: str + :keyword service_cidr: A CIDR notation IP range from which to assign service cluster IPs. It + must not overlap with any Subnet IP ranges. + :paramtype service_cidr: str + :keyword dns_service_ip: An IP address assigned to the Kubernetes DNS service. It must be + within the Kubernetes service address range specified in serviceCidr. + :paramtype dns_service_ip: str + :keyword docker_bridge_cidr: A CIDR notation IP range assigned to the Docker bridge network. It + must not overlap with any Subnet IP ranges or the Kubernetes service address range. + :paramtype docker_bridge_cidr: str + :keyword outbound_type: This can only be set at cluster creation time and cannot be changed + later. For more information see `egress outbound type + `_. Known values are: "loadBalancer", + "userDefinedRouting", "managedNATGateway", "userAssignedNATGateway". Default value: + "loadBalancer". + :paramtype outbound_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundType + :keyword load_balancer_sku: The default is 'standard'. See `Azure Load Balancer SKUs + `_ for more information about the + differences between load balancer SKUs. Known values are: "standard", "basic". + :paramtype load_balancer_sku: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + :keyword load_balancer_profile: Profile of the cluster load balancer. + :paramtype load_balancer_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfile + :keyword nat_gateway_profile: Profile of the cluster NAT gateway. + :paramtype nat_gateway_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterNATGatewayProfile + :keyword pod_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one for + each IP family (IPv4/IPv6), is expected for dual-stack networking. + :paramtype pod_cidrs: list[str] + :keyword service_cidrs: One IPv4 CIDR is expected for single-stack networking. Two CIDRs, one + for each IP family (IPv4/IPv6), is expected for dual-stack networking. They must not overlap + with any Subnet IP ranges. + :paramtype service_cidrs: list[str] + :keyword ip_families: IP families are used to determine single-stack or dual-stack clusters. + For single-stack, the expected value is IPv4. For dual-stack, the expected values are IPv4 and + IPv6. + :paramtype ip_families: list[str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.IpFamily] + """ + super(ContainerServiceNetworkProfile, self).__init__(**kwargs) + self.network_plugin = network_plugin + self.network_plugin_mode = network_plugin_mode + self.network_policy = network_policy + self.network_mode = network_mode + self.pod_cidr = pod_cidr + self.service_cidr = service_cidr + self.dns_service_ip = dns_service_ip + self.docker_bridge_cidr = docker_bridge_cidr + self.outbound_type = outbound_type + self.load_balancer_sku = load_balancer_sku + self.load_balancer_profile = load_balancer_profile + self.nat_gateway_profile = nat_gateway_profile + self.pod_cidrs = pod_cidrs + self.service_cidrs = service_cidrs + self.ip_families = ip_families + + +class ContainerServiceSshConfiguration(msrest.serialization.Model): + """SSH configuration for Linux-based VMs running on Azure. + + All required parameters must be populated in order to send to Azure. + + :ivar public_keys: Required. The list of SSH public keys used to authenticate with Linux-based + VMs. A maximum of 1 key may be specified. + :vartype public_keys: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshPublicKey] + """ + + _validation = { + 'public_keys': {'required': True}, + } + + _attribute_map = { + 'public_keys': {'key': 'publicKeys', 'type': '[ContainerServiceSshPublicKey]'}, + } + + def __init__( + self, + *, + public_keys: List["_models.ContainerServiceSshPublicKey"], + **kwargs + ): + """ + :keyword public_keys: Required. The list of SSH public keys used to authenticate with + Linux-based VMs. A maximum of 1 key may be specified. + :paramtype public_keys: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceSshPublicKey] + """ + super(ContainerServiceSshConfiguration, self).__init__(**kwargs) + self.public_keys = public_keys + + +class ContainerServiceSshPublicKey(msrest.serialization.Model): + """Contains information about SSH certificate public key data. + + All required parameters must be populated in order to send to Azure. + + :ivar key_data: Required. Certificate public key used to authenticate with VMs through SSH. The + certificate must be in PEM format with or without headers. + :vartype key_data: str + """ + + _validation = { + 'key_data': {'required': True}, + } + + _attribute_map = { + 'key_data': {'key': 'keyData', 'type': 'str'}, + } + + def __init__( + self, + *, + key_data: str, + **kwargs + ): + """ + :keyword key_data: Required. Certificate public key used to authenticate with VMs through SSH. + The certificate must be in PEM format with or without headers. + :paramtype key_data: str + """ + super(ContainerServiceSshPublicKey, self).__init__(**kwargs) + self.key_data = key_data + + +class ContainerServiceVMDiagnostics(msrest.serialization.Model): + """Profile for diagnostics on the container service VMs. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. + :vartype enabled: bool + :ivar storage_uri: The URI of the storage account where diagnostics are stored. + :vartype storage_uri: str + """ + + _validation = { + 'enabled': {'required': True}, + 'storage_uri': {'readonly': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'storage_uri': {'key': 'storageUri', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: bool, + **kwargs + ): + """ + :keyword enabled: Required. Whether the VM diagnostic agent is provisioned on the VM. + :paramtype enabled: bool + """ + super(ContainerServiceVMDiagnostics, self).__init__(**kwargs) + self.enabled = enabled + self.storage_uri = None + + +class CreationData(msrest.serialization.Model): + """Data used when creating a target resource from a source resource. + + :ivar source_resource_id: This is the ARM ID of the source object to be used to create the + target object. + :vartype source_resource_id: str + """ + + _attribute_map = { + 'source_resource_id': {'key': 'sourceResourceId', 'type': 'str'}, + } + + def __init__( + self, + *, + source_resource_id: Optional[str] = None, + **kwargs + ): + """ + :keyword source_resource_id: This is the ARM ID of the source object to be used to create the + target object. + :paramtype source_resource_id: str + """ + super(CreationData, self).__init__(**kwargs) + self.source_resource_id = source_resource_id + + +class CredentialResult(msrest.serialization.Model): + """The credential result response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: The name of the credential. + :vartype name: str + :ivar value: Base64-encoded Kubernetes configuration file. + :vartype value: bytearray + """ + + _validation = { + 'name': {'readonly': True}, + 'value': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'bytearray'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(CredentialResult, self).__init__(**kwargs) + self.name = None + self.value = None + + +class CredentialResults(msrest.serialization.Model): + """The list credential result response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar kubeconfigs: Base64-encoded Kubernetes configuration file. + :vartype kubeconfigs: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResult] + """ + + _validation = { + 'kubeconfigs': {'readonly': True}, + } + + _attribute_map = { + 'kubeconfigs': {'key': 'kubeconfigs', 'type': '[CredentialResult]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(CredentialResults, self).__init__(**kwargs) + self.kubeconfigs = None + + +class EndpointDependency(msrest.serialization.Model): + """A domain name that AKS agent nodes are reaching at. + + :ivar domain_name: The domain name of the dependency. + :vartype domain_name: str + :ivar endpoint_details: The Ports and Protocols used when connecting to domainName. + :vartype endpoint_details: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDetail] + """ + + _attribute_map = { + 'domain_name': {'key': 'domainName', 'type': 'str'}, + 'endpoint_details': {'key': 'endpointDetails', 'type': '[EndpointDetail]'}, + } + + def __init__( + self, + *, + domain_name: Optional[str] = None, + endpoint_details: Optional[List["_models.EndpointDetail"]] = None, + **kwargs + ): + """ + :keyword domain_name: The domain name of the dependency. + :paramtype domain_name: str + :keyword endpoint_details: The Ports and Protocols used when connecting to domainName. + :paramtype endpoint_details: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDetail] + """ + super(EndpointDependency, self).__init__(**kwargs) + self.domain_name = domain_name + self.endpoint_details = endpoint_details + + +class EndpointDetail(msrest.serialization.Model): + """connect information from the AKS agent nodes to a single endpoint. + + :ivar ip_address: An IP Address that Domain Name currently resolves to. + :vartype ip_address: str + :ivar port: The port an endpoint is connected to. + :vartype port: int + :ivar protocol: The protocol used for connection. + :vartype protocol: str + :ivar description: Description of the detail. + :vartype description: str + """ + + _attribute_map = { + 'ip_address': {'key': 'ipAddress', 'type': 'str'}, + 'port': {'key': 'port', 'type': 'int'}, + 'protocol': {'key': 'protocol', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + *, + ip_address: Optional[str] = None, + port: Optional[int] = None, + protocol: Optional[str] = None, + description: Optional[str] = None, + **kwargs + ): + """ + :keyword ip_address: An IP Address that Domain Name currently resolves to. + :paramtype ip_address: str + :keyword port: The port an endpoint is connected to. + :paramtype port: int + :keyword protocol: The protocol used for connection. + :paramtype protocol: str + :keyword description: Description of the detail. + :paramtype description: str + """ + super(EndpointDetail, self).__init__(**kwargs) + self.ip_address = ip_address + self.port = port + self.protocol = protocol + self.description = description + + +class ErrorAdditionalInfo(msrest.serialization.Model): + """The resource management error additional info. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar type: The additional info type. + :vartype type: str + :ivar info: The additional info. + :vartype info: any + """ + + _validation = { + 'type': {'readonly': True}, + 'info': {'readonly': True}, + } + + _attribute_map = { + 'type': {'key': 'type', 'type': 'str'}, + 'info': {'key': 'info', 'type': 'object'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(ErrorAdditionalInfo, self).__init__(**kwargs) + self.type = None + self.info = None + + +class ErrorDetail(msrest.serialization.Model): + """The error detail. + + 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 target: The error target. + :vartype target: str + :ivar details: The error details. + :vartype details: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail] + :ivar additional_info: The error additional info. + :vartype additional_info: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorAdditionalInfo] + """ + + _validation = { + 'code': {'readonly': True}, + 'message': {'readonly': True}, + 'target': {'readonly': True}, + 'details': {'readonly': True}, + 'additional_info': {'readonly': True}, + } + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ErrorDetail]'}, + 'additional_info': {'key': 'additionalInfo', 'type': '[ErrorAdditionalInfo]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(ErrorDetail, self).__init__(**kwargs) + self.code = None + self.message = None + self.target = None + self.details = None + self.additional_info = None + + +class ErrorResponse(msrest.serialization.Model): + """Common error response for all Azure Resource Manager APIs to return error details for failed operations. (This also follows the OData error response format.). + + :ivar error: The error object. + :vartype error: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ErrorDetail'}, + } + + def __init__( + self, + *, + error: Optional["_models.ErrorDetail"] = None, + **kwargs + ): + """ + :keyword error: The error object. + :paramtype error: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ErrorDetail + """ + super(ErrorResponse, self).__init__(**kwargs) + self.error = error + + +class ExtendedLocation(msrest.serialization.Model): + """The complex type of the extended location. + + :ivar name: The name of the extended location. + :vartype name: str + :ivar type: The type of the extended location. Known values are: "EdgeZone". + :vartype type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocationTypes + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[str] = None, + type: Optional[Union[str, "_models.ExtendedLocationTypes"]] = None, + **kwargs + ): + """ + :keyword name: The name of the extended location. + :paramtype name: str + :keyword type: The type of the extended location. Known values are: "EdgeZone". + :paramtype type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocationTypes + """ + super(ExtendedLocation, self).__init__(**kwargs) + self.name = name + self.type = type + + +class TrackedResource(Resource): + """The resource model definition for an Azure Resource Manager tracked top level resource which has 'tags' and a 'location'. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + """ + super(TrackedResource, self).__init__(**kwargs) + self.tags = tags + self.location = location + + +class Fleet(TrackedResource): + """The Fleet resource which contains multiple Kubernetes clusters as its members. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + :ivar etag: Resource Etag. + :vartype etag: str + :ivar hub_profile: The FleetHubProfile configures the Fleet's hub. + :vartype hub_profile: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetHubProfile + :ivar provisioning_state: The provisioning state of the last accepted operation. Known values + are: "Succeeded", "Failed", "Canceled", "Creating", "Deleting", "Updating". + :vartype provisioning_state: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + 'etag': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'hub_profile': {'key': 'properties.hubProfile', 'type': 'FleetHubProfile'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + hub_profile: Optional["_models.FleetHubProfile"] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + :keyword hub_profile: The FleetHubProfile configures the Fleet's hub. + :paramtype hub_profile: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetHubProfile + """ + super(Fleet, self).__init__(tags=tags, location=location, **kwargs) + self.etag = None + self.hub_profile = hub_profile + self.provisioning_state = None + + +class FleetCredentialResult(msrest.serialization.Model): + """The credential result response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar name: The name of the credential. + :vartype name: str + :ivar value: Base64-encoded Kubernetes configuration file. + :vartype value: bytearray + """ + + _validation = { + 'name': {'readonly': True}, + 'value': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'value': {'key': 'value', 'type': 'bytearray'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(FleetCredentialResult, self).__init__(**kwargs) + self.name = None + self.value = None + + +class FleetCredentialResults(msrest.serialization.Model): + """The list credential result response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar kubeconfigs: Base64-encoded Kubernetes configuration file. + :vartype kubeconfigs: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResult] + """ + + _validation = { + 'kubeconfigs': {'readonly': True}, + } + + _attribute_map = { + 'kubeconfigs': {'key': 'kubeconfigs', 'type': '[FleetCredentialResult]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(FleetCredentialResults, self).__init__(**kwargs) + self.kubeconfigs = None + + +class FleetHubProfile(msrest.serialization.Model): + """The FleetHubProfile configures the fleet hub. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar dns_prefix: DNS prefix used to create the FQDN for the Fleet hub. + :vartype dns_prefix: str + :ivar fqdn: The FQDN of the Fleet hub. + :vartype fqdn: str + :ivar kubernetes_version: The Kubernetes version of the Fleet hub. + :vartype kubernetes_version: str + """ + + _validation = { + 'fqdn': {'readonly': True}, + 'kubernetes_version': {'readonly': True}, + } + + _attribute_map = { + 'dns_prefix': {'key': 'dnsPrefix', 'type': 'str'}, + 'fqdn': {'key': 'fqdn', 'type': 'str'}, + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + } + + def __init__( + self, + *, + dns_prefix: Optional[str] = None, + **kwargs + ): + """ + :keyword dns_prefix: DNS prefix used to create the FQDN for the Fleet hub. + :paramtype dns_prefix: str + """ + super(FleetHubProfile, self).__init__(**kwargs) + self.dns_prefix = dns_prefix + self.fqdn = None + self.kubernetes_version = None + + +class FleetListResult(msrest.serialization.Model): + """The response from the List Fleets operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of Fleets. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + :ivar next_link: The URL to get the next page of Fleets. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Fleet]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.Fleet"]] = None, + **kwargs + ): + """ + :keyword value: The list of Fleets. + :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + """ + super(FleetListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class FleetMember(AzureEntityResource): + """A member of the Fleet. It contains a reference to an existing Kubernetes cluster on Azure. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar etag: Resource Etag. + :vartype etag: str + :ivar cluster_resource_id: The ARM resource id of the cluster that joins the Fleet. Must be a + valid Azure resource id. e.g.: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{clusterName}'. + :vartype cluster_resource_id: str + :ivar provisioning_state: The provisioning state of the last accepted operation. Known values + are: "Succeeded", "Failed", "Canceled", "Joining", "Leaving", "Updating". + :vartype provisioning_state: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMemberProvisioningState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'etag': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'etag': {'key': 'etag', 'type': 'str'}, + 'cluster_resource_id': {'key': 'properties.clusterResourceId', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + } + + def __init__( + self, + *, + cluster_resource_id: Optional[str] = None, + **kwargs + ): + """ + :keyword cluster_resource_id: The ARM resource id of the cluster that joins the Fleet. Must be + a valid Azure resource id. e.g.: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{clusterName}'. + :paramtype cluster_resource_id: str + """ + super(FleetMember, self).__init__(**kwargs) + self.cluster_resource_id = cluster_resource_id + self.provisioning_state = None + + +class FleetMembersListResult(msrest.serialization.Model): + """The response from the List FleetMembers operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of members in a given Fleet. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + :ivar next_link: The URL to get the next page of Fleet members. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[FleetMember]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.FleetMember"]] = None, + **kwargs + ): + """ + :keyword value: The list of members in a given Fleet. + :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + """ + super(FleetMembersListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class FleetPatch(msrest.serialization.Model): + """Properties of a Fleet that can be patched. + + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + """ + super(FleetPatch, self).__init__(**kwargs) + self.tags = tags + + +class KubeletConfig(msrest.serialization.Model): + """See `AKS custom node configuration `_ for more details. + + :ivar cpu_manager_policy: The default is 'none'. See `Kubernetes CPU management policies + `_ + for more information. Allowed values are 'none' and 'static'. + :vartype cpu_manager_policy: str + :ivar cpu_cfs_quota: The default is true. + :vartype cpu_cfs_quota: bool + :ivar cpu_cfs_quota_period: The default is '100ms.' Valid values are a sequence of decimal + numbers with an optional fraction and a unit suffix. For example: '300ms', '2h45m'. Supported + units are 'ns', 'us', 'ms', 's', 'm', and 'h'. + :vartype cpu_cfs_quota_period: str + :ivar image_gc_high_threshold: To disable image garbage collection, set to 100. The default is + 85%. + :vartype image_gc_high_threshold: int + :ivar image_gc_low_threshold: This cannot be set higher than imageGcHighThreshold. The default + is 80%. + :vartype image_gc_low_threshold: int + :ivar topology_manager_policy: For more information see `Kubernetes Topology Manager + `_. The default is + 'none'. Allowed values are 'none', 'best-effort', 'restricted', and 'single-numa-node'. + :vartype topology_manager_policy: str + :ivar allowed_unsafe_sysctls: Allowed list of unsafe sysctls or unsafe sysctl patterns (ending + in ``*``\ ). + :vartype allowed_unsafe_sysctls: list[str] + :ivar fail_swap_on: If set to true it will make the Kubelet fail to start if swap is enabled on + the node. + :vartype fail_swap_on: bool + :ivar container_log_max_size_mb: The maximum size (e.g. 10Mi) of container log file before it + is rotated. + :vartype container_log_max_size_mb: int + :ivar container_log_max_files: The maximum number of container log files that can be present + for a container. The number must be ≥ 2. + :vartype container_log_max_files: int + :ivar pod_max_pids: The maximum number of processes per pod. + :vartype pod_max_pids: int + """ + + _validation = { + 'container_log_max_files': {'minimum': 2}, + } + + _attribute_map = { + 'cpu_manager_policy': {'key': 'cpuManagerPolicy', 'type': 'str'}, + 'cpu_cfs_quota': {'key': 'cpuCfsQuota', 'type': 'bool'}, + 'cpu_cfs_quota_period': {'key': 'cpuCfsQuotaPeriod', 'type': 'str'}, + 'image_gc_high_threshold': {'key': 'imageGcHighThreshold', 'type': 'int'}, + 'image_gc_low_threshold': {'key': 'imageGcLowThreshold', 'type': 'int'}, + 'topology_manager_policy': {'key': 'topologyManagerPolicy', 'type': 'str'}, + 'allowed_unsafe_sysctls': {'key': 'allowedUnsafeSysctls', 'type': '[str]'}, + 'fail_swap_on': {'key': 'failSwapOn', 'type': 'bool'}, + 'container_log_max_size_mb': {'key': 'containerLogMaxSizeMB', 'type': 'int'}, + 'container_log_max_files': {'key': 'containerLogMaxFiles', 'type': 'int'}, + 'pod_max_pids': {'key': 'podMaxPids', 'type': 'int'}, + } + + def __init__( + self, + *, + cpu_manager_policy: Optional[str] = None, + cpu_cfs_quota: Optional[bool] = None, + cpu_cfs_quota_period: Optional[str] = None, + image_gc_high_threshold: Optional[int] = None, + image_gc_low_threshold: Optional[int] = None, + topology_manager_policy: Optional[str] = None, + allowed_unsafe_sysctls: Optional[List[str]] = None, + fail_swap_on: Optional[bool] = None, + container_log_max_size_mb: Optional[int] = None, + container_log_max_files: Optional[int] = None, + pod_max_pids: Optional[int] = None, + **kwargs + ): + """ + :keyword cpu_manager_policy: The default is 'none'. See `Kubernetes CPU management policies + `_ + for more information. Allowed values are 'none' and 'static'. + :paramtype cpu_manager_policy: str + :keyword cpu_cfs_quota: The default is true. + :paramtype cpu_cfs_quota: bool + :keyword cpu_cfs_quota_period: The default is '100ms.' Valid values are a sequence of decimal + numbers with an optional fraction and a unit suffix. For example: '300ms', '2h45m'. Supported + units are 'ns', 'us', 'ms', 's', 'm', and 'h'. + :paramtype cpu_cfs_quota_period: str + :keyword image_gc_high_threshold: To disable image garbage collection, set to 100. The default + is 85%. + :paramtype image_gc_high_threshold: int + :keyword image_gc_low_threshold: This cannot be set higher than imageGcHighThreshold. The + default is 80%. + :paramtype image_gc_low_threshold: int + :keyword topology_manager_policy: For more information see `Kubernetes Topology Manager + `_. The default is + 'none'. Allowed values are 'none', 'best-effort', 'restricted', and 'single-numa-node'. + :paramtype topology_manager_policy: str + :keyword allowed_unsafe_sysctls: Allowed list of unsafe sysctls or unsafe sysctl patterns + (ending in ``*``\ ). + :paramtype allowed_unsafe_sysctls: list[str] + :keyword fail_swap_on: If set to true it will make the Kubelet fail to start if swap is enabled + on the node. + :paramtype fail_swap_on: bool + :keyword container_log_max_size_mb: The maximum size (e.g. 10Mi) of container log file before + it is rotated. + :paramtype container_log_max_size_mb: int + :keyword container_log_max_files: The maximum number of container log files that can be present + for a container. The number must be ≥ 2. + :paramtype container_log_max_files: int + :keyword pod_max_pids: The maximum number of processes per pod. + :paramtype pod_max_pids: int + """ + super(KubeletConfig, self).__init__(**kwargs) + self.cpu_manager_policy = cpu_manager_policy + self.cpu_cfs_quota = cpu_cfs_quota + self.cpu_cfs_quota_period = cpu_cfs_quota_period + self.image_gc_high_threshold = image_gc_high_threshold + self.image_gc_low_threshold = image_gc_low_threshold + self.topology_manager_policy = topology_manager_policy + self.allowed_unsafe_sysctls = allowed_unsafe_sysctls + self.fail_swap_on = fail_swap_on + self.container_log_max_size_mb = container_log_max_size_mb + self.container_log_max_files = container_log_max_files + self.pod_max_pids = pod_max_pids + + +class LinuxOSConfig(msrest.serialization.Model): + """See `AKS custom node configuration `_ for more details. + + :ivar sysctls: Sysctl settings for Linux agent nodes. + :vartype sysctls: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SysctlConfig + :ivar transparent_huge_page_enabled: Valid values are 'always', 'madvise', and 'never'. The + default is 'always'. For more information see `Transparent Hugepages + `_. + :vartype transparent_huge_page_enabled: str + :ivar transparent_huge_page_defrag: Valid values are 'always', 'defer', 'defer+madvise', + 'madvise' and 'never'. The default is 'madvise'. For more information see `Transparent + Hugepages + `_. + :vartype transparent_huge_page_defrag: str + :ivar swap_file_size_mb: The size in MB of a swap file that will be created on each node. + :vartype swap_file_size_mb: int + """ + + _attribute_map = { + 'sysctls': {'key': 'sysctls', 'type': 'SysctlConfig'}, + 'transparent_huge_page_enabled': {'key': 'transparentHugePageEnabled', 'type': 'str'}, + 'transparent_huge_page_defrag': {'key': 'transparentHugePageDefrag', 'type': 'str'}, + 'swap_file_size_mb': {'key': 'swapFileSizeMB', 'type': 'int'}, + } + + def __init__( + self, + *, + sysctls: Optional["_models.SysctlConfig"] = None, + transparent_huge_page_enabled: Optional[str] = None, + transparent_huge_page_defrag: Optional[str] = None, + swap_file_size_mb: Optional[int] = None, + **kwargs + ): + """ + :keyword sysctls: Sysctl settings for Linux agent nodes. + :paramtype sysctls: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SysctlConfig + :keyword transparent_huge_page_enabled: Valid values are 'always', 'madvise', and 'never'. The + default is 'always'. For more information see `Transparent Hugepages + `_. + :paramtype transparent_huge_page_enabled: str + :keyword transparent_huge_page_defrag: Valid values are 'always', 'defer', 'defer+madvise', + 'madvise' and 'never'. The default is 'madvise'. For more information see `Transparent + Hugepages + `_. + :paramtype transparent_huge_page_defrag: str + :keyword swap_file_size_mb: The size in MB of a swap file that will be created on each node. + :paramtype swap_file_size_mb: int + """ + super(LinuxOSConfig, self).__init__(**kwargs) + self.sysctls = sysctls + self.transparent_huge_page_enabled = transparent_huge_page_enabled + self.transparent_huge_page_defrag = transparent_huge_page_defrag + self.swap_file_size_mb = swap_file_size_mb + + +class MaintenanceConfiguration(SubResource): + """See `planned maintenance `_ for more information about planned maintenance. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: Resource ID. + :vartype id: str + :ivar name: The name of the resource that is unique within a resource group. This name can be + used to access the resource. + :vartype name: str + :ivar type: Resource type. + :vartype type: str + :ivar system_data: The system metadata relating to this resource. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar time_in_week: If two array entries specify the same day of the week, the applied + configuration is the union of times in both entries. + :vartype time_in_week: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeInWeek] + :ivar not_allowed_time: Time slots on which upgrade is not allowed. + :vartype not_allowed_time: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeSpan] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'time_in_week': {'key': 'properties.timeInWeek', 'type': '[TimeInWeek]'}, + 'not_allowed_time': {'key': 'properties.notAllowedTime', 'type': '[TimeSpan]'}, + } + + def __init__( + self, + *, + time_in_week: Optional[List["_models.TimeInWeek"]] = None, + not_allowed_time: Optional[List["_models.TimeSpan"]] = None, + **kwargs + ): + """ + :keyword time_in_week: If two array entries specify the same day of the week, the applied + configuration is the union of times in both entries. + :paramtype time_in_week: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeInWeek] + :keyword not_allowed_time: Time slots on which upgrade is not allowed. + :paramtype not_allowed_time: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TimeSpan] + """ + super(MaintenanceConfiguration, self).__init__(**kwargs) + self.system_data = None + self.time_in_week = time_in_week + self.not_allowed_time = not_allowed_time + + +class MaintenanceConfigurationListResult(msrest.serialization.Model): + """The response from the List maintenance configurations operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of maintenance configurations. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration] + :ivar next_link: The URL to get the next set of maintenance configuration results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[MaintenanceConfiguration]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.MaintenanceConfiguration"]] = None, + **kwargs + ): + """ + :keyword value: The list of maintenance configurations. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration] + """ + super(MaintenanceConfigurationListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ManagedCluster(TrackedResource): + """Managed cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + :ivar sku: The managed cluster SKU. + :vartype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :ivar extended_location: The extended location of the Virtual Machine. + :vartype extended_location: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocation + :ivar identity: The identity of the managed cluster, if configured. + :vartype identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIdentity + :ivar provisioning_state: The current provisioning state. + :vartype provisioning_state: str + :ivar power_state: The Power State of the cluster. + :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the cluster + will be created/upgraded using a snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar max_agent_pools: The max number of agent pools for the managed cluster. + :vartype max_agent_pools: int + :ivar kubernetes_version: When you upgrade a supported AKS cluster, Kubernetes minor versions + cannot be skipped. All upgrades must be performed sequentially by major version number. For + example, upgrades between 1.14.x -> 1.15.x or 1.15.x -> 1.16.x are allowed, however 1.14.x -> + 1.16.x is not allowed. See `upgrading an AKS cluster + `_ for more details. + :vartype kubernetes_version: str + :ivar current_kubernetes_version: The version of Kubernetes the Managed Cluster is running. + :vartype current_kubernetes_version: str + :ivar dns_prefix: This cannot be updated once the Managed Cluster has been created. + :vartype dns_prefix: str + :ivar fqdn_subdomain: This cannot be updated once the Managed Cluster has been created. + :vartype fqdn_subdomain: str + :ivar fqdn: The FQDN of the master pool. + :vartype fqdn: str + :ivar private_fqdn: The FQDN of private cluster. + :vartype private_fqdn: str + :ivar azure_portal_fqdn: The Azure Portal requires certain Cross-Origin Resource Sharing (CORS) + headers to be sent in some responses, which Kubernetes APIServer doesn't handle by default. + This special FQDN supports CORS, allowing the Azure Portal to function properly. + :vartype azure_portal_fqdn: str + :ivar agent_pool_profiles: The agent pool properties. + :vartype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAgentPoolProfile] + :ivar linux_profile: The profile for Linux VMs in the Managed Cluster. + :vartype linux_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceLinuxProfile + :ivar windows_profile: The profile for Windows VMs in the Managed Cluster. + :vartype windows_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWindowsProfile + :ivar service_principal_profile: Information about a service principal identity for the cluster + to use for manipulating Azure APIs. + :vartype service_principal_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + :ivar addon_profiles: The profile of managed cluster add-on. + :vartype addon_profiles: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfile] + :ivar pod_identity_profile: See `use AAD pod identity + `_ for more details on AAD pod + identity integration. + :vartype pod_identity_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProfile + :ivar oidc_issuer_profile: The OIDC issuer profile of the Managed Cluster. + :vartype oidc_issuer_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterOIDCIssuerProfile + :ivar node_resource_group: The name of the resource group containing agent pool nodes. + :vartype node_resource_group: str + :ivar enable_rbac: Whether to enable Kubernetes Role-Based Access Control. + :vartype enable_rbac: bool + :ivar enable_pod_security_policy: (DEPRECATING) Whether to enable Kubernetes pod security + policy (preview). This feature is set for removal on October 15th, 2020. Learn more at + aka.ms/aks/azpodpolicy. + :vartype enable_pod_security_policy: bool + :ivar enable_namespace_resources: The default value is false. It can be enabled/disabled on + creation and updation of the managed cluster. See `https://aka.ms/NamespaceARMResource + `_ for more details on Namespace as a ARM Resource. + :vartype enable_namespace_resources: bool + :ivar network_profile: The network configuration profile. + :vartype network_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceNetworkProfile + :ivar aad_profile: The Azure Active Directory configuration. + :vartype aad_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + :ivar auto_upgrade_profile: The auto upgrade configuration. + :vartype auto_upgrade_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAutoUpgradeProfile + :ivar auto_scaler_profile: Parameters to be applied to the cluster-autoscaler when enabled. + :vartype auto_scaler_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesAutoScalerProfile + :ivar api_server_access_profile: The access profile for managed cluster API server. + :vartype api_server_access_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAPIServerAccessProfile + :ivar disk_encryption_set_id: This is of the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{encryptionSetName}'. + :vartype disk_encryption_set_id: str + :ivar identity_profile: Identities associated with the cluster. + :vartype identity_profile: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity] + :ivar private_link_resources: Private link resources associated with the cluster. + :vartype private_link_resources: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + :ivar disable_local_accounts: If set to true, getting static credentials will be disabled for + this cluster. This must only be used on Managed Clusters that are AAD enabled. For more details + see `disable local accounts + `_. + :vartype disable_local_accounts: bool + :ivar http_proxy_config: Configurations for provisioning the cluster with HTTP proxy servers. + :vartype http_proxy_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterHTTPProxyConfig + :ivar security_profile: Security profile for the managed cluster. + :vartype security_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfile + :ivar storage_profile: Storage profile for the managed cluster. + :vartype storage_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfile + :ivar ingress_profile: Ingress profile for the managed cluster. + :vartype ingress_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfile + :ivar public_network_access: Allow or deny public network access for AKS. Known values are: + "Enabled", "Disabled". + :vartype public_network_access: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PublicNetworkAccess + :ivar workload_auto_scaler_profile: Workload Auto-scaler profile for the container service + cluster. + :vartype workload_auto_scaler_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'power_state': {'readonly': True}, + 'max_agent_pools': {'readonly': True}, + 'current_kubernetes_version': {'readonly': True}, + 'fqdn': {'readonly': True}, + 'private_fqdn': {'readonly': True}, + 'azure_portal_fqdn': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'sku': {'key': 'sku', 'type': 'ManagedClusterSKU'}, + 'extended_location': {'key': 'extendedLocation', 'type': 'ExtendedLocation'}, + 'identity': {'key': 'identity', 'type': 'ManagedClusterIdentity'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'power_state': {'key': 'properties.powerState', 'type': 'PowerState'}, + 'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'}, + 'max_agent_pools': {'key': 'properties.maxAgentPools', 'type': 'int'}, + 'kubernetes_version': {'key': 'properties.kubernetesVersion', 'type': 'str'}, + 'current_kubernetes_version': {'key': 'properties.currentKubernetesVersion', 'type': 'str'}, + 'dns_prefix': {'key': 'properties.dnsPrefix', 'type': 'str'}, + 'fqdn_subdomain': {'key': 'properties.fqdnSubdomain', 'type': 'str'}, + 'fqdn': {'key': 'properties.fqdn', 'type': 'str'}, + 'private_fqdn': {'key': 'properties.privateFQDN', 'type': 'str'}, + 'azure_portal_fqdn': {'key': 'properties.azurePortalFQDN', 'type': 'str'}, + 'agent_pool_profiles': {'key': 'properties.agentPoolProfiles', 'type': '[ManagedClusterAgentPoolProfile]'}, + 'linux_profile': {'key': 'properties.linuxProfile', 'type': 'ContainerServiceLinuxProfile'}, + 'windows_profile': {'key': 'properties.windowsProfile', 'type': 'ManagedClusterWindowsProfile'}, + 'service_principal_profile': {'key': 'properties.servicePrincipalProfile', 'type': 'ManagedClusterServicePrincipalProfile'}, + 'addon_profiles': {'key': 'properties.addonProfiles', 'type': '{ManagedClusterAddonProfile}'}, + 'pod_identity_profile': {'key': 'properties.podIdentityProfile', 'type': 'ManagedClusterPodIdentityProfile'}, + 'oidc_issuer_profile': {'key': 'properties.oidcIssuerProfile', 'type': 'ManagedClusterOIDCIssuerProfile'}, + 'node_resource_group': {'key': 'properties.nodeResourceGroup', 'type': 'str'}, + 'enable_rbac': {'key': 'properties.enableRBAC', 'type': 'bool'}, + 'enable_pod_security_policy': {'key': 'properties.enablePodSecurityPolicy', 'type': 'bool'}, + 'enable_namespace_resources': {'key': 'properties.enableNamespaceResources', 'type': 'bool'}, + 'network_profile': {'key': 'properties.networkProfile', 'type': 'ContainerServiceNetworkProfile'}, + 'aad_profile': {'key': 'properties.aadProfile', 'type': 'ManagedClusterAADProfile'}, + 'auto_upgrade_profile': {'key': 'properties.autoUpgradeProfile', 'type': 'ManagedClusterAutoUpgradeProfile'}, + 'auto_scaler_profile': {'key': 'properties.autoScalerProfile', 'type': 'ManagedClusterPropertiesAutoScalerProfile'}, + 'api_server_access_profile': {'key': 'properties.apiServerAccessProfile', 'type': 'ManagedClusterAPIServerAccessProfile'}, + 'disk_encryption_set_id': {'key': 'properties.diskEncryptionSetID', 'type': 'str'}, + 'identity_profile': {'key': 'properties.identityProfile', 'type': '{UserAssignedIdentity}'}, + 'private_link_resources': {'key': 'properties.privateLinkResources', 'type': '[PrivateLinkResource]'}, + 'disable_local_accounts': {'key': 'properties.disableLocalAccounts', 'type': 'bool'}, + 'http_proxy_config': {'key': 'properties.httpProxyConfig', 'type': 'ManagedClusterHTTPProxyConfig'}, + 'security_profile': {'key': 'properties.securityProfile', 'type': 'ManagedClusterSecurityProfile'}, + 'storage_profile': {'key': 'properties.storageProfile', 'type': 'ManagedClusterStorageProfile'}, + 'ingress_profile': {'key': 'properties.ingressProfile', 'type': 'ManagedClusterIngressProfile'}, + 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, + 'workload_auto_scaler_profile': {'key': 'properties.workloadAutoScalerProfile', 'type': 'ManagedClusterWorkloadAutoScalerProfile'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + sku: Optional["_models.ManagedClusterSKU"] = None, + extended_location: Optional["_models.ExtendedLocation"] = None, + identity: Optional["_models.ManagedClusterIdentity"] = None, + creation_data: Optional["_models.CreationData"] = None, + kubernetes_version: Optional[str] = None, + dns_prefix: Optional[str] = None, + fqdn_subdomain: Optional[str] = None, + agent_pool_profiles: Optional[List["_models.ManagedClusterAgentPoolProfile"]] = None, + linux_profile: Optional["_models.ContainerServiceLinuxProfile"] = None, + windows_profile: Optional["_models.ManagedClusterWindowsProfile"] = None, + service_principal_profile: Optional["_models.ManagedClusterServicePrincipalProfile"] = None, + addon_profiles: Optional[Dict[str, "_models.ManagedClusterAddonProfile"]] = None, + pod_identity_profile: Optional["_models.ManagedClusterPodIdentityProfile"] = None, + oidc_issuer_profile: Optional["_models.ManagedClusterOIDCIssuerProfile"] = None, + node_resource_group: Optional[str] = None, + enable_rbac: Optional[bool] = None, + enable_pod_security_policy: Optional[bool] = None, + enable_namespace_resources: Optional[bool] = None, + network_profile: Optional["_models.ContainerServiceNetworkProfile"] = None, + aad_profile: Optional["_models.ManagedClusterAADProfile"] = None, + auto_upgrade_profile: Optional["_models.ManagedClusterAutoUpgradeProfile"] = None, + auto_scaler_profile: Optional["_models.ManagedClusterPropertiesAutoScalerProfile"] = None, + api_server_access_profile: Optional["_models.ManagedClusterAPIServerAccessProfile"] = None, + disk_encryption_set_id: Optional[str] = None, + identity_profile: Optional[Dict[str, "_models.UserAssignedIdentity"]] = None, + private_link_resources: Optional[List["_models.PrivateLinkResource"]] = None, + disable_local_accounts: Optional[bool] = None, + http_proxy_config: Optional["_models.ManagedClusterHTTPProxyConfig"] = None, + security_profile: Optional["_models.ManagedClusterSecurityProfile"] = None, + storage_profile: Optional["_models.ManagedClusterStorageProfile"] = None, + ingress_profile: Optional["_models.ManagedClusterIngressProfile"] = None, + public_network_access: Optional[Union[str, "_models.PublicNetworkAccess"]] = None, + workload_auto_scaler_profile: Optional["_models.ManagedClusterWorkloadAutoScalerProfile"] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + :keyword sku: The managed cluster SKU. + :paramtype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :keyword extended_location: The extended location of the Virtual Machine. + :paramtype extended_location: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ExtendedLocation + :keyword identity: The identity of the managed cluster, if configured. + :paramtype identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIdentity + :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the + cluster will be created/upgraded using a snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword kubernetes_version: When you upgrade a supported AKS cluster, Kubernetes minor + versions cannot be skipped. All upgrades must be performed sequentially by major version + number. For example, upgrades between 1.14.x -> 1.15.x or 1.15.x -> 1.16.x are allowed, however + 1.14.x -> 1.16.x is not allowed. See `upgrading an AKS cluster + `_ for more details. + :paramtype kubernetes_version: str + :keyword dns_prefix: This cannot be updated once the Managed Cluster has been created. + :paramtype dns_prefix: str + :keyword fqdn_subdomain: This cannot be updated once the Managed Cluster has been created. + :paramtype fqdn_subdomain: str + :keyword agent_pool_profiles: The agent pool properties. + :paramtype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAgentPoolProfile] + :keyword linux_profile: The profile for Linux VMs in the Managed Cluster. + :paramtype linux_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceLinuxProfile + :keyword windows_profile: The profile for Windows VMs in the Managed Cluster. + :paramtype windows_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWindowsProfile + :keyword service_principal_profile: Information about a service principal identity for the + cluster to use for manipulating Azure APIs. + :paramtype service_principal_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + :keyword addon_profiles: The profile of managed cluster add-on. + :paramtype addon_profiles: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfile] + :keyword pod_identity_profile: See `use AAD pod identity + `_ for more details on AAD pod + identity integration. + :paramtype pod_identity_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProfile + :keyword oidc_issuer_profile: The OIDC issuer profile of the Managed Cluster. + :paramtype oidc_issuer_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterOIDCIssuerProfile + :keyword node_resource_group: The name of the resource group containing agent pool nodes. + :paramtype node_resource_group: str + :keyword enable_rbac: Whether to enable Kubernetes Role-Based Access Control. + :paramtype enable_rbac: bool + :keyword enable_pod_security_policy: (DEPRECATING) Whether to enable Kubernetes pod security + policy (preview). This feature is set for removal on October 15th, 2020. Learn more at + aka.ms/aks/azpodpolicy. + :paramtype enable_pod_security_policy: bool + :keyword enable_namespace_resources: The default value is false. It can be enabled/disabled on + creation and updation of the managed cluster. See `https://aka.ms/NamespaceARMResource + `_ for more details on Namespace as a ARM Resource. + :paramtype enable_namespace_resources: bool + :keyword network_profile: The network configuration profile. + :paramtype network_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ContainerServiceNetworkProfile + :keyword aad_profile: The Azure Active Directory configuration. + :paramtype aad_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + :keyword auto_upgrade_profile: The auto upgrade configuration. + :paramtype auto_upgrade_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAutoUpgradeProfile + :keyword auto_scaler_profile: Parameters to be applied to the cluster-autoscaler when enabled. + :paramtype auto_scaler_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesAutoScalerProfile + :keyword api_server_access_profile: The access profile for managed cluster API server. + :paramtype api_server_access_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAPIServerAccessProfile + :keyword disk_encryption_set_id: This is of the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/diskEncryptionSets/{encryptionSetName}'. + :paramtype disk_encryption_set_id: str + :keyword identity_profile: Identities associated with the cluster. + :paramtype identity_profile: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity] + :keyword private_link_resources: Private link resources associated with the cluster. + :paramtype private_link_resources: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + :keyword disable_local_accounts: If set to true, getting static credentials will be disabled + for this cluster. This must only be used on Managed Clusters that are AAD enabled. For more + details see `disable local accounts + `_. + :paramtype disable_local_accounts: bool + :keyword http_proxy_config: Configurations for provisioning the cluster with HTTP proxy + servers. + :paramtype http_proxy_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterHTTPProxyConfig + :keyword security_profile: Security profile for the managed cluster. + :paramtype security_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfile + :keyword storage_profile: Storage profile for the managed cluster. + :paramtype storage_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfile + :keyword ingress_profile: Ingress profile for the managed cluster. + :paramtype ingress_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfile + :keyword public_network_access: Allow or deny public network access for AKS. Known values are: + "Enabled", "Disabled". + :paramtype public_network_access: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PublicNetworkAccess + :keyword workload_auto_scaler_profile: Workload Auto-scaler profile for the container service + cluster. + :paramtype workload_auto_scaler_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfile + """ + super(ManagedCluster, self).__init__(tags=tags, location=location, **kwargs) + self.sku = sku + self.extended_location = extended_location + self.identity = identity + self.provisioning_state = None + self.power_state = None + self.creation_data = creation_data + self.max_agent_pools = None + self.kubernetes_version = kubernetes_version + self.current_kubernetes_version = None + self.dns_prefix = dns_prefix + self.fqdn_subdomain = fqdn_subdomain + self.fqdn = None + self.private_fqdn = None + self.azure_portal_fqdn = None + self.agent_pool_profiles = agent_pool_profiles + self.linux_profile = linux_profile + self.windows_profile = windows_profile + self.service_principal_profile = service_principal_profile + self.addon_profiles = addon_profiles + self.pod_identity_profile = pod_identity_profile + self.oidc_issuer_profile = oidc_issuer_profile + self.node_resource_group = node_resource_group + self.enable_rbac = enable_rbac + self.enable_pod_security_policy = enable_pod_security_policy + self.enable_namespace_resources = enable_namespace_resources + self.network_profile = network_profile + self.aad_profile = aad_profile + self.auto_upgrade_profile = auto_upgrade_profile + self.auto_scaler_profile = auto_scaler_profile + self.api_server_access_profile = api_server_access_profile + self.disk_encryption_set_id = disk_encryption_set_id + self.identity_profile = identity_profile + self.private_link_resources = private_link_resources + self.disable_local_accounts = disable_local_accounts + self.http_proxy_config = http_proxy_config + self.security_profile = security_profile + self.storage_profile = storage_profile + self.ingress_profile = ingress_profile + self.public_network_access = public_network_access + self.workload_auto_scaler_profile = workload_auto_scaler_profile + + +class ManagedClusterAADProfile(msrest.serialization.Model): + """For more details see `managed AAD on AKS `_. + + :ivar managed: Whether to enable managed AAD. + :vartype managed: bool + :ivar enable_azure_rbac: Whether to enable Azure RBAC for Kubernetes authorization. + :vartype enable_azure_rbac: bool + :ivar admin_group_object_i_ds: The list of AAD group object IDs that will have admin role of + the cluster. + :vartype admin_group_object_i_ds: list[str] + :ivar client_app_id: The client AAD application ID. + :vartype client_app_id: str + :ivar server_app_id: The server AAD application ID. + :vartype server_app_id: str + :ivar server_app_secret: The server AAD application secret. + :vartype server_app_secret: str + :ivar tenant_id: The AAD tenant ID to use for authentication. If not specified, will use the + tenant of the deployment subscription. + :vartype tenant_id: str + """ + + _attribute_map = { + 'managed': {'key': 'managed', 'type': 'bool'}, + 'enable_azure_rbac': {'key': 'enableAzureRBAC', 'type': 'bool'}, + 'admin_group_object_i_ds': {'key': 'adminGroupObjectIDs', 'type': '[str]'}, + 'client_app_id': {'key': 'clientAppID', 'type': 'str'}, + 'server_app_id': {'key': 'serverAppID', 'type': 'str'}, + 'server_app_secret': {'key': 'serverAppSecret', 'type': 'str'}, + 'tenant_id': {'key': 'tenantID', 'type': 'str'}, + } + + def __init__( + self, + *, + managed: Optional[bool] = None, + enable_azure_rbac: Optional[bool] = None, + admin_group_object_i_ds: Optional[List[str]] = None, + client_app_id: Optional[str] = None, + server_app_id: Optional[str] = None, + server_app_secret: Optional[str] = None, + tenant_id: Optional[str] = None, + **kwargs + ): + """ + :keyword managed: Whether to enable managed AAD. + :paramtype managed: bool + :keyword enable_azure_rbac: Whether to enable Azure RBAC for Kubernetes authorization. + :paramtype enable_azure_rbac: bool + :keyword admin_group_object_i_ds: The list of AAD group object IDs that will have admin role of + the cluster. + :paramtype admin_group_object_i_ds: list[str] + :keyword client_app_id: The client AAD application ID. + :paramtype client_app_id: str + :keyword server_app_id: The server AAD application ID. + :paramtype server_app_id: str + :keyword server_app_secret: The server AAD application secret. + :paramtype server_app_secret: str + :keyword tenant_id: The AAD tenant ID to use for authentication. If not specified, will use the + tenant of the deployment subscription. + :paramtype tenant_id: str + """ + super(ManagedClusterAADProfile, self).__init__(**kwargs) + self.managed = managed + self.enable_azure_rbac = enable_azure_rbac + self.admin_group_object_i_ds = admin_group_object_i_ds + self.client_app_id = client_app_id + self.server_app_id = server_app_id + self.server_app_secret = server_app_secret + self.tenant_id = tenant_id + + +class ManagedClusterAccessProfile(TrackedResource): + """Managed cluster Access Profile. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + :ivar kube_config: Base64-encoded Kubernetes configuration file. + :vartype kube_config: bytearray + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'kube_config': {'key': 'properties.kubeConfig', 'type': 'bytearray'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + kube_config: Optional[bytearray] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + :keyword kube_config: Base64-encoded Kubernetes configuration file. + :paramtype kube_config: bytearray + """ + super(ManagedClusterAccessProfile, self).__init__(tags=tags, location=location, **kwargs) + self.kube_config = kube_config + + +class ManagedClusterAddonProfile(msrest.serialization.Model): + """A Kubernetes add-on profile for a managed cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether the add-on is enabled or not. + :vartype enabled: bool + :ivar config: Key-value pairs for configuring an add-on. + :vartype config: dict[str, str] + :ivar identity: Information of user assigned identity used by this add-on. + :vartype identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAddonProfileIdentity + """ + + _validation = { + 'enabled': {'required': True}, + 'identity': {'readonly': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'config': {'key': 'config', 'type': '{str}'}, + 'identity': {'key': 'identity', 'type': 'ManagedClusterAddonProfileIdentity'}, + } + + def __init__( + self, + *, + enabled: bool, + config: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword enabled: Required. Whether the add-on is enabled or not. + :paramtype enabled: bool + :keyword config: Key-value pairs for configuring an add-on. + :paramtype config: dict[str, str] + """ + super(ManagedClusterAddonProfile, self).__init__(**kwargs) + self.enabled = enabled + self.config = config + self.identity = None + + +class UserAssignedIdentity(msrest.serialization.Model): + """Details about a user assigned identity. + + :ivar resource_id: The resource ID of the user assigned identity. + :vartype resource_id: str + :ivar client_id: The client ID of the user assigned identity. + :vartype client_id: str + :ivar object_id: The object ID of the user assigned identity. + :vartype object_id: str + """ + + _attribute_map = { + 'resource_id': {'key': 'resourceId', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'object_id': {'key': 'objectId', 'type': 'str'}, + } + + def __init__( + self, + *, + resource_id: Optional[str] = None, + client_id: Optional[str] = None, + object_id: Optional[str] = None, + **kwargs + ): + """ + :keyword resource_id: The resource ID of the user assigned identity. + :paramtype resource_id: str + :keyword client_id: The client ID of the user assigned identity. + :paramtype client_id: str + :keyword object_id: The object ID of the user assigned identity. + :paramtype object_id: str + """ + super(UserAssignedIdentity, self).__init__(**kwargs) + self.resource_id = resource_id + self.client_id = client_id + self.object_id = object_id + + +class ManagedClusterAddonProfileIdentity(UserAssignedIdentity): + """Information of user assigned identity used by this add-on. + + :ivar resource_id: The resource ID of the user assigned identity. + :vartype resource_id: str + :ivar client_id: The client ID of the user assigned identity. + :vartype client_id: str + :ivar object_id: The object ID of the user assigned identity. + :vartype object_id: str + """ + + _attribute_map = { + 'resource_id': {'key': 'resourceId', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'object_id': {'key': 'objectId', 'type': 'str'}, + } + + def __init__( + self, + *, + resource_id: Optional[str] = None, + client_id: Optional[str] = None, + object_id: Optional[str] = None, + **kwargs + ): + """ + :keyword resource_id: The resource ID of the user assigned identity. + :paramtype resource_id: str + :keyword client_id: The client ID of the user assigned identity. + :paramtype client_id: str + :keyword object_id: The object ID of the user assigned identity. + :paramtype object_id: str + """ + super(ManagedClusterAddonProfileIdentity, self).__init__(resource_id=resource_id, client_id=client_id, object_id=object_id, **kwargs) + + +class ManagedClusterAgentPoolProfileProperties(msrest.serialization.Model): + """Properties for the container service agent pool profile. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :vartype count: int + :ivar vm_size: VM size availability varies by region. If a node contains insufficient compute + resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted + VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :vartype vm_size: str + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in the master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :vartype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data + root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :vartype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :ivar workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :vartype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :vartype message_of_the_day: str + :ivar vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and used. + If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just + nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype vnet_subnet_id: str + :ivar pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype pod_subnet_id: str + :ivar max_pods: The maximum number of pods that can run on a node. + :vartype max_pods: int + :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :ivar max_count: The maximum number of nodes for auto-scaling. + :vartype max_count: int + :ivar min_count: The minimum number of nodes for auto-scaling. + :vartype min_count: int + :ivar enable_auto_scaling: Whether to enable auto-scaler. + :vartype enable_auto_scaling: bool + :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it + defaults to Delete. Known values are: "Delete", "Deallocate". + :vartype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :ivar type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", + "AvailabilitySet". + :vartype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional + information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :ivar orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :vartype orchestrator_version: str + :ivar current_orchestrator_version: If orchestratorVersion was a fully specified version + , this field will be exactly equal to it. If orchestratorVersion was + , this field will contain the full version being used. + :vartype current_orchestrator_version: str + :ivar node_image_version: The version of node image. + :vartype node_image_version: str + :ivar upgrade_settings: Settings for upgrading the agentpool. + :vartype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :ivar provisioning_state: The current deployment or provisioning state. + :vartype provisioning_state: str + :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool + can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and + does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :ivar availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :vartype availability_zones: list[str] + :ivar enable_node_public_ip: Some scenarios may require nodes in a node pool to receive their + own dedicated public IP addresses. A common scenario is for gaming workloads, where a console + needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :vartype enable_node_public_ip: bool + :ivar enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :vartype enable_custom_ca_trust: bool + :ivar node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :vartype node_public_ip_prefix_id: str + :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default + is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :vartype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :vartype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :vartype spot_max_price: float + :ivar tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :vartype tags: dict[str, str] + :ivar node_labels: The node labels to be persisted across all nodes in agent pool. + :vartype node_labels: dict[str, str] + :ivar node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :vartype node_taints: list[str] + :ivar proximity_placement_group_id: The ID for Proximity Placement Group. + :vartype proximity_placement_group_id: str + :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :ivar linux_os_config: The OS configuration of Linux agent nodes. + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :vartype enable_encryption_at_host: bool + :ivar enable_ultra_ssd: Whether to enable UltraSSD. + :vartype enable_ultra_ssd: bool + :ivar enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :vartype enable_fips: bool + :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile + for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". + :vartype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool + will be created/upgraded using a snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :vartype capacity_reservation_group_id: str + :ivar host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :vartype host_group_id: str + """ + + _validation = { + 'os_disk_size_gb': {'maximum': 2048, 'minimum': 0}, + 'current_orchestrator_version': {'readonly': True}, + 'node_image_version': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + 'vm_size': {'key': 'vmSize', 'type': 'str'}, + 'os_disk_size_gb': {'key': 'osDiskSizeGB', 'type': 'int'}, + 'os_disk_type': {'key': 'osDiskType', 'type': 'str'}, + 'kubelet_disk_type': {'key': 'kubeletDiskType', 'type': 'str'}, + 'workload_runtime': {'key': 'workloadRuntime', 'type': 'str'}, + 'message_of_the_day': {'key': 'messageOfTheDay', 'type': 'str'}, + 'vnet_subnet_id': {'key': 'vnetSubnetID', 'type': 'str'}, + 'pod_subnet_id': {'key': 'podSubnetID', 'type': 'str'}, + 'max_pods': {'key': 'maxPods', 'type': 'int'}, + 'os_type': {'key': 'osType', 'type': 'str'}, + 'os_sku': {'key': 'osSKU', 'type': 'str'}, + 'max_count': {'key': 'maxCount', 'type': 'int'}, + 'min_count': {'key': 'minCount', 'type': 'int'}, + 'enable_auto_scaling': {'key': 'enableAutoScaling', 'type': 'bool'}, + 'scale_down_mode': {'key': 'scaleDownMode', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'mode': {'key': 'mode', 'type': 'str'}, + 'orchestrator_version': {'key': 'orchestratorVersion', 'type': 'str'}, + 'current_orchestrator_version': {'key': 'currentOrchestratorVersion', 'type': 'str'}, + 'node_image_version': {'key': 'nodeImageVersion', 'type': 'str'}, + 'upgrade_settings': {'key': 'upgradeSettings', 'type': 'AgentPoolUpgradeSettings'}, + 'provisioning_state': {'key': 'provisioningState', 'type': 'str'}, + 'power_state': {'key': 'powerState', 'type': 'PowerState'}, + 'availability_zones': {'key': 'availabilityZones', 'type': '[str]'}, + 'enable_node_public_ip': {'key': 'enableNodePublicIP', 'type': 'bool'}, + 'enable_custom_ca_trust': {'key': 'enableCustomCATrust', 'type': 'bool'}, + 'node_public_ip_prefix_id': {'key': 'nodePublicIPPrefixID', 'type': 'str'}, + 'scale_set_priority': {'key': 'scaleSetPriority', 'type': 'str'}, + 'scale_set_eviction_policy': {'key': 'scaleSetEvictionPolicy', 'type': 'str'}, + 'spot_max_price': {'key': 'spotMaxPrice', 'type': 'float'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'node_labels': {'key': 'nodeLabels', 'type': '{str}'}, + 'node_taints': {'key': 'nodeTaints', 'type': '[str]'}, + 'proximity_placement_group_id': {'key': 'proximityPlacementGroupID', 'type': 'str'}, + 'kubelet_config': {'key': 'kubeletConfig', 'type': 'KubeletConfig'}, + 'linux_os_config': {'key': 'linuxOSConfig', 'type': 'LinuxOSConfig'}, + 'enable_encryption_at_host': {'key': 'enableEncryptionAtHost', 'type': 'bool'}, + 'enable_ultra_ssd': {'key': 'enableUltraSSD', 'type': 'bool'}, + 'enable_fips': {'key': 'enableFIPS', 'type': 'bool'}, + 'gpu_instance_profile': {'key': 'gpuInstanceProfile', 'type': 'str'}, + 'creation_data': {'key': 'creationData', 'type': 'CreationData'}, + 'capacity_reservation_group_id': {'key': 'capacityReservationGroupID', 'type': 'str'}, + 'host_group_id': {'key': 'hostGroupID', 'type': 'str'}, + } + + def __init__( + self, + *, + count: Optional[int] = None, + vm_size: Optional[str] = None, + os_disk_size_gb: Optional[int] = None, + os_disk_type: Optional[Union[str, "_models.OSDiskType"]] = None, + kubelet_disk_type: Optional[Union[str, "_models.KubeletDiskType"]] = None, + workload_runtime: Optional[Union[str, "_models.WorkloadRuntime"]] = None, + message_of_the_day: Optional[str] = None, + vnet_subnet_id: Optional[str] = None, + pod_subnet_id: Optional[str] = None, + max_pods: Optional[int] = None, + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", + os_sku: Optional[Union[str, "_models.OSSKU"]] = None, + max_count: Optional[int] = None, + min_count: Optional[int] = None, + enable_auto_scaling: Optional[bool] = None, + scale_down_mode: Optional[Union[str, "_models.ScaleDownMode"]] = None, + type: Optional[Union[str, "_models.AgentPoolType"]] = None, + mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, + orchestrator_version: Optional[str] = None, + upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, + power_state: Optional["_models.PowerState"] = None, + availability_zones: Optional[List[str]] = None, + enable_node_public_ip: Optional[bool] = None, + enable_custom_ca_trust: Optional[bool] = None, + node_public_ip_prefix_id: Optional[str] = None, + scale_set_priority: Optional[Union[str, "_models.ScaleSetPriority"]] = "Regular", + scale_set_eviction_policy: Optional[Union[str, "_models.ScaleSetEvictionPolicy"]] = "Delete", + spot_max_price: Optional[float] = -1, + tags: Optional[Dict[str, str]] = None, + node_labels: Optional[Dict[str, str]] = None, + node_taints: Optional[List[str]] = None, + proximity_placement_group_id: Optional[str] = None, + kubelet_config: Optional["_models.KubeletConfig"] = None, + linux_os_config: Optional["_models.LinuxOSConfig"] = None, + enable_encryption_at_host: Optional[bool] = None, + enable_ultra_ssd: Optional[bool] = None, + enable_fips: Optional[bool] = None, + gpu_instance_profile: Optional[Union[str, "_models.GPUInstanceProfile"]] = None, + creation_data: Optional["_models.CreationData"] = None, + capacity_reservation_group_id: Optional[str] = None, + host_group_id: Optional[str] = None, + **kwargs + ): + """ + :keyword count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :paramtype count: int + :keyword vm_size: VM size availability varies by region. If a node contains insufficient + compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on + restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :paramtype vm_size: str + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in the master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :paramtype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime + data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :paramtype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :keyword workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :paramtype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :paramtype message_of_the_day: str + :keyword vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and + used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to + just nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype vnet_subnet_id: str + :keyword pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype pod_subnet_id: str + :keyword max_pods: The maximum number of pods that can run on a node. + :paramtype max_pods: int + :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :keyword max_count: The maximum number of nodes for auto-scaling. + :paramtype max_count: int + :keyword min_count: The minimum number of nodes for auto-scaling. + :paramtype min_count: int + :keyword enable_auto_scaling: Whether to enable auto-scaler. + :paramtype enable_auto_scaling: bool + :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, + it defaults to Delete. Known values are: "Delete", "Deallocate". + :paramtype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :keyword type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", + "AvailabilitySet". + :paramtype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For + additional information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :keyword orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :paramtype orchestrator_version: str + :keyword upgrade_settings: Settings for upgrading the agentpool. + :paramtype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent + Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs + and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :keyword availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :paramtype availability_zones: list[str] + :keyword enable_node_public_ip: Some scenarios may require nodes in a node pool to receive + their own dedicated public IP addresses. A common scenario is for gaming workloads, where a + console needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :paramtype enable_node_public_ip: bool + :keyword enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :paramtype enable_custom_ca_trust: bool + :keyword node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :paramtype node_public_ip_prefix_id: str + :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the + default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :paramtype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :paramtype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :paramtype spot_max_price: float + :keyword tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :paramtype tags: dict[str, str] + :keyword node_labels: The node labels to be persisted across all nodes in agent pool. + :paramtype node_labels: dict[str, str] + :keyword node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :paramtype node_taints: list[str] + :keyword proximity_placement_group_id: The ID for Proximity Placement Group. + :paramtype proximity_placement_group_id: str + :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. + :paramtype kubelet_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :keyword linux_os_config: The OS configuration of Linux agent nodes. + :paramtype linux_os_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :paramtype enable_encryption_at_host: bool + :keyword enable_ultra_ssd: Whether to enable UltraSSD. + :paramtype enable_ultra_ssd: bool + :keyword enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :paramtype enable_fips: bool + :keyword gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance + profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", + "MIG7g". + :paramtype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node + pool will be created/upgraded using a snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :paramtype capacity_reservation_group_id: str + :keyword host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :paramtype host_group_id: str + """ + super(ManagedClusterAgentPoolProfileProperties, self).__init__(**kwargs) + self.count = count + self.vm_size = vm_size + self.os_disk_size_gb = os_disk_size_gb + self.os_disk_type = os_disk_type + self.kubelet_disk_type = kubelet_disk_type + self.workload_runtime = workload_runtime + self.message_of_the_day = message_of_the_day + self.vnet_subnet_id = vnet_subnet_id + self.pod_subnet_id = pod_subnet_id + self.max_pods = max_pods + self.os_type = os_type + self.os_sku = os_sku + self.max_count = max_count + self.min_count = min_count + self.enable_auto_scaling = enable_auto_scaling + self.scale_down_mode = scale_down_mode + self.type = type + self.mode = mode + self.orchestrator_version = orchestrator_version + self.current_orchestrator_version = None + self.node_image_version = None + self.upgrade_settings = upgrade_settings + self.provisioning_state = None + self.power_state = power_state + self.availability_zones = availability_zones + self.enable_node_public_ip = enable_node_public_ip + self.enable_custom_ca_trust = enable_custom_ca_trust + self.node_public_ip_prefix_id = node_public_ip_prefix_id + self.scale_set_priority = scale_set_priority + self.scale_set_eviction_policy = scale_set_eviction_policy + self.spot_max_price = spot_max_price + self.tags = tags + self.node_labels = node_labels + self.node_taints = node_taints + self.proximity_placement_group_id = proximity_placement_group_id + self.kubelet_config = kubelet_config + self.linux_os_config = linux_os_config + self.enable_encryption_at_host = enable_encryption_at_host + self.enable_ultra_ssd = enable_ultra_ssd + self.enable_fips = enable_fips + self.gpu_instance_profile = gpu_instance_profile + self.creation_data = creation_data + self.capacity_reservation_group_id = capacity_reservation_group_id + self.host_group_id = host_group_id + + +class ManagedClusterAgentPoolProfile(ManagedClusterAgentPoolProfileProperties): + """Profile for the container service agent pool. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :vartype count: int + :ivar vm_size: VM size availability varies by region. If a node contains insufficient compute + resources (memory, cpu, etc) pods might fail to run correctly. For more details on restricted + VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :vartype vm_size: str + :ivar os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every machine + in the master/agent pool. If you specify 0, it will apply the default osDisk size according to + the vmSize specified. + :vartype os_disk_size_gb: int + :ivar os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :vartype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :ivar kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime data + root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :vartype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :ivar workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :vartype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :ivar message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :vartype message_of_the_day: str + :ivar vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and used. + If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to just + nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype vnet_subnet_id: str + :ivar pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :vartype pod_subnet_id: str + :ivar max_pods: The maximum number of pods that can run on a node. + :vartype max_pods: int + :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :ivar max_count: The maximum number of nodes for auto-scaling. + :vartype max_count: int + :ivar min_count: The minimum number of nodes for auto-scaling. + :vartype min_count: int + :ivar enable_auto_scaling: Whether to enable auto-scaler. + :vartype enable_auto_scaling: bool + :ivar scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, it + defaults to Delete. Known values are: "Delete", "Deallocate". + :vartype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :ivar type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", + "AvailabilitySet". + :vartype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :ivar mode: A cluster must have at least one 'System' Agent Pool at all times. For additional + information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :vartype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :ivar orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :vartype orchestrator_version: str + :ivar current_orchestrator_version: If orchestratorVersion was a fully specified version + , this field will be exactly equal to it. If orchestratorVersion was + , this field will contain the full version being used. + :vartype current_orchestrator_version: str + :ivar node_image_version: The version of node image. + :vartype node_image_version: str + :ivar upgrade_settings: Settings for upgrading the agentpool. + :vartype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :ivar provisioning_state: The current deployment or provisioning state. + :vartype provisioning_state: str + :ivar power_state: When an Agent Pool is first created it is initially Running. The Agent Pool + can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs and + does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :vartype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :ivar availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :vartype availability_zones: list[str] + :ivar enable_node_public_ip: Some scenarios may require nodes in a node pool to receive their + own dedicated public IP addresses. A common scenario is for gaming workloads, where a console + needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :vartype enable_node_public_ip: bool + :ivar enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :vartype enable_custom_ca_trust: bool + :ivar node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :vartype node_public_ip_prefix_id: str + :ivar scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the default + is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :vartype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :ivar scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :vartype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :ivar spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :vartype spot_max_price: float + :ivar tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :vartype tags: dict[str, str] + :ivar node_labels: The node labels to be persisted across all nodes in agent pool. + :vartype node_labels: dict[str, str] + :ivar node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :vartype node_taints: list[str] + :ivar proximity_placement_group_id: The ID for Proximity Placement Group. + :vartype proximity_placement_group_id: str + :ivar kubelet_config: The Kubelet configuration on the agent pool nodes. + :vartype kubelet_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :ivar linux_os_config: The OS configuration of Linux agent nodes. + :vartype linux_os_config: ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :ivar enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :vartype enable_encryption_at_host: bool + :ivar enable_ultra_ssd: Whether to enable UltraSSD. + :vartype enable_ultra_ssd: bool + :ivar enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :vartype enable_fips: bool + :ivar gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance profile + for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", "MIG7g". + :vartype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :ivar creation_data: CreationData to be used to specify the source Snapshot ID if the node pool + will be created/upgraded using a snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :vartype capacity_reservation_group_id: str + :ivar host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :vartype host_group_id: str + :ivar name: Required. Windows agent pool names must be 6 characters or less. + :vartype name: str + """ + + _validation = { + 'os_disk_size_gb': {'maximum': 2048, 'minimum': 0}, + 'current_orchestrator_version': {'readonly': True}, + 'node_image_version': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'name': {'required': True, 'pattern': r'^[a-z][a-z0-9]{0,11}$'}, + } + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + 'vm_size': {'key': 'vmSize', 'type': 'str'}, + 'os_disk_size_gb': {'key': 'osDiskSizeGB', 'type': 'int'}, + 'os_disk_type': {'key': 'osDiskType', 'type': 'str'}, + 'kubelet_disk_type': {'key': 'kubeletDiskType', 'type': 'str'}, + 'workload_runtime': {'key': 'workloadRuntime', 'type': 'str'}, + 'message_of_the_day': {'key': 'messageOfTheDay', 'type': 'str'}, + 'vnet_subnet_id': {'key': 'vnetSubnetID', 'type': 'str'}, + 'pod_subnet_id': {'key': 'podSubnetID', 'type': 'str'}, + 'max_pods': {'key': 'maxPods', 'type': 'int'}, + 'os_type': {'key': 'osType', 'type': 'str'}, + 'os_sku': {'key': 'osSKU', 'type': 'str'}, + 'max_count': {'key': 'maxCount', 'type': 'int'}, + 'min_count': {'key': 'minCount', 'type': 'int'}, + 'enable_auto_scaling': {'key': 'enableAutoScaling', 'type': 'bool'}, + 'scale_down_mode': {'key': 'scaleDownMode', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'mode': {'key': 'mode', 'type': 'str'}, + 'orchestrator_version': {'key': 'orchestratorVersion', 'type': 'str'}, + 'current_orchestrator_version': {'key': 'currentOrchestratorVersion', 'type': 'str'}, + 'node_image_version': {'key': 'nodeImageVersion', 'type': 'str'}, + 'upgrade_settings': {'key': 'upgradeSettings', 'type': 'AgentPoolUpgradeSettings'}, + 'provisioning_state': {'key': 'provisioningState', 'type': 'str'}, + 'power_state': {'key': 'powerState', 'type': 'PowerState'}, + 'availability_zones': {'key': 'availabilityZones', 'type': '[str]'}, + 'enable_node_public_ip': {'key': 'enableNodePublicIP', 'type': 'bool'}, + 'enable_custom_ca_trust': {'key': 'enableCustomCATrust', 'type': 'bool'}, + 'node_public_ip_prefix_id': {'key': 'nodePublicIPPrefixID', 'type': 'str'}, + 'scale_set_priority': {'key': 'scaleSetPriority', 'type': 'str'}, + 'scale_set_eviction_policy': {'key': 'scaleSetEvictionPolicy', 'type': 'str'}, + 'spot_max_price': {'key': 'spotMaxPrice', 'type': 'float'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'node_labels': {'key': 'nodeLabels', 'type': '{str}'}, + 'node_taints': {'key': 'nodeTaints', 'type': '[str]'}, + 'proximity_placement_group_id': {'key': 'proximityPlacementGroupID', 'type': 'str'}, + 'kubelet_config': {'key': 'kubeletConfig', 'type': 'KubeletConfig'}, + 'linux_os_config': {'key': 'linuxOSConfig', 'type': 'LinuxOSConfig'}, + 'enable_encryption_at_host': {'key': 'enableEncryptionAtHost', 'type': 'bool'}, + 'enable_ultra_ssd': {'key': 'enableUltraSSD', 'type': 'bool'}, + 'enable_fips': {'key': 'enableFIPS', 'type': 'bool'}, + 'gpu_instance_profile': {'key': 'gpuInstanceProfile', 'type': 'str'}, + 'creation_data': {'key': 'creationData', 'type': 'CreationData'}, + 'capacity_reservation_group_id': {'key': 'capacityReservationGroupID', 'type': 'str'}, + 'host_group_id': {'key': 'hostGroupID', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + } + + def __init__( + self, + *, + name: str, + count: Optional[int] = None, + vm_size: Optional[str] = None, + os_disk_size_gb: Optional[int] = None, + os_disk_type: Optional[Union[str, "_models.OSDiskType"]] = None, + kubelet_disk_type: Optional[Union[str, "_models.KubeletDiskType"]] = None, + workload_runtime: Optional[Union[str, "_models.WorkloadRuntime"]] = None, + message_of_the_day: Optional[str] = None, + vnet_subnet_id: Optional[str] = None, + pod_subnet_id: Optional[str] = None, + max_pods: Optional[int] = None, + os_type: Optional[Union[str, "_models.OSType"]] = "Linux", + os_sku: Optional[Union[str, "_models.OSSKU"]] = None, + max_count: Optional[int] = None, + min_count: Optional[int] = None, + enable_auto_scaling: Optional[bool] = None, + scale_down_mode: Optional[Union[str, "_models.ScaleDownMode"]] = None, + type: Optional[Union[str, "_models.AgentPoolType"]] = None, + mode: Optional[Union[str, "_models.AgentPoolMode"]] = None, + orchestrator_version: Optional[str] = None, + upgrade_settings: Optional["_models.AgentPoolUpgradeSettings"] = None, + power_state: Optional["_models.PowerState"] = None, + availability_zones: Optional[List[str]] = None, + enable_node_public_ip: Optional[bool] = None, + enable_custom_ca_trust: Optional[bool] = None, + node_public_ip_prefix_id: Optional[str] = None, + scale_set_priority: Optional[Union[str, "_models.ScaleSetPriority"]] = "Regular", + scale_set_eviction_policy: Optional[Union[str, "_models.ScaleSetEvictionPolicy"]] = "Delete", + spot_max_price: Optional[float] = -1, + tags: Optional[Dict[str, str]] = None, + node_labels: Optional[Dict[str, str]] = None, + node_taints: Optional[List[str]] = None, + proximity_placement_group_id: Optional[str] = None, + kubelet_config: Optional["_models.KubeletConfig"] = None, + linux_os_config: Optional["_models.LinuxOSConfig"] = None, + enable_encryption_at_host: Optional[bool] = None, + enable_ultra_ssd: Optional[bool] = None, + enable_fips: Optional[bool] = None, + gpu_instance_profile: Optional[Union[str, "_models.GPUInstanceProfile"]] = None, + creation_data: Optional["_models.CreationData"] = None, + capacity_reservation_group_id: Optional[str] = None, + host_group_id: Optional[str] = None, + **kwargs + ): + """ + :keyword count: Number of agents (VMs) to host docker containers. Allowed values must be in the + range of 0 to 1000 (inclusive) for user pools and in the range of 1 to 1000 (inclusive) for + system pools. The default value is 1. + :paramtype count: int + :keyword vm_size: VM size availability varies by region. If a node contains insufficient + compute resources (memory, cpu, etc) pods might fail to run correctly. For more details on + restricted VM sizes, see: https://docs.microsoft.com/azure/aks/quotas-skus-regions. + :paramtype vm_size: str + :keyword os_disk_size_gb: OS Disk Size in GB to be used to specify the disk size for every + machine in the master/agent pool. If you specify 0, it will apply the default osDisk size + according to the vmSize specified. + :paramtype os_disk_size_gb: int + :keyword os_disk_type: The default is 'Ephemeral' if the VM supports it and has a cache disk + larger than the requested OSDiskSizeGB. Otherwise, defaults to 'Managed'. May not be changed + after creation. For more information see `Ephemeral OS + `_. Known values are: + "Managed", "Ephemeral". + :paramtype os_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSDiskType + :keyword kubelet_disk_type: Determines the placement of emptyDir volumes, container runtime + data root, and Kubelet ephemeral storage. Known values are: "OS", "Temporary". + :paramtype kubelet_disk_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletDiskType + :keyword workload_runtime: Determines the type of workload a node can run. Known values are: + "OCIContainer", "WasmWasi". + :paramtype workload_runtime: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WorkloadRuntime + :keyword message_of_the_day: A base64-encoded string which will be written to /etc/motd after + decoding. This allows customization of the message of the day for Linux nodes. It must not be + specified for Windows nodes. It must be a static string (i.e., will be printed raw and not be + executed as a script). + :paramtype message_of_the_day: str + :keyword vnet_subnet_id: If this is not specified, a VNET and subnet will be generated and + used. If no podSubnetID is specified, this applies to nodes and pods, otherwise it applies to + just nodes. This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype vnet_subnet_id: str + :keyword pod_subnet_id: If omitted, pod IPs are statically assigned on the node subnet (see + vnetSubnetID for more details). This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/virtualNetworks/{virtualNetworkName}/subnets/{subnetName}. + :paramtype pod_subnet_id: str + :keyword max_pods: The maximum number of pods that can run on a node. + :paramtype max_pods: int + :keyword os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :keyword os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :paramtype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :keyword max_count: The maximum number of nodes for auto-scaling. + :paramtype max_count: int + :keyword min_count: The minimum number of nodes for auto-scaling. + :paramtype min_count: int + :keyword enable_auto_scaling: Whether to enable auto-scaler. + :paramtype enable_auto_scaling: bool + :keyword scale_down_mode: This also effects the cluster autoscaler behavior. If not specified, + it defaults to Delete. Known values are: "Delete", "Deallocate". + :paramtype scale_down_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleDownMode + :keyword type: The type of Agent Pool. Known values are: "VirtualMachineScaleSets", + "AvailabilitySet". + :paramtype type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolType + :keyword mode: A cluster must have at least one 'System' Agent Pool at all times. For + additional information on agent pool restrictions and best practices, see: + https://docs.microsoft.com/azure/aks/use-system-pools. Known values are: "System", "User". + :paramtype mode: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolMode + :keyword orchestrator_version: Both patch version and are + supported. When is specified, the latest supported patch version is chosen + automatically. Updating the agent pool with the same once it has been created + will not trigger an upgrade, even if a newer patch version is available. As a best practice, + you should upgrade all node pools in an AKS cluster to the same Kubernetes version. The node + pool version must have the same major version as the control plane. The node pool minor version + must be within two minor versions of the control plane version. The node pool version cannot be + greater than the control plane version. For more information see `upgrading a node pool + `_. + :paramtype orchestrator_version: str + :keyword upgrade_settings: Settings for upgrading the agentpool. + :paramtype upgrade_settings: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeSettings + :keyword power_state: When an Agent Pool is first created it is initially Running. The Agent + Pool can be stopped by setting this field to Stopped. A stopped Agent Pool stops all of its VMs + and does not accrue billing charges. An Agent Pool can only be stopped if it is Running and + provisioning state is Succeeded. + :paramtype power_state: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PowerState + :keyword availability_zones: The list of Availability zones to use for nodes. This can only be + specified if the AgentPoolType property is 'VirtualMachineScaleSets'. + :paramtype availability_zones: list[str] + :keyword enable_node_public_ip: Some scenarios may require nodes in a node pool to receive + their own dedicated public IP addresses. A common scenario is for gaming workloads, where a + console needs to make a direct connection to a cloud virtual machine to minimize hops. For more + information see `assigning a public IP per node + `_. + The default is false. + :paramtype enable_node_public_ip: bool + :keyword enable_custom_ca_trust: When set to true, AKS deploys a daemonset and host services to + sync custom certificate authorities from a user-provided config map into node trust stores. + Defaults to false. + :paramtype enable_custom_ca_trust: bool + :keyword node_public_ip_prefix_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Network/publicIPPrefixes/{publicIPPrefixName}. + :paramtype node_public_ip_prefix_id: str + :keyword scale_set_priority: The Virtual Machine Scale Set priority. If not specified, the + default is 'Regular'. Known values are: "Spot", "Regular". Default value: "Regular". + :paramtype scale_set_priority: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetPriority + :keyword scale_set_eviction_policy: This cannot be specified unless the scaleSetPriority is + 'Spot'. If not specified, the default is 'Delete'. Known values are: "Delete", "Deallocate". + Default value: "Delete". + :paramtype scale_set_eviction_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ScaleSetEvictionPolicy + :keyword spot_max_price: Possible values are any decimal value greater than zero or -1 which + indicates the willingness to pay any on-demand price. For more details on spot pricing, see + `spot VMs pricing `_. + :paramtype spot_max_price: float + :keyword tags: A set of tags. The tags to be persisted on the agent pool virtual machine scale + set. + :paramtype tags: dict[str, str] + :keyword node_labels: The node labels to be persisted across all nodes in agent pool. + :paramtype node_labels: dict[str, str] + :keyword node_taints: The taints added to new nodes during node pool create and scale. For + example, key=value:NoSchedule. + :paramtype node_taints: list[str] + :keyword proximity_placement_group_id: The ID for Proximity Placement Group. + :paramtype proximity_placement_group_id: str + :keyword kubelet_config: The Kubelet configuration on the agent pool nodes. + :paramtype kubelet_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.KubeletConfig + :keyword linux_os_config: The OS configuration of Linux agent nodes. + :paramtype linux_os_config: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LinuxOSConfig + :keyword enable_encryption_at_host: This is only supported on certain VM sizes and in certain + Azure regions. For more information, see: + https://docs.microsoft.com/azure/aks/enable-host-encryption. + :paramtype enable_encryption_at_host: bool + :keyword enable_ultra_ssd: Whether to enable UltraSSD. + :paramtype enable_ultra_ssd: bool + :keyword enable_fips: See `Add a FIPS-enabled node pool + `_ + for more details. + :paramtype enable_fips: bool + :keyword gpu_instance_profile: GPUInstanceProfile to be used to specify GPU MIG instance + profile for supported GPU VM SKU. Known values are: "MIG1g", "MIG2g", "MIG3g", "MIG4g", + "MIG7g". + :paramtype gpu_instance_profile: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.GPUInstanceProfile + :keyword creation_data: CreationData to be used to specify the source Snapshot ID if the node + pool will be created/upgraded using a snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword capacity_reservation_group_id: AKS will associate the specified agent pool with the + Capacity Reservation Group. + :paramtype capacity_reservation_group_id: str + :keyword host_group_id: This is of the form: + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Compute/hostGroups/{hostGroupName}. + For more information see `Azure dedicated hosts + `_. + :paramtype host_group_id: str + :keyword name: Required. Windows agent pool names must be 6 characters or less. + :paramtype name: str + """ + super(ManagedClusterAgentPoolProfile, self).__init__(count=count, vm_size=vm_size, os_disk_size_gb=os_disk_size_gb, os_disk_type=os_disk_type, kubelet_disk_type=kubelet_disk_type, workload_runtime=workload_runtime, message_of_the_day=message_of_the_day, vnet_subnet_id=vnet_subnet_id, pod_subnet_id=pod_subnet_id, max_pods=max_pods, os_type=os_type, os_sku=os_sku, max_count=max_count, min_count=min_count, enable_auto_scaling=enable_auto_scaling, scale_down_mode=scale_down_mode, type=type, mode=mode, orchestrator_version=orchestrator_version, upgrade_settings=upgrade_settings, power_state=power_state, availability_zones=availability_zones, enable_node_public_ip=enable_node_public_ip, enable_custom_ca_trust=enable_custom_ca_trust, node_public_ip_prefix_id=node_public_ip_prefix_id, scale_set_priority=scale_set_priority, scale_set_eviction_policy=scale_set_eviction_policy, spot_max_price=spot_max_price, tags=tags, node_labels=node_labels, node_taints=node_taints, proximity_placement_group_id=proximity_placement_group_id, kubelet_config=kubelet_config, linux_os_config=linux_os_config, enable_encryption_at_host=enable_encryption_at_host, enable_ultra_ssd=enable_ultra_ssd, enable_fips=enable_fips, gpu_instance_profile=gpu_instance_profile, creation_data=creation_data, capacity_reservation_group_id=capacity_reservation_group_id, host_group_id=host_group_id, **kwargs) + self.name = name + + +class ManagedClusterAPIServerAccessProfile(msrest.serialization.Model): + """Access profile for managed cluster API server. + + :ivar authorized_ip_ranges: IP ranges are specified in CIDR format, e.g. 137.117.106.88/29. + This feature is not compatible with clusters that use Public IP Per Node, or clusters that are + using a Basic Load Balancer. For more information see `API server authorized IP ranges + `_. + :vartype authorized_ip_ranges: list[str] + :ivar enable_private_cluster: For more details, see `Creating a private AKS cluster + `_. + :vartype enable_private_cluster: bool + :ivar private_dns_zone: The default is System. For more details see `configure private DNS zone + `_. Allowed + values are 'system' and 'none'. + :vartype private_dns_zone: str + :ivar enable_private_cluster_public_fqdn: Whether to create additional public FQDN for private + cluster or not. + :vartype enable_private_cluster_public_fqdn: bool + :ivar disable_run_command: Whether to disable run command for the cluster or not. + :vartype disable_run_command: bool + :ivar enable_vnet_integration: Whether to enable apiserver vnet integration for the cluster or + not. + :vartype enable_vnet_integration: bool + :ivar subnet_id: It is required when: 1. creating a new cluster with BYO Vnet; 2. updating an + existing cluster to enable apiserver vnet integration. + :vartype subnet_id: str + """ + + _attribute_map = { + 'authorized_ip_ranges': {'key': 'authorizedIPRanges', 'type': '[str]'}, + 'enable_private_cluster': {'key': 'enablePrivateCluster', 'type': 'bool'}, + 'private_dns_zone': {'key': 'privateDNSZone', 'type': 'str'}, + 'enable_private_cluster_public_fqdn': {'key': 'enablePrivateClusterPublicFQDN', 'type': 'bool'}, + 'disable_run_command': {'key': 'disableRunCommand', 'type': 'bool'}, + 'enable_vnet_integration': {'key': 'enableVnetIntegration', 'type': 'bool'}, + 'subnet_id': {'key': 'subnetId', 'type': 'str'}, + } + + def __init__( + self, + *, + authorized_ip_ranges: Optional[List[str]] = None, + enable_private_cluster: Optional[bool] = None, + private_dns_zone: Optional[str] = None, + enable_private_cluster_public_fqdn: Optional[bool] = None, + disable_run_command: Optional[bool] = None, + enable_vnet_integration: Optional[bool] = None, + subnet_id: Optional[str] = None, + **kwargs + ): + """ + :keyword authorized_ip_ranges: IP ranges are specified in CIDR format, e.g. 137.117.106.88/29. + This feature is not compatible with clusters that use Public IP Per Node, or clusters that are + using a Basic Load Balancer. For more information see `API server authorized IP ranges + `_. + :paramtype authorized_ip_ranges: list[str] + :keyword enable_private_cluster: For more details, see `Creating a private AKS cluster + `_. + :paramtype enable_private_cluster: bool + :keyword private_dns_zone: The default is System. For more details see `configure private DNS + zone `_. + Allowed values are 'system' and 'none'. + :paramtype private_dns_zone: str + :keyword enable_private_cluster_public_fqdn: Whether to create additional public FQDN for + private cluster or not. + :paramtype enable_private_cluster_public_fqdn: bool + :keyword disable_run_command: Whether to disable run command for the cluster or not. + :paramtype disable_run_command: bool + :keyword enable_vnet_integration: Whether to enable apiserver vnet integration for the cluster + or not. + :paramtype enable_vnet_integration: bool + :keyword subnet_id: It is required when: 1. creating a new cluster with BYO Vnet; 2. updating + an existing cluster to enable apiserver vnet integration. + :paramtype subnet_id: str + """ + super(ManagedClusterAPIServerAccessProfile, self).__init__(**kwargs) + self.authorized_ip_ranges = authorized_ip_ranges + self.enable_private_cluster = enable_private_cluster + self.private_dns_zone = private_dns_zone + self.enable_private_cluster_public_fqdn = enable_private_cluster_public_fqdn + self.disable_run_command = disable_run_command + self.enable_vnet_integration = enable_vnet_integration + self.subnet_id = subnet_id + + +class ManagedClusterAutoUpgradeProfile(msrest.serialization.Model): + """Auto upgrade profile for a managed cluster. + + :ivar upgrade_channel: For more information see `setting the AKS cluster auto-upgrade channel + `_. Known values + are: "rapid", "stable", "patch", "node-image", "none". + :vartype upgrade_channel: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.UpgradeChannel + """ + + _attribute_map = { + 'upgrade_channel': {'key': 'upgradeChannel', 'type': 'str'}, + } + + def __init__( + self, + *, + upgrade_channel: Optional[Union[str, "_models.UpgradeChannel"]] = None, + **kwargs + ): + """ + :keyword upgrade_channel: For more information see `setting the AKS cluster auto-upgrade + channel `_. + Known values are: "rapid", "stable", "patch", "node-image", "none". + :paramtype upgrade_channel: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.UpgradeChannel + """ + super(ManagedClusterAutoUpgradeProfile, self).__init__(**kwargs) + self.upgrade_channel = upgrade_channel + + +class ManagedClusterHTTPProxyConfig(msrest.serialization.Model): + """Cluster HTTP proxy configuration. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar http_proxy: The HTTP proxy server endpoint to use. + :vartype http_proxy: str + :ivar https_proxy: The HTTPS proxy server endpoint to use. + :vartype https_proxy: str + :ivar no_proxy: The endpoints that should not go through proxy. + :vartype no_proxy: list[str] + :ivar effective_no_proxy: A read-only list of all endpoints for which traffic should not be + sent to the proxy. This list is a superset of noProxy and values injected by AKS. + :vartype effective_no_proxy: list[str] + :ivar trusted_ca: Alternative CA cert to use for connecting to proxy servers. + :vartype trusted_ca: str + """ + + _validation = { + 'effective_no_proxy': {'readonly': True}, + } + + _attribute_map = { + 'http_proxy': {'key': 'httpProxy', 'type': 'str'}, + 'https_proxy': {'key': 'httpsProxy', 'type': 'str'}, + 'no_proxy': {'key': 'noProxy', 'type': '[str]'}, + 'effective_no_proxy': {'key': 'effectiveNoProxy', 'type': '[str]'}, + 'trusted_ca': {'key': 'trustedCa', 'type': 'str'}, + } + + def __init__( + self, + *, + http_proxy: Optional[str] = None, + https_proxy: Optional[str] = None, + no_proxy: Optional[List[str]] = None, + trusted_ca: Optional[str] = None, + **kwargs + ): + """ + :keyword http_proxy: The HTTP proxy server endpoint to use. + :paramtype http_proxy: str + :keyword https_proxy: The HTTPS proxy server endpoint to use. + :paramtype https_proxy: str + :keyword no_proxy: The endpoints that should not go through proxy. + :paramtype no_proxy: list[str] + :keyword trusted_ca: Alternative CA cert to use for connecting to proxy servers. + :paramtype trusted_ca: str + """ + super(ManagedClusterHTTPProxyConfig, self).__init__(**kwargs) + self.http_proxy = http_proxy + self.https_proxy = https_proxy + self.no_proxy = no_proxy + self.effective_no_proxy = None + self.trusted_ca = trusted_ca + + +class ManagedClusterIdentity(msrest.serialization.Model): + """Identity for the managed cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar principal_id: The principal id of the system assigned identity which is used by master + components. + :vartype principal_id: str + :ivar tenant_id: The tenant id of the system assigned identity which is used by master + components. + :vartype tenant_id: str + :ivar type: For more information see `use managed identities in AKS + `_. Known values are: + "SystemAssigned", "UserAssigned", "None". + :vartype type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceIdentityType + :ivar user_assigned_identities: The keys must be ARM resource IDs in the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + :vartype user_assigned_identities: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] + """ + + _validation = { + 'principal_id': {'readonly': True}, + 'tenant_id': {'readonly': True}, + } + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'tenant_id': {'key': 'tenantId', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '{ManagedServiceIdentityUserAssignedIdentitiesValue}'}, + } + + def __init__( + self, + *, + type: Optional[Union[str, "_models.ResourceIdentityType"]] = None, + user_assigned_identities: Optional[Dict[str, "_models.ManagedServiceIdentityUserAssignedIdentitiesValue"]] = None, + **kwargs + ): + """ + :keyword type: For more information see `use managed identities in AKS + `_. Known values are: + "SystemAssigned", "UserAssigned", "None". + :paramtype type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceIdentityType + :keyword user_assigned_identities: The keys must be ARM resource IDs in the form: + '/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/{identityName}'. + :paramtype user_assigned_identities: dict[str, + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedServiceIdentityUserAssignedIdentitiesValue] + """ + super(ManagedClusterIdentity, self).__init__(**kwargs) + self.principal_id = None + self.tenant_id = None + self.type = type + self.user_assigned_identities = user_assigned_identities + + +class ManagedClusterIngressProfile(msrest.serialization.Model): + """Ingress profile for the container service cluster. + + :ivar web_app_routing: Web App Routing settings for the ingress profile. + :vartype web_app_routing: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfileWebAppRouting + """ + + _attribute_map = { + 'web_app_routing': {'key': 'webAppRouting', 'type': 'ManagedClusterIngressProfileWebAppRouting'}, + } + + def __init__( + self, + *, + web_app_routing: Optional["_models.ManagedClusterIngressProfileWebAppRouting"] = None, + **kwargs + ): + """ + :keyword web_app_routing: Web App Routing settings for the ingress profile. + :paramtype web_app_routing: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterIngressProfileWebAppRouting + """ + super(ManagedClusterIngressProfile, self).__init__(**kwargs) + self.web_app_routing = web_app_routing + + +class ManagedClusterIngressProfileWebAppRouting(msrest.serialization.Model): + """Web App Routing settings for the ingress profile. + + :ivar enabled: Whether to enable Web App Routing. + :vartype enabled: bool + :ivar dns_zone_resource_id: Resource ID of the DNS Zone to be associated with the web app. Used + only when Web App Routing is enabled. + :vartype dns_zone_resource_id: str + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'dns_zone_resource_id': {'key': 'dnsZoneResourceId', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + dns_zone_resource_id: Optional[str] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Web App Routing. + :paramtype enabled: bool + :keyword dns_zone_resource_id: Resource ID of the DNS Zone to be associated with the web app. + Used only when Web App Routing is enabled. + :paramtype dns_zone_resource_id: str + """ + super(ManagedClusterIngressProfileWebAppRouting, self).__init__(**kwargs) + self.enabled = enabled + self.dns_zone_resource_id = dns_zone_resource_id + + +class ManagedClusterListResult(msrest.serialization.Model): + """The response from the List Managed Clusters operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of managed clusters. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :ivar next_link: The URL to get the next set of managed cluster results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ManagedCluster]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.ManagedCluster"]] = None, + **kwargs + ): + """ + :keyword value: The list of managed clusters. + :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + """ + super(ManagedClusterListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ManagedClusterLoadBalancerProfile(msrest.serialization.Model): + """Profile of the managed cluster load balancer. + + :ivar managed_outbound_i_ps: Desired managed outbound IPs for the cluster load balancer. + :vartype managed_outbound_i_ps: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs + :ivar outbound_ip_prefixes: Desired outbound IP Prefix resources for the cluster load balancer. + :vartype outbound_ip_prefixes: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes + :ivar outbound_i_ps: Desired outbound IP resources for the cluster load balancer. + :vartype outbound_i_ps: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs + :ivar effective_outbound_i_ps: The effective outbound IP resources of the cluster load + balancer. + :vartype effective_outbound_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + :ivar allocated_outbound_ports: The desired number of allocated SNAT ports per VM. Allowed + values are in the range of 0 to 64000 (inclusive). The default value is 0 which results in + Azure dynamically allocating ports. + :vartype allocated_outbound_ports: int + :ivar idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values + are in the range of 4 to 120 (inclusive). The default value is 30 minutes. + :vartype idle_timeout_in_minutes: int + :ivar enable_multiple_standard_load_balancers: Enable multiple standard load balancers per AKS + cluster or not. + :vartype enable_multiple_standard_load_balancers: bool + """ + + _validation = { + 'allocated_outbound_ports': {'maximum': 64000, 'minimum': 0}, + 'idle_timeout_in_minutes': {'maximum': 120, 'minimum': 4}, + } + + _attribute_map = { + 'managed_outbound_i_ps': {'key': 'managedOutboundIPs', 'type': 'ManagedClusterLoadBalancerProfileManagedOutboundIPs'}, + 'outbound_ip_prefixes': {'key': 'outboundIPPrefixes', 'type': 'ManagedClusterLoadBalancerProfileOutboundIPPrefixes'}, + 'outbound_i_ps': {'key': 'outboundIPs', 'type': 'ManagedClusterLoadBalancerProfileOutboundIPs'}, + 'effective_outbound_i_ps': {'key': 'effectiveOutboundIPs', 'type': '[ResourceReference]'}, + 'allocated_outbound_ports': {'key': 'allocatedOutboundPorts', 'type': 'int'}, + 'idle_timeout_in_minutes': {'key': 'idleTimeoutInMinutes', 'type': 'int'}, + 'enable_multiple_standard_load_balancers': {'key': 'enableMultipleStandardLoadBalancers', 'type': 'bool'}, + } + + def __init__( + self, + *, + managed_outbound_i_ps: Optional["_models.ManagedClusterLoadBalancerProfileManagedOutboundIPs"] = None, + outbound_ip_prefixes: Optional["_models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes"] = None, + outbound_i_ps: Optional["_models.ManagedClusterLoadBalancerProfileOutboundIPs"] = None, + effective_outbound_i_ps: Optional[List["_models.ResourceReference"]] = None, + allocated_outbound_ports: Optional[int] = 0, + idle_timeout_in_minutes: Optional[int] = 30, + enable_multiple_standard_load_balancers: Optional[bool] = None, + **kwargs + ): + """ + :keyword managed_outbound_i_ps: Desired managed outbound IPs for the cluster load balancer. + :paramtype managed_outbound_i_ps: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileManagedOutboundIPs + :keyword outbound_ip_prefixes: Desired outbound IP Prefix resources for the cluster load + balancer. + :paramtype outbound_ip_prefixes: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPPrefixes + :keyword outbound_i_ps: Desired outbound IP resources for the cluster load balancer. + :paramtype outbound_i_ps: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterLoadBalancerProfileOutboundIPs + :keyword effective_outbound_i_ps: The effective outbound IP resources of the cluster load + balancer. + :paramtype effective_outbound_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + :keyword allocated_outbound_ports: The desired number of allocated SNAT ports per VM. Allowed + values are in the range of 0 to 64000 (inclusive). The default value is 0 which results in + Azure dynamically allocating ports. + :paramtype allocated_outbound_ports: int + :keyword idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values + are in the range of 4 to 120 (inclusive). The default value is 30 minutes. + :paramtype idle_timeout_in_minutes: int + :keyword enable_multiple_standard_load_balancers: Enable multiple standard load balancers per + AKS cluster or not. + :paramtype enable_multiple_standard_load_balancers: bool + """ + super(ManagedClusterLoadBalancerProfile, self).__init__(**kwargs) + self.managed_outbound_i_ps = managed_outbound_i_ps + self.outbound_ip_prefixes = outbound_ip_prefixes + self.outbound_i_ps = outbound_i_ps + self.effective_outbound_i_ps = effective_outbound_i_ps + self.allocated_outbound_ports = allocated_outbound_ports + self.idle_timeout_in_minutes = idle_timeout_in_minutes + self.enable_multiple_standard_load_balancers = enable_multiple_standard_load_balancers + + +class ManagedClusterLoadBalancerProfileManagedOutboundIPs(msrest.serialization.Model): + """Desired managed outbound IPs for the cluster load balancer. + + :ivar count: The desired number of IPv4 outbound IPs created/managed by Azure for the cluster + load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default value + is 1. + :vartype count: int + :ivar count_ipv6: The desired number of IPv6 outbound IPs created/managed by Azure for the + cluster load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default + value is 0 for single-stack and 1 for dual-stack. + :vartype count_ipv6: int + """ + + _validation = { + 'count': {'maximum': 100, 'minimum': 1}, + 'count_ipv6': {'maximum': 100, 'minimum': 0}, + } + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + 'count_ipv6': {'key': 'countIPv6', 'type': 'int'}, + } + + def __init__( + self, + *, + count: Optional[int] = 1, + count_ipv6: Optional[int] = 0, + **kwargs + ): + """ + :keyword count: The desired number of IPv4 outbound IPs created/managed by Azure for the + cluster load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default + value is 1. + :paramtype count: int + :keyword count_ipv6: The desired number of IPv6 outbound IPs created/managed by Azure for the + cluster load balancer. Allowed values must be in the range of 1 to 100 (inclusive). The default + value is 0 for single-stack and 1 for dual-stack. + :paramtype count_ipv6: int + """ + super(ManagedClusterLoadBalancerProfileManagedOutboundIPs, self).__init__(**kwargs) + self.count = count + self.count_ipv6 = count_ipv6 + + +class ManagedClusterLoadBalancerProfileOutboundIPPrefixes(msrest.serialization.Model): + """Desired outbound IP Prefix resources for the cluster load balancer. + + :ivar public_ip_prefixes: A list of public IP prefix resources. + :vartype public_ip_prefixes: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + """ + + _attribute_map = { + 'public_ip_prefixes': {'key': 'publicIPPrefixes', 'type': '[ResourceReference]'}, + } + + def __init__( + self, + *, + public_ip_prefixes: Optional[List["_models.ResourceReference"]] = None, + **kwargs + ): + """ + :keyword public_ip_prefixes: A list of public IP prefix resources. + :paramtype public_ip_prefixes: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + """ + super(ManagedClusterLoadBalancerProfileOutboundIPPrefixes, self).__init__(**kwargs) + self.public_ip_prefixes = public_ip_prefixes + + +class ManagedClusterLoadBalancerProfileOutboundIPs(msrest.serialization.Model): + """Desired outbound IP resources for the cluster load balancer. + + :ivar public_i_ps: A list of public IP resources. + :vartype public_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + """ + + _attribute_map = { + 'public_i_ps': {'key': 'publicIPs', 'type': '[ResourceReference]'}, + } + + def __init__( + self, + *, + public_i_ps: Optional[List["_models.ResourceReference"]] = None, + **kwargs + ): + """ + :keyword public_i_ps: A list of public IP resources. + :paramtype public_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + """ + super(ManagedClusterLoadBalancerProfileOutboundIPs, self).__init__(**kwargs) + self.public_i_ps = public_i_ps + + +class ManagedClusterManagedOutboundIPProfile(msrest.serialization.Model): + """Profile of the managed outbound IP resources of the managed cluster. + + :ivar count: The desired number of outbound IPs created/managed by Azure. Allowed values must + be in the range of 1 to 16 (inclusive). The default value is 1. + :vartype count: int + """ + + _validation = { + 'count': {'maximum': 16, 'minimum': 1}, + } + + _attribute_map = { + 'count': {'key': 'count', 'type': 'int'}, + } + + def __init__( + self, + *, + count: Optional[int] = 1, + **kwargs + ): + """ + :keyword count: The desired number of outbound IPs created/managed by Azure. Allowed values + must be in the range of 1 to 16 (inclusive). The default value is 1. + :paramtype count: int + """ + super(ManagedClusterManagedOutboundIPProfile, self).__init__(**kwargs) + self.count = count + + +class ManagedClusterNATGatewayProfile(msrest.serialization.Model): + """Profile of the managed cluster NAT gateway. + + :ivar managed_outbound_ip_profile: Profile of the managed outbound IP resources of the cluster + NAT gateway. + :vartype managed_outbound_ip_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterManagedOutboundIPProfile + :ivar effective_outbound_i_ps: The effective outbound IP resources of the cluster NAT gateway. + :vartype effective_outbound_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + :ivar idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values + are in the range of 4 to 120 (inclusive). The default value is 4 minutes. + :vartype idle_timeout_in_minutes: int + """ + + _validation = { + 'idle_timeout_in_minutes': {'maximum': 120, 'minimum': 4}, + } + + _attribute_map = { + 'managed_outbound_ip_profile': {'key': 'managedOutboundIPProfile', 'type': 'ManagedClusterManagedOutboundIPProfile'}, + 'effective_outbound_i_ps': {'key': 'effectiveOutboundIPs', 'type': '[ResourceReference]'}, + 'idle_timeout_in_minutes': {'key': 'idleTimeoutInMinutes', 'type': 'int'}, + } + + def __init__( + self, + *, + managed_outbound_ip_profile: Optional["_models.ManagedClusterManagedOutboundIPProfile"] = None, + effective_outbound_i_ps: Optional[List["_models.ResourceReference"]] = None, + idle_timeout_in_minutes: Optional[int] = 4, + **kwargs + ): + """ + :keyword managed_outbound_ip_profile: Profile of the managed outbound IP resources of the + cluster NAT gateway. + :paramtype managed_outbound_ip_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterManagedOutboundIPProfile + :keyword effective_outbound_i_ps: The effective outbound IP resources of the cluster NAT + gateway. + :paramtype effective_outbound_i_ps: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ResourceReference] + :keyword idle_timeout_in_minutes: Desired outbound flow idle timeout in minutes. Allowed values + are in the range of 4 to 120 (inclusive). The default value is 4 minutes. + :paramtype idle_timeout_in_minutes: int + """ + super(ManagedClusterNATGatewayProfile, self).__init__(**kwargs) + self.managed_outbound_ip_profile = managed_outbound_ip_profile + self.effective_outbound_i_ps = effective_outbound_i_ps + self.idle_timeout_in_minutes = idle_timeout_in_minutes + + +class ManagedClusterOIDCIssuerProfile(msrest.serialization.Model): + """The OIDC issuer profile of the Managed Cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar issuer_url: The OIDC issuer url of the Managed Cluster. + :vartype issuer_url: str + :ivar enabled: Whether the OIDC issuer is enabled. + :vartype enabled: bool + """ + + _validation = { + 'issuer_url': {'readonly': True}, + } + + _attribute_map = { + 'issuer_url': {'key': 'issuerURL', 'type': 'str'}, + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether the OIDC issuer is enabled. + :paramtype enabled: bool + """ + super(ManagedClusterOIDCIssuerProfile, self).__init__(**kwargs) + self.issuer_url = None + self.enabled = enabled + + +class ManagedClusterPodIdentity(msrest.serialization.Model): + """Details about the pod identity assigned to the Managed Cluster. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar name: Required. The name of the pod identity. + :vartype name: str + :ivar namespace: Required. The namespace of the pod identity. + :vartype namespace: str + :ivar binding_selector: The binding selector to use for the AzureIdentityBinding resource. + :vartype binding_selector: str + :ivar identity: Required. The user assigned identity details. + :vartype identity: ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity + :ivar provisioning_state: The current provisioning state of the pod identity. Known values are: + "Assigned", "Updating", "Deleting", "Failed". + :vartype provisioning_state: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningState + :ivar provisioning_info: + :vartype provisioning_info: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningInfo + """ + + _validation = { + 'name': {'required': True}, + 'namespace': {'required': True}, + 'identity': {'required': True}, + 'provisioning_state': {'readonly': True}, + 'provisioning_info': {'readonly': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'namespace': {'key': 'namespace', 'type': 'str'}, + 'binding_selector': {'key': 'bindingSelector', 'type': 'str'}, + 'identity': {'key': 'identity', 'type': 'UserAssignedIdentity'}, + 'provisioning_state': {'key': 'provisioningState', 'type': 'str'}, + 'provisioning_info': {'key': 'provisioningInfo', 'type': 'ManagedClusterPodIdentityProvisioningInfo'}, + } + + def __init__( + self, + *, + name: str, + namespace: str, + identity: "_models.UserAssignedIdentity", + binding_selector: Optional[str] = None, + **kwargs + ): + """ + :keyword name: Required. The name of the pod identity. + :paramtype name: str + :keyword namespace: Required. The namespace of the pod identity. + :paramtype namespace: str + :keyword binding_selector: The binding selector to use for the AzureIdentityBinding resource. + :paramtype binding_selector: str + :keyword identity: Required. The user assigned identity details. + :paramtype identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.UserAssignedIdentity + """ + super(ManagedClusterPodIdentity, self).__init__(**kwargs) + self.name = name + self.namespace = namespace + self.binding_selector = binding_selector + self.identity = identity + self.provisioning_state = None + self.provisioning_info = None + + +class ManagedClusterPodIdentityException(msrest.serialization.Model): + """See `disable AAD Pod Identity for a specific Pod/Application `_ for more details. + + All required parameters must be populated in order to send to Azure. + + :ivar name: Required. The name of the pod identity exception. + :vartype name: str + :ivar namespace: Required. The namespace of the pod identity exception. + :vartype namespace: str + :ivar pod_labels: Required. The pod labels to match. + :vartype pod_labels: dict[str, str] + """ + + _validation = { + 'name': {'required': True}, + 'namespace': {'required': True}, + 'pod_labels': {'required': True}, + } + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'namespace': {'key': 'namespace', 'type': 'str'}, + 'pod_labels': {'key': 'podLabels', 'type': '{str}'}, + } + + def __init__( + self, + *, + name: str, + namespace: str, + pod_labels: Dict[str, str], + **kwargs + ): + """ + :keyword name: Required. The name of the pod identity exception. + :paramtype name: str + :keyword namespace: Required. The namespace of the pod identity exception. + :paramtype namespace: str + :keyword pod_labels: Required. The pod labels to match. + :paramtype pod_labels: dict[str, str] + """ + super(ManagedClusterPodIdentityException, self).__init__(**kwargs) + self.name = name + self.namespace = namespace + self.pod_labels = pod_labels + + +class ManagedClusterPodIdentityProfile(msrest.serialization.Model): + """See `use AAD pod identity `_ for more details on pod identity integration. + + :ivar enabled: Whether the pod identity addon is enabled. + :vartype enabled: bool + :ivar allow_network_plugin_kubenet: Running in Kubenet is disabled by default due to the + security related nature of AAD Pod Identity and the risks of IP spoofing. See `using Kubenet + network plugin with AAD Pod Identity + `_ + for more information. + :vartype allow_network_plugin_kubenet: bool + :ivar user_assigned_identities: The pod identities to use in the cluster. + :vartype user_assigned_identities: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentity] + :ivar user_assigned_identity_exceptions: The pod identity exceptions to allow. + :vartype user_assigned_identity_exceptions: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityException] + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'allow_network_plugin_kubenet': {'key': 'allowNetworkPluginKubenet', 'type': 'bool'}, + 'user_assigned_identities': {'key': 'userAssignedIdentities', 'type': '[ManagedClusterPodIdentity]'}, + 'user_assigned_identity_exceptions': {'key': 'userAssignedIdentityExceptions', 'type': '[ManagedClusterPodIdentityException]'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + allow_network_plugin_kubenet: Optional[bool] = None, + user_assigned_identities: Optional[List["_models.ManagedClusterPodIdentity"]] = None, + user_assigned_identity_exceptions: Optional[List["_models.ManagedClusterPodIdentityException"]] = None, + **kwargs + ): + """ + :keyword enabled: Whether the pod identity addon is enabled. + :paramtype enabled: bool + :keyword allow_network_plugin_kubenet: Running in Kubenet is disabled by default due to the + security related nature of AAD Pod Identity and the risks of IP spoofing. See `using Kubenet + network plugin with AAD Pod Identity + `_ + for more information. + :paramtype allow_network_plugin_kubenet: bool + :keyword user_assigned_identities: The pod identities to use in the cluster. + :paramtype user_assigned_identities: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentity] + :keyword user_assigned_identity_exceptions: The pod identity exceptions to allow. + :paramtype user_assigned_identity_exceptions: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityException] + """ + super(ManagedClusterPodIdentityProfile, self).__init__(**kwargs) + self.enabled = enabled + self.allow_network_plugin_kubenet = allow_network_plugin_kubenet + self.user_assigned_identities = user_assigned_identities + self.user_assigned_identity_exceptions = user_assigned_identity_exceptions + + +class ManagedClusterPodIdentityProvisioningError(msrest.serialization.Model): + """An error response from the pod identity provisioning. + + :ivar error: Details about the error. + :vartype error: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ManagedClusterPodIdentityProvisioningErrorBody'}, + } + + def __init__( + self, + *, + error: Optional["_models.ManagedClusterPodIdentityProvisioningErrorBody"] = None, + **kwargs + ): + """ + :keyword error: Details about the error. + :paramtype error: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody + """ + super(ManagedClusterPodIdentityProvisioningError, self).__init__(**kwargs) + self.error = error + + +class ManagedClusterPodIdentityProvisioningErrorBody(msrest.serialization.Model): + """An error response from the pod identity provisioning. + + :ivar code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :vartype code: str + :ivar message: A message describing the error, intended to be suitable for display in a user + interface. + :vartype message: str + :ivar target: The target of the particular error. For example, the name of the property in + error. + :vartype target: str + :ivar details: A list of additional details about the error. + :vartype details: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + 'message': {'key': 'message', 'type': 'str'}, + 'target': {'key': 'target', 'type': 'str'}, + 'details': {'key': 'details', 'type': '[ManagedClusterPodIdentityProvisioningErrorBody]'}, + } + + def __init__( + self, + *, + code: Optional[str] = None, + message: Optional[str] = None, + target: Optional[str] = None, + details: Optional[List["_models.ManagedClusterPodIdentityProvisioningErrorBody"]] = None, + **kwargs + ): + """ + :keyword code: An identifier for the error. Codes are invariant and are intended to be consumed + programmatically. + :paramtype code: str + :keyword message: A message describing the error, intended to be suitable for display in a user + interface. + :paramtype message: str + :keyword target: The target of the particular error. For example, the name of the property in + error. + :paramtype target: str + :keyword details: A list of additional details about the error. + :paramtype details: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningErrorBody] + """ + super(ManagedClusterPodIdentityProvisioningErrorBody, self).__init__(**kwargs) + self.code = code + self.message = message + self.target = target + self.details = details + + +class ManagedClusterPodIdentityProvisioningInfo(msrest.serialization.Model): + """ManagedClusterPodIdentityProvisioningInfo. + + :ivar error: Pod identity assignment error (if any). + :vartype error: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningError + """ + + _attribute_map = { + 'error': {'key': 'error', 'type': 'ManagedClusterPodIdentityProvisioningError'}, + } + + def __init__( + self, + *, + error: Optional["_models.ManagedClusterPodIdentityProvisioningError"] = None, + **kwargs + ): + """ + :keyword error: Pod identity assignment error (if any). + :paramtype error: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPodIdentityProvisioningError + """ + super(ManagedClusterPodIdentityProvisioningInfo, self).__init__(**kwargs) + self.error = error + + +class ManagedClusterPoolUpgradeProfile(msrest.serialization.Model): + """The list of available upgrade versions. + + All required parameters must be populated in order to send to Azure. + + :ivar kubernetes_version: Required. The Kubernetes version (major.minor.patch). + :vartype kubernetes_version: str + :ivar name: The Agent Pool name. + :vartype name: str + :ivar os_type: Required. The operating system type. The default is Linux. Known values are: + "Linux", "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar upgrades: List of orchestrator types and versions available for upgrade. + :vartype upgrades: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] + """ + + _validation = { + 'kubernetes_version': {'required': True}, + 'os_type': {'required': True}, + } + + _attribute_map = { + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'os_type': {'key': 'osType', 'type': 'str'}, + 'upgrades': {'key': 'upgrades', 'type': '[ManagedClusterPoolUpgradeProfileUpgradesItem]'}, + } + + def __init__( + self, + *, + kubernetes_version: str, + os_type: Union[str, "_models.OSType"] = "Linux", + name: Optional[str] = None, + upgrades: Optional[List["_models.ManagedClusterPoolUpgradeProfileUpgradesItem"]] = None, + **kwargs + ): + """ + :keyword kubernetes_version: Required. The Kubernetes version (major.minor.patch). + :paramtype kubernetes_version: str + :keyword name: The Agent Pool name. + :paramtype name: str + :keyword os_type: Required. The operating system type. The default is Linux. Known values are: + "Linux", "Windows". Default value: "Linux". + :paramtype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :keyword upgrades: List of orchestrator types and versions available for upgrade. + :paramtype upgrades: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfileUpgradesItem] + """ + super(ManagedClusterPoolUpgradeProfile, self).__init__(**kwargs) + self.kubernetes_version = kubernetes_version + self.name = name + self.os_type = os_type + self.upgrades = upgrades + + +class ManagedClusterPoolUpgradeProfileUpgradesItem(msrest.serialization.Model): + """ManagedClusterPoolUpgradeProfileUpgradesItem. + + :ivar kubernetes_version: The Kubernetes version (major.minor.patch). + :vartype kubernetes_version: str + :ivar is_preview: Whether the Kubernetes version is currently in preview. + :vartype is_preview: bool + """ + + _attribute_map = { + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + 'is_preview': {'key': 'isPreview', 'type': 'bool'}, + } + + def __init__( + self, + *, + kubernetes_version: Optional[str] = None, + is_preview: Optional[bool] = None, + **kwargs + ): + """ + :keyword kubernetes_version: The Kubernetes version (major.minor.patch). + :paramtype kubernetes_version: str + :keyword is_preview: Whether the Kubernetes version is currently in preview. + :paramtype is_preview: bool + """ + super(ManagedClusterPoolUpgradeProfileUpgradesItem, self).__init__(**kwargs) + self.kubernetes_version = kubernetes_version + self.is_preview = is_preview + + +class ManagedClusterPropertiesAutoScalerProfile(msrest.serialization.Model): + """Parameters to be applied to the cluster-autoscaler when enabled. + + :ivar balance_similar_node_groups: Valid values are 'true' and 'false'. + :vartype balance_similar_node_groups: str + :ivar expander: If not specified, the default is 'random'. See `expanders + `_ + for more information. Known values are: "least-waste", "most-pods", "priority", "random". + :vartype expander: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Expander + :ivar max_empty_bulk_delete: The default is 10. + :vartype max_empty_bulk_delete: str + :ivar max_graceful_termination_sec: The default is 600. + :vartype max_graceful_termination_sec: str + :ivar max_node_provision_time: The default is '15m'. Values must be an integer followed by an + 'm'. No unit of time other than minutes (m) is supported. + :vartype max_node_provision_time: str + :ivar max_total_unready_percentage: The default is 45. The maximum is 100 and the minimum is 0. + :vartype max_total_unready_percentage: str + :ivar new_pod_scale_up_delay: For scenarios like burst/batch scale where you don't want CA to + act before the kubernetes scheduler could schedule all the pods, you can tell CA to ignore + unscheduled pods before they're a certain age. The default is '0s'. Values must be an integer + followed by a unit ('s' for seconds, 'm' for minutes, 'h' for hours, etc). + :vartype new_pod_scale_up_delay: str + :ivar ok_total_unready_count: This must be an integer. The default is 3. + :vartype ok_total_unready_count: str + :ivar scan_interval: The default is '10'. Values must be an integer number of seconds. + :vartype scan_interval: str + :ivar scale_down_delay_after_add: The default is '10m'. Values must be an integer followed by + an 'm'. No unit of time other than minutes (m) is supported. + :vartype scale_down_delay_after_add: str + :ivar scale_down_delay_after_delete: The default is the scan-interval. Values must be an + integer followed by an 'm'. No unit of time other than minutes (m) is supported. + :vartype scale_down_delay_after_delete: str + :ivar scale_down_delay_after_failure: The default is '3m'. Values must be an integer followed + by an 'm'. No unit of time other than minutes (m) is supported. + :vartype scale_down_delay_after_failure: str + :ivar scale_down_unneeded_time: The default is '10m'. Values must be an integer followed by an + 'm'. No unit of time other than minutes (m) is supported. + :vartype scale_down_unneeded_time: str + :ivar scale_down_unready_time: The default is '20m'. Values must be an integer followed by an + 'm'. No unit of time other than minutes (m) is supported. + :vartype scale_down_unready_time: str + :ivar scale_down_utilization_threshold: The default is '0.5'. + :vartype scale_down_utilization_threshold: str + :ivar skip_nodes_with_local_storage: The default is true. + :vartype skip_nodes_with_local_storage: str + :ivar skip_nodes_with_system_pods: The default is true. + :vartype skip_nodes_with_system_pods: str + """ + + _attribute_map = { + 'balance_similar_node_groups': {'key': 'balance-similar-node-groups', 'type': 'str'}, + 'expander': {'key': 'expander', 'type': 'str'}, + 'max_empty_bulk_delete': {'key': 'max-empty-bulk-delete', 'type': 'str'}, + 'max_graceful_termination_sec': {'key': 'max-graceful-termination-sec', 'type': 'str'}, + 'max_node_provision_time': {'key': 'max-node-provision-time', 'type': 'str'}, + 'max_total_unready_percentage': {'key': 'max-total-unready-percentage', 'type': 'str'}, + 'new_pod_scale_up_delay': {'key': 'new-pod-scale-up-delay', 'type': 'str'}, + 'ok_total_unready_count': {'key': 'ok-total-unready-count', 'type': 'str'}, + 'scan_interval': {'key': 'scan-interval', 'type': 'str'}, + 'scale_down_delay_after_add': {'key': 'scale-down-delay-after-add', 'type': 'str'}, + 'scale_down_delay_after_delete': {'key': 'scale-down-delay-after-delete', 'type': 'str'}, + 'scale_down_delay_after_failure': {'key': 'scale-down-delay-after-failure', 'type': 'str'}, + 'scale_down_unneeded_time': {'key': 'scale-down-unneeded-time', 'type': 'str'}, + 'scale_down_unready_time': {'key': 'scale-down-unready-time', 'type': 'str'}, + 'scale_down_utilization_threshold': {'key': 'scale-down-utilization-threshold', 'type': 'str'}, + 'skip_nodes_with_local_storage': {'key': 'skip-nodes-with-local-storage', 'type': 'str'}, + 'skip_nodes_with_system_pods': {'key': 'skip-nodes-with-system-pods', 'type': 'str'}, + } + + def __init__( + self, + *, + balance_similar_node_groups: Optional[str] = None, + expander: Optional[Union[str, "_models.Expander"]] = None, + max_empty_bulk_delete: Optional[str] = None, + max_graceful_termination_sec: Optional[str] = None, + max_node_provision_time: Optional[str] = None, + max_total_unready_percentage: Optional[str] = None, + new_pod_scale_up_delay: Optional[str] = None, + ok_total_unready_count: Optional[str] = None, + scan_interval: Optional[str] = None, + scale_down_delay_after_add: Optional[str] = None, + scale_down_delay_after_delete: Optional[str] = None, + scale_down_delay_after_failure: Optional[str] = None, + scale_down_unneeded_time: Optional[str] = None, + scale_down_unready_time: Optional[str] = None, + scale_down_utilization_threshold: Optional[str] = None, + skip_nodes_with_local_storage: Optional[str] = None, + skip_nodes_with_system_pods: Optional[str] = None, + **kwargs + ): + """ + :keyword balance_similar_node_groups: Valid values are 'true' and 'false'. + :paramtype balance_similar_node_groups: str + :keyword expander: If not specified, the default is 'random'. See `expanders + `_ + for more information. Known values are: "least-waste", "most-pods", "priority", "random". + :paramtype expander: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Expander + :keyword max_empty_bulk_delete: The default is 10. + :paramtype max_empty_bulk_delete: str + :keyword max_graceful_termination_sec: The default is 600. + :paramtype max_graceful_termination_sec: str + :keyword max_node_provision_time: The default is '15m'. Values must be an integer followed by + an 'm'. No unit of time other than minutes (m) is supported. + :paramtype max_node_provision_time: str + :keyword max_total_unready_percentage: The default is 45. The maximum is 100 and the minimum is + 0. + :paramtype max_total_unready_percentage: str + :keyword new_pod_scale_up_delay: For scenarios like burst/batch scale where you don't want CA + to act before the kubernetes scheduler could schedule all the pods, you can tell CA to ignore + unscheduled pods before they're a certain age. The default is '0s'. Values must be an integer + followed by a unit ('s' for seconds, 'm' for minutes, 'h' for hours, etc). + :paramtype new_pod_scale_up_delay: str + :keyword ok_total_unready_count: This must be an integer. The default is 3. + :paramtype ok_total_unready_count: str + :keyword scan_interval: The default is '10'. Values must be an integer number of seconds. + :paramtype scan_interval: str + :keyword scale_down_delay_after_add: The default is '10m'. Values must be an integer followed + by an 'm'. No unit of time other than minutes (m) is supported. + :paramtype scale_down_delay_after_add: str + :keyword scale_down_delay_after_delete: The default is the scan-interval. Values must be an + integer followed by an 'm'. No unit of time other than minutes (m) is supported. + :paramtype scale_down_delay_after_delete: str + :keyword scale_down_delay_after_failure: The default is '3m'. Values must be an integer + followed by an 'm'. No unit of time other than minutes (m) is supported. + :paramtype scale_down_delay_after_failure: str + :keyword scale_down_unneeded_time: The default is '10m'. Values must be an integer followed by + an 'm'. No unit of time other than minutes (m) is supported. + :paramtype scale_down_unneeded_time: str + :keyword scale_down_unready_time: The default is '20m'. Values must be an integer followed by + an 'm'. No unit of time other than minutes (m) is supported. + :paramtype scale_down_unready_time: str + :keyword scale_down_utilization_threshold: The default is '0.5'. + :paramtype scale_down_utilization_threshold: str + :keyword skip_nodes_with_local_storage: The default is true. + :paramtype skip_nodes_with_local_storage: str + :keyword skip_nodes_with_system_pods: The default is true. + :paramtype skip_nodes_with_system_pods: str + """ + super(ManagedClusterPropertiesAutoScalerProfile, self).__init__(**kwargs) + self.balance_similar_node_groups = balance_similar_node_groups + self.expander = expander + self.max_empty_bulk_delete = max_empty_bulk_delete + self.max_graceful_termination_sec = max_graceful_termination_sec + self.max_node_provision_time = max_node_provision_time + self.max_total_unready_percentage = max_total_unready_percentage + self.new_pod_scale_up_delay = new_pod_scale_up_delay + self.ok_total_unready_count = ok_total_unready_count + self.scan_interval = scan_interval + self.scale_down_delay_after_add = scale_down_delay_after_add + self.scale_down_delay_after_delete = scale_down_delay_after_delete + self.scale_down_delay_after_failure = scale_down_delay_after_failure + self.scale_down_unneeded_time = scale_down_unneeded_time + self.scale_down_unready_time = scale_down_unready_time + self.scale_down_utilization_threshold = scale_down_utilization_threshold + self.skip_nodes_with_local_storage = skip_nodes_with_local_storage + self.skip_nodes_with_system_pods = skip_nodes_with_system_pods + + +class ManagedClusterPropertiesForSnapshot(msrest.serialization.Model): + """managed cluster properties for snapshot, these properties are read only. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar kubernetes_version: The current kubernetes version. + :vartype kubernetes_version: str + :ivar sku: The current managed cluster sku. + :vartype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :ivar enable_rbac: Whether the cluster has enabled Kubernetes Role-Based Access Control or not. + :vartype enable_rbac: bool + :ivar network_profile: The current network profile. + :vartype network_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkProfileForSnapshot + """ + + _validation = { + 'network_profile': {'readonly': True}, + } + + _attribute_map = { + 'kubernetes_version': {'key': 'kubernetesVersion', 'type': 'str'}, + 'sku': {'key': 'sku', 'type': 'ManagedClusterSKU'}, + 'enable_rbac': {'key': 'enableRbac', 'type': 'bool'}, + 'network_profile': {'key': 'networkProfile', 'type': 'NetworkProfileForSnapshot'}, + } + + def __init__( + self, + *, + kubernetes_version: Optional[str] = None, + sku: Optional["_models.ManagedClusterSKU"] = None, + enable_rbac: Optional[bool] = None, + **kwargs + ): + """ + :keyword kubernetes_version: The current kubernetes version. + :paramtype kubernetes_version: str + :keyword sku: The current managed cluster sku. + :paramtype sku: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKU + :keyword enable_rbac: Whether the cluster has enabled Kubernetes Role-Based Access Control or + not. + :paramtype enable_rbac: bool + """ + super(ManagedClusterPropertiesForSnapshot, self).__init__(**kwargs) + self.kubernetes_version = kubernetes_version + self.sku = sku + self.enable_rbac = enable_rbac + self.network_profile = None + + +class ManagedClusterSecurityProfile(msrest.serialization.Model): + """Security profile for the container service cluster. + + :ivar defender: Microsoft Defender settings for the security profile. + :vartype defender: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefender + :ivar azure_key_vault_kms: Azure Key Vault `key management service + `_ settings for the security + profile. + :vartype azure_key_vault_kms: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AzureKeyVaultKms + :ivar workload_identity: `Workload Identity + `_ settings for the security profile. + :vartype workload_identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + :ivar node_restriction: `Node Restriction + `_ + settings for the security profile. + :vartype node_restriction: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileNodeRestriction + """ + + _attribute_map = { + 'defender': {'key': 'defender', 'type': 'ManagedClusterSecurityProfileDefender'}, + 'azure_key_vault_kms': {'key': 'azureKeyVaultKms', 'type': 'AzureKeyVaultKms'}, + 'workload_identity': {'key': 'workloadIdentity', 'type': 'ManagedClusterSecurityProfileWorkloadIdentity'}, + 'node_restriction': {'key': 'nodeRestriction', 'type': 'ManagedClusterSecurityProfileNodeRestriction'}, + } + + def __init__( + self, + *, + defender: Optional["_models.ManagedClusterSecurityProfileDefender"] = None, + azure_key_vault_kms: Optional["_models.AzureKeyVaultKms"] = None, + workload_identity: Optional["_models.ManagedClusterSecurityProfileWorkloadIdentity"] = None, + node_restriction: Optional["_models.ManagedClusterSecurityProfileNodeRestriction"] = None, + **kwargs + ): + """ + :keyword defender: Microsoft Defender settings for the security profile. + :paramtype defender: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefender + :keyword azure_key_vault_kms: Azure Key Vault `key management service + `_ settings for the security + profile. + :paramtype azure_key_vault_kms: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.AzureKeyVaultKms + :keyword workload_identity: `Workload Identity + `_ settings for the security profile. + :paramtype workload_identity: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + :keyword node_restriction: `Node Restriction + `_ + settings for the security profile. + :paramtype node_restriction: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileNodeRestriction + """ + super(ManagedClusterSecurityProfile, self).__init__(**kwargs) + self.defender = defender + self.azure_key_vault_kms = azure_key_vault_kms + self.workload_identity = workload_identity + self.node_restriction = node_restriction + + +class ManagedClusterSecurityProfileDefender(msrest.serialization.Model): + """Microsoft Defender settings for the security profile. + + :ivar log_analytics_workspace_resource_id: Resource ID of the Log Analytics workspace to be + associated with Microsoft Defender. When Microsoft Defender is enabled, this field is required + and must be a valid workspace resource ID. When Microsoft Defender is disabled, leave the field + empty. + :vartype log_analytics_workspace_resource_id: str + :ivar security_monitoring: Microsoft Defender threat detection for Cloud settings for the + security profile. + :vartype security_monitoring: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring + """ + + _attribute_map = { + 'log_analytics_workspace_resource_id': {'key': 'logAnalyticsWorkspaceResourceId', 'type': 'str'}, + 'security_monitoring': {'key': 'securityMonitoring', 'type': 'ManagedClusterSecurityProfileDefenderSecurityMonitoring'}, + } + + def __init__( + self, + *, + log_analytics_workspace_resource_id: Optional[str] = None, + security_monitoring: Optional["_models.ManagedClusterSecurityProfileDefenderSecurityMonitoring"] = None, + **kwargs + ): + """ + :keyword log_analytics_workspace_resource_id: Resource ID of the Log Analytics workspace to be + associated with Microsoft Defender. When Microsoft Defender is enabled, this field is required + and must be a valid workspace resource ID. When Microsoft Defender is disabled, leave the field + empty. + :paramtype log_analytics_workspace_resource_id: str + :keyword security_monitoring: Microsoft Defender threat detection for Cloud settings for the + security profile. + :paramtype security_monitoring: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSecurityProfileDefenderSecurityMonitoring + """ + super(ManagedClusterSecurityProfileDefender, self).__init__(**kwargs) + self.log_analytics_workspace_resource_id = log_analytics_workspace_resource_id + self.security_monitoring = security_monitoring + + +class ManagedClusterSecurityProfileDefenderSecurityMonitoring(msrest.serialization.Model): + """Microsoft Defender settings for the security profile threat detection. + + :ivar enabled: Whether to enable Defender threat detection. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Defender threat detection. + :paramtype enabled: bool + """ + super(ManagedClusterSecurityProfileDefenderSecurityMonitoring, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterSecurityProfileNodeRestriction(msrest.serialization.Model): + """Node Restriction settings for the security profile. + + :ivar enabled: Whether to enable Node Restriction. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Node Restriction. + :paramtype enabled: bool + """ + super(ManagedClusterSecurityProfileNodeRestriction, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterSecurityProfileWorkloadIdentity(msrest.serialization.Model): + """Workload Identity settings for the security profile. + + :ivar enabled: Whether to enable Workload Identity. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Workload Identity. + :paramtype enabled: bool + """ + super(ManagedClusterSecurityProfileWorkloadIdentity, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterServicePrincipalProfile(msrest.serialization.Model): + """Information about a service principal identity for the cluster to use for manipulating Azure APIs. + + All required parameters must be populated in order to send to Azure. + + :ivar client_id: Required. The ID for the service principal. + :vartype client_id: str + :ivar secret: The secret password associated with the service principal in plain text. + :vartype secret: str + """ + + _validation = { + 'client_id': {'required': True}, + } + + _attribute_map = { + 'client_id': {'key': 'clientId', 'type': 'str'}, + 'secret': {'key': 'secret', 'type': 'str'}, + } + + def __init__( + self, + *, + client_id: str, + secret: Optional[str] = None, + **kwargs + ): + """ + :keyword client_id: Required. The ID for the service principal. + :paramtype client_id: str + :keyword secret: The secret password associated with the service principal in plain text. + :paramtype secret: str + """ + super(ManagedClusterServicePrincipalProfile, self).__init__(**kwargs) + self.client_id = client_id + self.secret = secret + + +class ManagedClusterSKU(msrest.serialization.Model): + """The SKU of a Managed Cluster. + + :ivar name: The name of a managed cluster SKU. Known values are: "Basic". + :vartype name: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUName + :ivar tier: If not specified, the default is 'Free'. See `uptime SLA + `_ for more details. Known values are: "Paid", + "Free". + :vartype tier: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUTier + """ + + _attribute_map = { + 'name': {'key': 'name', 'type': 'str'}, + 'tier': {'key': 'tier', 'type': 'str'}, + } + + def __init__( + self, + *, + name: Optional[Union[str, "_models.ManagedClusterSKUName"]] = None, + tier: Optional[Union[str, "_models.ManagedClusterSKUTier"]] = None, + **kwargs + ): + """ + :keyword name: The name of a managed cluster SKU. Known values are: "Basic". + :paramtype name: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUName + :keyword tier: If not specified, the default is 'Free'. See `uptime SLA + `_ for more details. Known values are: "Paid", + "Free". + :paramtype tier: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSKUTier + """ + super(ManagedClusterSKU, self).__init__(**kwargs) + self.name = name + self.tier = tier + + +class ManagedClusterSnapshot(TrackedResource): + """A managed cluster snapshot resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + :ivar creation_data: CreationData to be used to specify the source resource ID to create this + snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar snapshot_type: The type of a snapshot. The default is NodePool. Known values are: + "NodePool", "ManagedCluster". Default value: "NodePool". + :vartype snapshot_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + :ivar managed_cluster_properties_read_only: What the properties will be showed when getting + managed cluster snapshot. Those properties are read-only. + :vartype managed_cluster_properties_read_only: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPropertiesForSnapshot + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + 'managed_cluster_properties_read_only': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'}, + 'snapshot_type': {'key': 'properties.snapshotType', 'type': 'str'}, + 'managed_cluster_properties_read_only': {'key': 'properties.managedClusterPropertiesReadOnly', 'type': 'ManagedClusterPropertiesForSnapshot'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + creation_data: Optional["_models.CreationData"] = None, + snapshot_type: Optional[Union[str, "_models.SnapshotType"]] = "NodePool", + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + :keyword creation_data: CreationData to be used to specify the source resource ID to create + this snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword snapshot_type: The type of a snapshot. The default is NodePool. Known values are: + "NodePool", "ManagedCluster". Default value: "NodePool". + :paramtype snapshot_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + """ + super(ManagedClusterSnapshot, self).__init__(tags=tags, location=location, **kwargs) + self.creation_data = creation_data + self.snapshot_type = snapshot_type + self.managed_cluster_properties_read_only = None + + +class ManagedClusterSnapshotListResult(msrest.serialization.Model): + """The response from the List Managed Cluster Snapshots operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of managed cluster snapshots. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot] + :ivar next_link: The URL to get the next set of managed cluster snapshot results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[ManagedClusterSnapshot]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.ManagedClusterSnapshot"]] = None, + **kwargs + ): + """ + :keyword value: The list of managed cluster snapshots. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot] + """ + super(ManagedClusterSnapshotListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class ManagedClusterStorageProfile(msrest.serialization.Model): + """Storage profile for the container service cluster. + + :ivar disk_csi_driver: AzureDisk CSI Driver settings for the storage profile. + :vartype disk_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver + :ivar file_csi_driver: AzureFile CSI Driver settings for the storage profile. + :vartype file_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileFileCSIDriver + :ivar snapshot_controller: Snapshot Controller settings for the storage profile. + :vartype snapshot_controller: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileSnapshotController + :ivar blob_csi_driver: AzureBlob CSI Driver settings for the storage profile. + :vartype blob_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver + """ + + _attribute_map = { + 'disk_csi_driver': {'key': 'diskCSIDriver', 'type': 'ManagedClusterStorageProfileDiskCSIDriver'}, + 'file_csi_driver': {'key': 'fileCSIDriver', 'type': 'ManagedClusterStorageProfileFileCSIDriver'}, + 'snapshot_controller': {'key': 'snapshotController', 'type': 'ManagedClusterStorageProfileSnapshotController'}, + 'blob_csi_driver': {'key': 'blobCSIDriver', 'type': 'ManagedClusterStorageProfileBlobCSIDriver'}, + } + + def __init__( + self, + *, + disk_csi_driver: Optional["_models.ManagedClusterStorageProfileDiskCSIDriver"] = None, + file_csi_driver: Optional["_models.ManagedClusterStorageProfileFileCSIDriver"] = None, + snapshot_controller: Optional["_models.ManagedClusterStorageProfileSnapshotController"] = None, + blob_csi_driver: Optional["_models.ManagedClusterStorageProfileBlobCSIDriver"] = None, + **kwargs + ): + """ + :keyword disk_csi_driver: AzureDisk CSI Driver settings for the storage profile. + :paramtype disk_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileDiskCSIDriver + :keyword file_csi_driver: AzureFile CSI Driver settings for the storage profile. + :paramtype file_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileFileCSIDriver + :keyword snapshot_controller: Snapshot Controller settings for the storage profile. + :paramtype snapshot_controller: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileSnapshotController + :keyword blob_csi_driver: AzureBlob CSI Driver settings for the storage profile. + :paramtype blob_csi_driver: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterStorageProfileBlobCSIDriver + """ + super(ManagedClusterStorageProfile, self).__init__(**kwargs) + self.disk_csi_driver = disk_csi_driver + self.file_csi_driver = file_csi_driver + self.snapshot_controller = snapshot_controller + self.blob_csi_driver = blob_csi_driver + + +class ManagedClusterStorageProfileBlobCSIDriver(msrest.serialization.Model): + """AzureBlob CSI Driver settings for the storage profile. + + :ivar enabled: Whether to enable AzureBlob CSI Driver. The default value is false. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable AzureBlob CSI Driver. The default value is false. + :paramtype enabled: bool + """ + super(ManagedClusterStorageProfileBlobCSIDriver, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterStorageProfileDiskCSIDriver(msrest.serialization.Model): + """AzureDisk CSI Driver settings for the storage profile. + + :ivar enabled: Whether to enable AzureDisk CSI Driver. The default value is true. + :vartype enabled: bool + :ivar version: The version of AzureDisk CSI Driver. The default value is v1. + :vartype version: str + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'version': {'key': 'version', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + version: Optional[str] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable AzureDisk CSI Driver. The default value is true. + :paramtype enabled: bool + :keyword version: The version of AzureDisk CSI Driver. The default value is v1. + :paramtype version: str + """ + super(ManagedClusterStorageProfileDiskCSIDriver, self).__init__(**kwargs) + self.enabled = enabled + self.version = version + + +class ManagedClusterStorageProfileFileCSIDriver(msrest.serialization.Model): + """AzureFile CSI Driver settings for the storage profile. + + :ivar enabled: Whether to enable AzureFile CSI Driver. The default value is true. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable AzureFile CSI Driver. The default value is true. + :paramtype enabled: bool + """ + super(ManagedClusterStorageProfileFileCSIDriver, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterStorageProfileSnapshotController(msrest.serialization.Model): + """Snapshot Controller settings for the storage profile. + + :ivar enabled: Whether to enable Snapshot Controller. The default value is true. + :vartype enabled: bool + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable Snapshot Controller. The default value is true. + :paramtype enabled: bool + """ + super(ManagedClusterStorageProfileSnapshotController, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedClusterUpgradeProfile(msrest.serialization.Model): + """The list of available upgrades for compute pools. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The ID of the upgrade profile. + :vartype id: str + :ivar name: The name of the upgrade profile. + :vartype name: str + :ivar type: The type of the upgrade profile. + :vartype type: str + :ivar control_plane_profile: Required. The list of available upgrade versions for the control + plane. + :vartype control_plane_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile + :ivar agent_pool_profiles: Required. The list of available upgrade versions for agent pools. + :vartype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'control_plane_profile': {'required': True}, + 'agent_pool_profiles': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'control_plane_profile': {'key': 'properties.controlPlaneProfile', 'type': 'ManagedClusterPoolUpgradeProfile'}, + 'agent_pool_profiles': {'key': 'properties.agentPoolProfiles', 'type': '[ManagedClusterPoolUpgradeProfile]'}, + } + + def __init__( + self, + *, + control_plane_profile: "_models.ManagedClusterPoolUpgradeProfile", + agent_pool_profiles: List["_models.ManagedClusterPoolUpgradeProfile"], + **kwargs + ): + """ + :keyword control_plane_profile: Required. The list of available upgrade versions for the + control plane. + :paramtype control_plane_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile + :keyword agent_pool_profiles: Required. The list of available upgrade versions for agent pools. + :paramtype agent_pool_profiles: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterPoolUpgradeProfile] + """ + super(ManagedClusterUpgradeProfile, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.control_plane_profile = control_plane_profile + self.agent_pool_profiles = agent_pool_profiles + + +class ManagedClusterWindowsProfile(msrest.serialization.Model): + """Profile for Windows VMs in the managed cluster. + + All required parameters must be populated in order to send to Azure. + + :ivar admin_username: Required. Specifies the name of the administrator account. + :code:`
`:code:`
` **Restriction:** Cannot end in "." :code:`
`:code:`
` + **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", + "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", + "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", + "sys", "test2", "test3", "user4", "user5". :code:`
`:code:`
` **Minimum-length:** 1 + character :code:`
`:code:`
` **Max-length:** 20 characters. + :vartype admin_username: str + :ivar admin_password: Specifies the password of the administrator account. + :code:`
`:code:`
` **Minimum-length:** 8 characters :code:`
`:code:`
` + **Max-length:** 123 characters :code:`
`:code:`
` **Complexity requirements:** 3 out of 4 + conditions below need to be fulfilled :code:`
` Has lower characters :code:`
`Has upper + characters :code:`
` Has a digit :code:`
` Has a special character (Regex match [\W_]) + :code:`
`:code:`
` **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", + "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!". + :vartype admin_password: str + :ivar license_type: The license type to use for Windows VMs. See `Azure Hybrid User Benefits + `_ for more details. Known values are: + "None", "Windows_Server". + :vartype license_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LicenseType + :ivar enable_csi_proxy: For more details on CSI proxy, see the `CSI proxy GitHub repo + `_. + :vartype enable_csi_proxy: bool + :ivar gmsa_profile: The Windows gMSA Profile in the Managed Cluster. + :vartype gmsa_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WindowsGmsaProfile + """ + + _validation = { + 'admin_username': {'required': True}, + } + + _attribute_map = { + 'admin_username': {'key': 'adminUsername', 'type': 'str'}, + 'admin_password': {'key': 'adminPassword', 'type': 'str'}, + 'license_type': {'key': 'licenseType', 'type': 'str'}, + 'enable_csi_proxy': {'key': 'enableCSIProxy', 'type': 'bool'}, + 'gmsa_profile': {'key': 'gmsaProfile', 'type': 'WindowsGmsaProfile'}, + } + + def __init__( + self, + *, + admin_username: str, + admin_password: Optional[str] = None, + license_type: Optional[Union[str, "_models.LicenseType"]] = None, + enable_csi_proxy: Optional[bool] = None, + gmsa_profile: Optional["_models.WindowsGmsaProfile"] = None, + **kwargs + ): + """ + :keyword admin_username: Required. Specifies the name of the administrator account. + :code:`
`:code:`
` **Restriction:** Cannot end in "." :code:`
`:code:`
` + **Disallowed values:** "administrator", "admin", "user", "user1", "test", "user2", "test1", + "user3", "admin1", "1", "123", "a", "actuser", "adm", "admin2", "aspnet", "backup", "console", + "david", "guest", "john", "owner", "root", "server", "sql", "support", "support_388945a0", + "sys", "test2", "test3", "user4", "user5". :code:`
`:code:`
` **Minimum-length:** 1 + character :code:`
`:code:`
` **Max-length:** 20 characters. + :paramtype admin_username: str + :keyword admin_password: Specifies the password of the administrator account. + :code:`
`:code:`
` **Minimum-length:** 8 characters :code:`
`:code:`
` + **Max-length:** 123 characters :code:`
`:code:`
` **Complexity requirements:** 3 out of 4 + conditions below need to be fulfilled :code:`
` Has lower characters :code:`
`Has upper + characters :code:`
` Has a digit :code:`
` Has a special character (Regex match [\W_]) + :code:`
`:code:`
` **Disallowed values:** "abc@123", "P@$$w0rd", "P@ssw0rd", + "P@ssword123", "Pa$$word", "pass@word1", "Password!", "Password1", "Password22", "iloveyou!". + :paramtype admin_password: str + :keyword license_type: The license type to use for Windows VMs. See `Azure Hybrid User Benefits + `_ for more details. Known values are: + "None", "Windows_Server". + :paramtype license_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LicenseType + :keyword enable_csi_proxy: For more details on CSI proxy, see the `CSI proxy GitHub repo + `_. + :paramtype enable_csi_proxy: bool + :keyword gmsa_profile: The Windows gMSA Profile in the Managed Cluster. + :paramtype gmsa_profile: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.WindowsGmsaProfile + """ + super(ManagedClusterWindowsProfile, self).__init__(**kwargs) + self.admin_username = admin_username + self.admin_password = admin_password + self.license_type = license_type + self.enable_csi_proxy = enable_csi_proxy + self.gmsa_profile = gmsa_profile + + +class ManagedClusterWorkloadAutoScalerProfile(msrest.serialization.Model): + """Workload Auto-scaler profile for the container service cluster. + + :ivar keda: KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler + profile. + :vartype keda: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + """ + + _attribute_map = { + 'keda': {'key': 'keda', 'type': 'ManagedClusterWorkloadAutoScalerProfileKeda'}, + } + + def __init__( + self, + *, + keda: Optional["_models.ManagedClusterWorkloadAutoScalerProfileKeda"] = None, + **kwargs + ): + """ + :keyword keda: KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler + profile. + :paramtype keda: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterWorkloadAutoScalerProfileKeda + """ + super(ManagedClusterWorkloadAutoScalerProfile, self).__init__(**kwargs) + self.keda = keda + + +class ManagedClusterWorkloadAutoScalerProfileKeda(msrest.serialization.Model): + """KEDA (Kubernetes Event-driven Autoscaling) settings for the workload auto-scaler profile. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether to enable KEDA. + :vartype enabled: bool + """ + + _validation = { + 'enabled': {'required': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + } + + def __init__( + self, + *, + enabled: bool, + **kwargs + ): + """ + :keyword enabled: Required. Whether to enable KEDA. + :paramtype enabled: bool + """ + super(ManagedClusterWorkloadAutoScalerProfileKeda, self).__init__(**kwargs) + self.enabled = enabled + + +class ManagedServiceIdentityUserAssignedIdentitiesValue(msrest.serialization.Model): + """ManagedServiceIdentityUserAssignedIdentitiesValue. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar principal_id: The principal id of user assigned identity. + :vartype principal_id: str + :ivar client_id: The client id of user assigned identity. + :vartype client_id: str + """ + + _validation = { + 'principal_id': {'readonly': True}, + 'client_id': {'readonly': True}, + } + + _attribute_map = { + 'principal_id': {'key': 'principalId', 'type': 'str'}, + 'client_id': {'key': 'clientId', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(ManagedServiceIdentityUserAssignedIdentitiesValue, self).__init__(**kwargs) + self.principal_id = None + self.client_id = None + + +class NetworkProfileForSnapshot(msrest.serialization.Model): + """network profile for managed cluster snapshot, these properties are read only. + + :ivar network_plugin: networkPlugin for managed cluster snapshot. Known values are: "azure", + "kubenet", "none". Default value: "kubenet". + :vartype network_plugin: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + :ivar network_plugin_mode: NetworkPluginMode for managed cluster snapshot. Known values are: + "Overlay". + :vartype network_plugin_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + :ivar network_policy: networkPolicy for managed cluster snapshot. Known values are: "calico", + "azure". + :vartype network_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + :ivar network_mode: networkMode for managed cluster snapshot. Known values are: "transparent", + "bridge". + :vartype network_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + :ivar load_balancer_sku: loadBalancerSku for managed cluster snapshot. Known values are: + "standard", "basic". + :vartype load_balancer_sku: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + """ + + _attribute_map = { + 'network_plugin': {'key': 'networkPlugin', 'type': 'str'}, + 'network_plugin_mode': {'key': 'networkPluginMode', 'type': 'str'}, + 'network_policy': {'key': 'networkPolicy', 'type': 'str'}, + 'network_mode': {'key': 'networkMode', 'type': 'str'}, + 'load_balancer_sku': {'key': 'loadBalancerSku', 'type': 'str'}, + } + + def __init__( + self, + *, + network_plugin: Optional[Union[str, "_models.NetworkPlugin"]] = "kubenet", + network_plugin_mode: Optional[Union[str, "_models.NetworkPluginMode"]] = None, + network_policy: Optional[Union[str, "_models.NetworkPolicy"]] = None, + network_mode: Optional[Union[str, "_models.NetworkMode"]] = None, + load_balancer_sku: Optional[Union[str, "_models.LoadBalancerSku"]] = None, + **kwargs + ): + """ + :keyword network_plugin: networkPlugin for managed cluster snapshot. Known values are: "azure", + "kubenet", "none". Default value: "kubenet". + :paramtype network_plugin: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPlugin + :keyword network_plugin_mode: NetworkPluginMode for managed cluster snapshot. Known values are: + "Overlay". + :paramtype network_plugin_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPluginMode + :keyword network_policy: networkPolicy for managed cluster snapshot. Known values are: + "calico", "azure". + :paramtype network_policy: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkPolicy + :keyword network_mode: networkMode for managed cluster snapshot. Known values are: + "transparent", "bridge". + :paramtype network_mode: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.NetworkMode + :keyword load_balancer_sku: loadBalancerSku for managed cluster snapshot. Known values are: + "standard", "basic". + :paramtype load_balancer_sku: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.LoadBalancerSku + """ + super(NetworkProfileForSnapshot, self).__init__(**kwargs) + self.network_plugin = network_plugin + self.network_plugin_mode = network_plugin_mode + self.network_policy = network_policy + self.network_mode = network_mode + self.load_balancer_sku = load_balancer_sku + + +class OperationListResult(msrest.serialization.Model): + """The List Operation response. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of operations. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.OperationValue] + """ + + _validation = { + 'value': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OperationValue]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(OperationListResult, self).__init__(**kwargs) + self.value = None + + +class OperationValue(msrest.serialization.Model): + """Describes the properties of a Operation value. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar origin: The origin of the operation. + :vartype origin: str + :ivar name: The name of the operation. + :vartype name: str + :ivar operation: The display name of the operation. + :vartype operation: str + :ivar resource: The display name of the resource the operation applies to. + :vartype resource: str + :ivar description: The description of the operation. + :vartype description: str + :ivar provider: The resource provider for the operation. + :vartype provider: str + """ + + _validation = { + 'origin': {'readonly': True}, + 'name': {'readonly': True}, + 'operation': {'readonly': True}, + 'resource': {'readonly': True}, + 'description': {'readonly': True}, + 'provider': {'readonly': True}, + } + + _attribute_map = { + 'origin': {'key': 'origin', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'operation': {'key': 'display.operation', 'type': 'str'}, + 'resource': {'key': 'display.resource', 'type': 'str'}, + 'description': {'key': 'display.description', 'type': 'str'}, + 'provider': {'key': 'display.provider', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(OperationValue, self).__init__(**kwargs) + self.origin = None + self.name = None + self.operation = None + self.resource = None + self.description = None + self.provider = None + + +class OSOptionProfile(msrest.serialization.Model): + """The OS option profile. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: The ID of the OS option resource. + :vartype id: str + :ivar name: The name of the OS option resource. + :vartype name: str + :ivar type: The type of the OS option resource. + :vartype type: str + :ivar os_option_property_list: Required. The list of OS options. + :vartype os_option_property_list: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProperty] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'os_option_property_list': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'os_option_property_list': {'key': 'properties.osOptionPropertyList', 'type': '[OSOptionProperty]'}, + } + + def __init__( + self, + *, + os_option_property_list: List["_models.OSOptionProperty"], + **kwargs + ): + """ + :keyword os_option_property_list: Required. The list of OS options. + :paramtype os_option_property_list: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProperty] + """ + super(OSOptionProfile, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.os_option_property_list = os_option_property_list + + +class OSOptionProperty(msrest.serialization.Model): + """OS option property. + + All required parameters must be populated in order to send to Azure. + + :ivar os_type: Required. The OS type. + :vartype os_type: str + :ivar enable_fips_image: Required. Whether the image is FIPS-enabled. + :vartype enable_fips_image: bool + """ + + _validation = { + 'os_type': {'required': True}, + 'enable_fips_image': {'required': True}, + } + + _attribute_map = { + 'os_type': {'key': 'os-type', 'type': 'str'}, + 'enable_fips_image': {'key': 'enable-fips-image', 'type': 'bool'}, + } + + def __init__( + self, + *, + os_type: str, + enable_fips_image: bool, + **kwargs + ): + """ + :keyword os_type: Required. The OS type. + :paramtype os_type: str + :keyword enable_fips_image: Required. Whether the image is FIPS-enabled. + :paramtype enable_fips_image: bool + """ + super(OSOptionProperty, self).__init__(**kwargs) + self.os_type = os_type + self.enable_fips_image = enable_fips_image + + +class OutboundEnvironmentEndpoint(msrest.serialization.Model): + """Egress endpoints which AKS agent nodes connect to for common purpose. + + :ivar category: The category of endpoints accessed by the AKS agent node, e.g. + azure-resource-management, apiserver, etc. + :vartype category: str + :ivar endpoints: The endpoints that AKS agent nodes connect to. + :vartype endpoints: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDependency] + """ + + _attribute_map = { + 'category': {'key': 'category', 'type': 'str'}, + 'endpoints': {'key': 'endpoints', 'type': '[EndpointDependency]'}, + } + + def __init__( + self, + *, + category: Optional[str] = None, + endpoints: Optional[List["_models.EndpointDependency"]] = None, + **kwargs + ): + """ + :keyword category: The category of endpoints accessed by the AKS agent node, e.g. + azure-resource-management, apiserver, etc. + :paramtype category: str + :keyword endpoints: The endpoints that AKS agent nodes connect to. + :paramtype endpoints: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.EndpointDependency] + """ + super(OutboundEnvironmentEndpoint, self).__init__(**kwargs) + self.category = category + self.endpoints = endpoints + + +class OutboundEnvironmentEndpointCollection(msrest.serialization.Model): + """Collection of OutboundEnvironmentEndpoint. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar value: Required. Collection of resources. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpoint] + :ivar next_link: Link to next page of resources. + :vartype next_link: str + """ + + _validation = { + 'value': {'required': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[OutboundEnvironmentEndpoint]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: List["_models.OutboundEnvironmentEndpoint"], + **kwargs + ): + """ + :keyword value: Required. Collection of resources. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpoint] + """ + super(OutboundEnvironmentEndpointCollection, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class PowerState(msrest.serialization.Model): + """Describes the Power State of the cluster. + + :ivar code: Tells whether the cluster is Running or Stopped. Known values are: "Running", + "Stopped". + :vartype code: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Code + """ + + _attribute_map = { + 'code': {'key': 'code', 'type': 'str'}, + } + + def __init__( + self, + *, + code: Optional[Union[str, "_models.Code"]] = None, + **kwargs + ): + """ + :keyword code: Tells whether the cluster is Running or Stopped. Known values are: "Running", + "Stopped". + :paramtype code: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Code + """ + super(PowerState, self).__init__(**kwargs) + self.code = code + + +class PrivateEndpoint(msrest.serialization.Model): + """Private endpoint which a connection belongs to. + + :ivar id: The resource ID of the private endpoint. + :vartype id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + **kwargs + ): + """ + :keyword id: The resource ID of the private endpoint. + :paramtype id: str + """ + super(PrivateEndpoint, self).__init__(**kwargs) + self.id = id + + +class PrivateEndpointConnection(msrest.serialization.Model): + """A private endpoint connection. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The ID of the private endpoint connection. + :vartype id: str + :ivar name: The name of the private endpoint connection. + :vartype name: str + :ivar type: The resource type. + :vartype type: str + :ivar provisioning_state: The current provisioning state. Known values are: "Succeeded", + "Creating", "Deleting", "Failed". + :vartype provisioning_state: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnectionProvisioningState + :ivar private_endpoint: The resource of private endpoint. + :vartype private_endpoint: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpoint + :ivar private_link_service_connection_state: A collection of information about the state of the + connection between service consumer and provider. + :vartype private_link_service_connection_state: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkServiceConnectionState + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'private_endpoint': {'key': 'properties.privateEndpoint', 'type': 'PrivateEndpoint'}, + 'private_link_service_connection_state': {'key': 'properties.privateLinkServiceConnectionState', 'type': 'PrivateLinkServiceConnectionState'}, + } + + def __init__( + self, + *, + private_endpoint: Optional["_models.PrivateEndpoint"] = None, + private_link_service_connection_state: Optional["_models.PrivateLinkServiceConnectionState"] = None, + **kwargs + ): + """ + :keyword private_endpoint: The resource of private endpoint. + :paramtype private_endpoint: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpoint + :keyword private_link_service_connection_state: A collection of information about the state of + the connection between service consumer and provider. + :paramtype private_link_service_connection_state: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkServiceConnectionState + """ + super(PrivateEndpointConnection, self).__init__(**kwargs) + self.id = None + self.name = None + self.type = None + self.provisioning_state = None + self.private_endpoint = private_endpoint + self.private_link_service_connection_state = private_link_service_connection_state + + +class PrivateEndpointConnectionListResult(msrest.serialization.Model): + """A list of private endpoint connections. + + :ivar value: The collection value. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateEndpointConnection]'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.PrivateEndpointConnection"]] = None, + **kwargs + ): + """ + :keyword value: The collection value. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection] + """ + super(PrivateEndpointConnectionListResult, self).__init__(**kwargs) + self.value = value + + +class PrivateLinkResource(msrest.serialization.Model): + """A private link resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The ID of the private link resource. + :vartype id: str + :ivar name: The name of the private link resource. + :vartype name: str + :ivar type: The resource type. + :vartype type: str + :ivar group_id: The group ID of the resource. + :vartype group_id: str + :ivar required_members: The RequiredMembers of the resource. + :vartype required_members: list[str] + :ivar private_link_service_id: The private link service ID of the resource, this field is + exposed only to NRP internally. + :vartype private_link_service_id: str + """ + + _validation = { + 'private_link_service_id': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'group_id': {'key': 'groupId', 'type': 'str'}, + 'required_members': {'key': 'requiredMembers', 'type': '[str]'}, + 'private_link_service_id': {'key': 'privateLinkServiceID', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + name: Optional[str] = None, + type: Optional[str] = None, + group_id: Optional[str] = None, + required_members: Optional[List[str]] = None, + **kwargs + ): + """ + :keyword id: The ID of the private link resource. + :paramtype id: str + :keyword name: The name of the private link resource. + :paramtype name: str + :keyword type: The resource type. + :paramtype type: str + :keyword group_id: The group ID of the resource. + :paramtype group_id: str + :keyword required_members: The RequiredMembers of the resource. + :paramtype required_members: list[str] + """ + super(PrivateLinkResource, self).__init__(**kwargs) + self.id = id + self.name = name + self.type = type + self.group_id = group_id + self.required_members = required_members + self.private_link_service_id = None + + +class PrivateLinkResourcesListResult(msrest.serialization.Model): + """A list of private link resources. + + :ivar value: The collection value. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + """ + + _attribute_map = { + 'value': {'key': 'value', 'type': '[PrivateLinkResource]'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.PrivateLinkResource"]] = None, + **kwargs + ): + """ + :keyword value: The collection value. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource] + """ + super(PrivateLinkResourcesListResult, self).__init__(**kwargs) + self.value = value + + +class PrivateLinkServiceConnectionState(msrest.serialization.Model): + """The state of a private link service connection. + + :ivar status: The private link service connection status. Known values are: "Pending", + "Approved", "Rejected", "Disconnected". + :vartype status: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ConnectionStatus + :ivar description: The private link service connection description. + :vartype description: str + """ + + _attribute_map = { + 'status': {'key': 'status', 'type': 'str'}, + 'description': {'key': 'description', 'type': 'str'}, + } + + def __init__( + self, + *, + status: Optional[Union[str, "_models.ConnectionStatus"]] = None, + description: Optional[str] = None, + **kwargs + ): + """ + :keyword status: The private link service connection status. Known values are: "Pending", + "Approved", "Rejected", "Disconnected". + :paramtype status: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ConnectionStatus + :keyword description: The private link service connection description. + :paramtype description: str + """ + super(PrivateLinkServiceConnectionState, self).__init__(**kwargs) + self.status = status + self.description = description + + +class ResourceReference(msrest.serialization.Model): + """A reference to an Azure resource. + + :ivar id: The fully qualified Azure resource id. + :vartype id: str + """ + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + } + + def __init__( + self, + *, + id: Optional[str] = None, + **kwargs + ): + """ + :keyword id: The fully qualified Azure resource id. + :paramtype id: str + """ + super(ResourceReference, self).__init__(**kwargs) + self.id = id + + +class RunCommandRequest(msrest.serialization.Model): + """A run command request. + + All required parameters must be populated in order to send to Azure. + + :ivar command: Required. The command to run. + :vartype command: str + :ivar context: A base64 encoded zip file containing the files required by the command. + :vartype context: str + :ivar cluster_token: AuthToken issued for AKS AAD Server App. + :vartype cluster_token: str + """ + + _validation = { + 'command': {'required': True}, + } + + _attribute_map = { + 'command': {'key': 'command', 'type': 'str'}, + 'context': {'key': 'context', 'type': 'str'}, + 'cluster_token': {'key': 'clusterToken', 'type': 'str'}, + } + + def __init__( + self, + *, + command: str, + context: Optional[str] = None, + cluster_token: Optional[str] = None, + **kwargs + ): + """ + :keyword command: Required. The command to run. + :paramtype command: str + :keyword context: A base64 encoded zip file containing the files required by the command. + :paramtype context: str + :keyword cluster_token: AuthToken issued for AKS AAD Server App. + :paramtype cluster_token: str + """ + super(RunCommandRequest, self).__init__(**kwargs) + self.command = command + self.context = context + self.cluster_token = cluster_token + + +class RunCommandResult(msrest.serialization.Model): + """run command result. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar id: The command id. + :vartype id: str + :ivar provisioning_state: provisioning State. + :vartype provisioning_state: str + :ivar exit_code: The exit code of the command. + :vartype exit_code: int + :ivar started_at: The time when the command started. + :vartype started_at: ~datetime.datetime + :ivar finished_at: The time when the command finished. + :vartype finished_at: ~datetime.datetime + :ivar logs: The command output. + :vartype logs: str + :ivar reason: An explanation of why provisioningState is set to failed (if so). + :vartype reason: str + """ + + _validation = { + 'id': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'exit_code': {'readonly': True}, + 'started_at': {'readonly': True}, + 'finished_at': {'readonly': True}, + 'logs': {'readonly': True}, + 'reason': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'exit_code': {'key': 'properties.exitCode', 'type': 'int'}, + 'started_at': {'key': 'properties.startedAt', 'type': 'iso-8601'}, + 'finished_at': {'key': 'properties.finishedAt', 'type': 'iso-8601'}, + 'logs': {'key': 'properties.logs', 'type': 'str'}, + 'reason': {'key': 'properties.reason', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(RunCommandResult, self).__init__(**kwargs) + self.id = None + self.provisioning_state = None + self.exit_code = None + self.started_at = None + self.finished_at = None + self.logs = None + self.reason = None + + +class Snapshot(TrackedResource): + """A node pool snapshot resource. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + :ivar location: Required. The geo-location where the resource lives. + :vartype location: str + :ivar creation_data: CreationData to be used to specify the source agent pool resource ID to + create this snapshot. + :vartype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :ivar snapshot_type: The type of a snapshot. The default is NodePool. Known values are: + "NodePool", "ManagedCluster". Default value: "NodePool". + :vartype snapshot_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + :ivar kubernetes_version: The version of Kubernetes. + :vartype kubernetes_version: str + :ivar node_image_version: The version of node image. + :vartype node_image_version: str + :ivar os_type: The operating system type. The default is Linux. Known values are: "Linux", + "Windows". Default value: "Linux". + :vartype os_type: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSType + :ivar os_sku: Specifies the OS SKU used by the agent pool. If not specified, the default is + Ubuntu if OSType=Linux or Windows2019 if OSType=Windows. And the default Windows OSSKU will be + changed to Windows2022 after Windows2019 is deprecated. Known values are: "Ubuntu", + "CBLMariner", "Windows2019", "Windows2022". + :vartype os_sku: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSSKU + :ivar vm_size: The size of the VM. + :vartype vm_size: str + :ivar enable_fips: Whether to use a FIPS-enabled OS. + :vartype enable_fips: bool + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'location': {'required': True}, + 'kubernetes_version': {'readonly': True}, + 'node_image_version': {'readonly': True}, + 'os_type': {'readonly': True}, + 'os_sku': {'readonly': True}, + 'vm_size': {'readonly': True}, + 'enable_fips': {'readonly': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'tags': {'key': 'tags', 'type': '{str}'}, + 'location': {'key': 'location', 'type': 'str'}, + 'creation_data': {'key': 'properties.creationData', 'type': 'CreationData'}, + 'snapshot_type': {'key': 'properties.snapshotType', 'type': 'str'}, + 'kubernetes_version': {'key': 'properties.kubernetesVersion', 'type': 'str'}, + 'node_image_version': {'key': 'properties.nodeImageVersion', 'type': 'str'}, + 'os_type': {'key': 'properties.osType', 'type': 'str'}, + 'os_sku': {'key': 'properties.osSku', 'type': 'str'}, + 'vm_size': {'key': 'properties.vmSize', 'type': 'str'}, + 'enable_fips': {'key': 'properties.enableFIPS', 'type': 'bool'}, + } + + def __init__( + self, + *, + location: str, + tags: Optional[Dict[str, str]] = None, + creation_data: Optional["_models.CreationData"] = None, + snapshot_type: Optional[Union[str, "_models.SnapshotType"]] = "NodePool", + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + :keyword location: Required. The geo-location where the resource lives. + :paramtype location: str + :keyword creation_data: CreationData to be used to specify the source agent pool resource ID to + create this snapshot. + :paramtype creation_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreationData + :keyword snapshot_type: The type of a snapshot. The default is NodePool. Known values are: + "NodePool", "ManagedCluster". Default value: "NodePool". + :paramtype snapshot_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotType + """ + super(Snapshot, self).__init__(tags=tags, location=location, **kwargs) + self.creation_data = creation_data + self.snapshot_type = snapshot_type + self.kubernetes_version = None + self.node_image_version = None + self.os_type = None + self.os_sku = None + self.vm_size = None + self.enable_fips = None + + +class SnapshotListResult(msrest.serialization.Model): + """The response from the List Snapshots operation. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: The list of snapshots. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot] + :ivar next_link: The URL to get the next set of snapshot results. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[Snapshot]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.Snapshot"]] = None, + **kwargs + ): + """ + :keyword value: The list of snapshots. + :paramtype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot] + """ + super(SnapshotListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class SysctlConfig(msrest.serialization.Model): + """Sysctl settings for Linux agent nodes. + + :ivar net_core_somaxconn: Sysctl setting net.core.somaxconn. + :vartype net_core_somaxconn: int + :ivar net_core_netdev_max_backlog: Sysctl setting net.core.netdev_max_backlog. + :vartype net_core_netdev_max_backlog: int + :ivar net_core_rmem_default: Sysctl setting net.core.rmem_default. + :vartype net_core_rmem_default: int + :ivar net_core_rmem_max: Sysctl setting net.core.rmem_max. + :vartype net_core_rmem_max: int + :ivar net_core_wmem_default: Sysctl setting net.core.wmem_default. + :vartype net_core_wmem_default: int + :ivar net_core_wmem_max: Sysctl setting net.core.wmem_max. + :vartype net_core_wmem_max: int + :ivar net_core_optmem_max: Sysctl setting net.core.optmem_max. + :vartype net_core_optmem_max: int + :ivar net_ipv4_tcp_max_syn_backlog: Sysctl setting net.ipv4.tcp_max_syn_backlog. + :vartype net_ipv4_tcp_max_syn_backlog: int + :ivar net_ipv4_tcp_max_tw_buckets: Sysctl setting net.ipv4.tcp_max_tw_buckets. + :vartype net_ipv4_tcp_max_tw_buckets: int + :ivar net_ipv4_tcp_fin_timeout: Sysctl setting net.ipv4.tcp_fin_timeout. + :vartype net_ipv4_tcp_fin_timeout: int + :ivar net_ipv4_tcp_keepalive_time: Sysctl setting net.ipv4.tcp_keepalive_time. + :vartype net_ipv4_tcp_keepalive_time: int + :ivar net_ipv4_tcp_keepalive_probes: Sysctl setting net.ipv4.tcp_keepalive_probes. + :vartype net_ipv4_tcp_keepalive_probes: int + :ivar net_ipv4_tcpkeepalive_intvl: Sysctl setting net.ipv4.tcp_keepalive_intvl. + :vartype net_ipv4_tcpkeepalive_intvl: int + :ivar net_ipv4_tcp_tw_reuse: Sysctl setting net.ipv4.tcp_tw_reuse. + :vartype net_ipv4_tcp_tw_reuse: bool + :ivar net_ipv4_ip_local_port_range: Sysctl setting net.ipv4.ip_local_port_range. + :vartype net_ipv4_ip_local_port_range: str + :ivar net_ipv4_neigh_default_gc_thresh1: Sysctl setting net.ipv4.neigh.default.gc_thresh1. + :vartype net_ipv4_neigh_default_gc_thresh1: int + :ivar net_ipv4_neigh_default_gc_thresh2: Sysctl setting net.ipv4.neigh.default.gc_thresh2. + :vartype net_ipv4_neigh_default_gc_thresh2: int + :ivar net_ipv4_neigh_default_gc_thresh3: Sysctl setting net.ipv4.neigh.default.gc_thresh3. + :vartype net_ipv4_neigh_default_gc_thresh3: int + :ivar net_netfilter_nf_conntrack_max: Sysctl setting net.netfilter.nf_conntrack_max. + :vartype net_netfilter_nf_conntrack_max: int + :ivar net_netfilter_nf_conntrack_buckets: Sysctl setting net.netfilter.nf_conntrack_buckets. + :vartype net_netfilter_nf_conntrack_buckets: int + :ivar fs_inotify_max_user_watches: Sysctl setting fs.inotify.max_user_watches. + :vartype fs_inotify_max_user_watches: int + :ivar fs_file_max: Sysctl setting fs.file-max. + :vartype fs_file_max: int + :ivar fs_aio_max_nr: Sysctl setting fs.aio-max-nr. + :vartype fs_aio_max_nr: int + :ivar fs_nr_open: Sysctl setting fs.nr_open. + :vartype fs_nr_open: int + :ivar kernel_threads_max: Sysctl setting kernel.threads-max. + :vartype kernel_threads_max: int + :ivar vm_max_map_count: Sysctl setting vm.max_map_count. + :vartype vm_max_map_count: int + :ivar vm_swappiness: Sysctl setting vm.swappiness. + :vartype vm_swappiness: int + :ivar vm_vfs_cache_pressure: Sysctl setting vm.vfs_cache_pressure. + :vartype vm_vfs_cache_pressure: int + """ + + _attribute_map = { + 'net_core_somaxconn': {'key': 'netCoreSomaxconn', 'type': 'int'}, + 'net_core_netdev_max_backlog': {'key': 'netCoreNetdevMaxBacklog', 'type': 'int'}, + 'net_core_rmem_default': {'key': 'netCoreRmemDefault', 'type': 'int'}, + 'net_core_rmem_max': {'key': 'netCoreRmemMax', 'type': 'int'}, + 'net_core_wmem_default': {'key': 'netCoreWmemDefault', 'type': 'int'}, + 'net_core_wmem_max': {'key': 'netCoreWmemMax', 'type': 'int'}, + 'net_core_optmem_max': {'key': 'netCoreOptmemMax', 'type': 'int'}, + 'net_ipv4_tcp_max_syn_backlog': {'key': 'netIpv4TcpMaxSynBacklog', 'type': 'int'}, + 'net_ipv4_tcp_max_tw_buckets': {'key': 'netIpv4TcpMaxTwBuckets', 'type': 'int'}, + 'net_ipv4_tcp_fin_timeout': {'key': 'netIpv4TcpFinTimeout', 'type': 'int'}, + 'net_ipv4_tcp_keepalive_time': {'key': 'netIpv4TcpKeepaliveTime', 'type': 'int'}, + 'net_ipv4_tcp_keepalive_probes': {'key': 'netIpv4TcpKeepaliveProbes', 'type': 'int'}, + 'net_ipv4_tcpkeepalive_intvl': {'key': 'netIpv4TcpkeepaliveIntvl', 'type': 'int'}, + 'net_ipv4_tcp_tw_reuse': {'key': 'netIpv4TcpTwReuse', 'type': 'bool'}, + 'net_ipv4_ip_local_port_range': {'key': 'netIpv4IpLocalPortRange', 'type': 'str'}, + 'net_ipv4_neigh_default_gc_thresh1': {'key': 'netIpv4NeighDefaultGcThresh1', 'type': 'int'}, + 'net_ipv4_neigh_default_gc_thresh2': {'key': 'netIpv4NeighDefaultGcThresh2', 'type': 'int'}, + 'net_ipv4_neigh_default_gc_thresh3': {'key': 'netIpv4NeighDefaultGcThresh3', 'type': 'int'}, + 'net_netfilter_nf_conntrack_max': {'key': 'netNetfilterNfConntrackMax', 'type': 'int'}, + 'net_netfilter_nf_conntrack_buckets': {'key': 'netNetfilterNfConntrackBuckets', 'type': 'int'}, + 'fs_inotify_max_user_watches': {'key': 'fsInotifyMaxUserWatches', 'type': 'int'}, + 'fs_file_max': {'key': 'fsFileMax', 'type': 'int'}, + 'fs_aio_max_nr': {'key': 'fsAioMaxNr', 'type': 'int'}, + 'fs_nr_open': {'key': 'fsNrOpen', 'type': 'int'}, + 'kernel_threads_max': {'key': 'kernelThreadsMax', 'type': 'int'}, + 'vm_max_map_count': {'key': 'vmMaxMapCount', 'type': 'int'}, + 'vm_swappiness': {'key': 'vmSwappiness', 'type': 'int'}, + 'vm_vfs_cache_pressure': {'key': 'vmVfsCachePressure', 'type': 'int'}, + } + + def __init__( + self, + *, + net_core_somaxconn: Optional[int] = None, + net_core_netdev_max_backlog: Optional[int] = None, + net_core_rmem_default: Optional[int] = None, + net_core_rmem_max: Optional[int] = None, + net_core_wmem_default: Optional[int] = None, + net_core_wmem_max: Optional[int] = None, + net_core_optmem_max: Optional[int] = None, + net_ipv4_tcp_max_syn_backlog: Optional[int] = None, + net_ipv4_tcp_max_tw_buckets: Optional[int] = None, + net_ipv4_tcp_fin_timeout: Optional[int] = None, + net_ipv4_tcp_keepalive_time: Optional[int] = None, + net_ipv4_tcp_keepalive_probes: Optional[int] = None, + net_ipv4_tcpkeepalive_intvl: Optional[int] = None, + net_ipv4_tcp_tw_reuse: Optional[bool] = None, + net_ipv4_ip_local_port_range: Optional[str] = None, + net_ipv4_neigh_default_gc_thresh1: Optional[int] = None, + net_ipv4_neigh_default_gc_thresh2: Optional[int] = None, + net_ipv4_neigh_default_gc_thresh3: Optional[int] = None, + net_netfilter_nf_conntrack_max: Optional[int] = None, + net_netfilter_nf_conntrack_buckets: Optional[int] = None, + fs_inotify_max_user_watches: Optional[int] = None, + fs_file_max: Optional[int] = None, + fs_aio_max_nr: Optional[int] = None, + fs_nr_open: Optional[int] = None, + kernel_threads_max: Optional[int] = None, + vm_max_map_count: Optional[int] = None, + vm_swappiness: Optional[int] = None, + vm_vfs_cache_pressure: Optional[int] = None, + **kwargs + ): + """ + :keyword net_core_somaxconn: Sysctl setting net.core.somaxconn. + :paramtype net_core_somaxconn: int + :keyword net_core_netdev_max_backlog: Sysctl setting net.core.netdev_max_backlog. + :paramtype net_core_netdev_max_backlog: int + :keyword net_core_rmem_default: Sysctl setting net.core.rmem_default. + :paramtype net_core_rmem_default: int + :keyword net_core_rmem_max: Sysctl setting net.core.rmem_max. + :paramtype net_core_rmem_max: int + :keyword net_core_wmem_default: Sysctl setting net.core.wmem_default. + :paramtype net_core_wmem_default: int + :keyword net_core_wmem_max: Sysctl setting net.core.wmem_max. + :paramtype net_core_wmem_max: int + :keyword net_core_optmem_max: Sysctl setting net.core.optmem_max. + :paramtype net_core_optmem_max: int + :keyword net_ipv4_tcp_max_syn_backlog: Sysctl setting net.ipv4.tcp_max_syn_backlog. + :paramtype net_ipv4_tcp_max_syn_backlog: int + :keyword net_ipv4_tcp_max_tw_buckets: Sysctl setting net.ipv4.tcp_max_tw_buckets. + :paramtype net_ipv4_tcp_max_tw_buckets: int + :keyword net_ipv4_tcp_fin_timeout: Sysctl setting net.ipv4.tcp_fin_timeout. + :paramtype net_ipv4_tcp_fin_timeout: int + :keyword net_ipv4_tcp_keepalive_time: Sysctl setting net.ipv4.tcp_keepalive_time. + :paramtype net_ipv4_tcp_keepalive_time: int + :keyword net_ipv4_tcp_keepalive_probes: Sysctl setting net.ipv4.tcp_keepalive_probes. + :paramtype net_ipv4_tcp_keepalive_probes: int + :keyword net_ipv4_tcpkeepalive_intvl: Sysctl setting net.ipv4.tcp_keepalive_intvl. + :paramtype net_ipv4_tcpkeepalive_intvl: int + :keyword net_ipv4_tcp_tw_reuse: Sysctl setting net.ipv4.tcp_tw_reuse. + :paramtype net_ipv4_tcp_tw_reuse: bool + :keyword net_ipv4_ip_local_port_range: Sysctl setting net.ipv4.ip_local_port_range. + :paramtype net_ipv4_ip_local_port_range: str + :keyword net_ipv4_neigh_default_gc_thresh1: Sysctl setting net.ipv4.neigh.default.gc_thresh1. + :paramtype net_ipv4_neigh_default_gc_thresh1: int + :keyword net_ipv4_neigh_default_gc_thresh2: Sysctl setting net.ipv4.neigh.default.gc_thresh2. + :paramtype net_ipv4_neigh_default_gc_thresh2: int + :keyword net_ipv4_neigh_default_gc_thresh3: Sysctl setting net.ipv4.neigh.default.gc_thresh3. + :paramtype net_ipv4_neigh_default_gc_thresh3: int + :keyword net_netfilter_nf_conntrack_max: Sysctl setting net.netfilter.nf_conntrack_max. + :paramtype net_netfilter_nf_conntrack_max: int + :keyword net_netfilter_nf_conntrack_buckets: Sysctl setting net.netfilter.nf_conntrack_buckets. + :paramtype net_netfilter_nf_conntrack_buckets: int + :keyword fs_inotify_max_user_watches: Sysctl setting fs.inotify.max_user_watches. + :paramtype fs_inotify_max_user_watches: int + :keyword fs_file_max: Sysctl setting fs.file-max. + :paramtype fs_file_max: int + :keyword fs_aio_max_nr: Sysctl setting fs.aio-max-nr. + :paramtype fs_aio_max_nr: int + :keyword fs_nr_open: Sysctl setting fs.nr_open. + :paramtype fs_nr_open: int + :keyword kernel_threads_max: Sysctl setting kernel.threads-max. + :paramtype kernel_threads_max: int + :keyword vm_max_map_count: Sysctl setting vm.max_map_count. + :paramtype vm_max_map_count: int + :keyword vm_swappiness: Sysctl setting vm.swappiness. + :paramtype vm_swappiness: int + :keyword vm_vfs_cache_pressure: Sysctl setting vm.vfs_cache_pressure. + :paramtype vm_vfs_cache_pressure: int + """ + super(SysctlConfig, self).__init__(**kwargs) + self.net_core_somaxconn = net_core_somaxconn + self.net_core_netdev_max_backlog = net_core_netdev_max_backlog + self.net_core_rmem_default = net_core_rmem_default + self.net_core_rmem_max = net_core_rmem_max + self.net_core_wmem_default = net_core_wmem_default + self.net_core_wmem_max = net_core_wmem_max + self.net_core_optmem_max = net_core_optmem_max + self.net_ipv4_tcp_max_syn_backlog = net_ipv4_tcp_max_syn_backlog + self.net_ipv4_tcp_max_tw_buckets = net_ipv4_tcp_max_tw_buckets + self.net_ipv4_tcp_fin_timeout = net_ipv4_tcp_fin_timeout + self.net_ipv4_tcp_keepalive_time = net_ipv4_tcp_keepalive_time + self.net_ipv4_tcp_keepalive_probes = net_ipv4_tcp_keepalive_probes + self.net_ipv4_tcpkeepalive_intvl = net_ipv4_tcpkeepalive_intvl + self.net_ipv4_tcp_tw_reuse = net_ipv4_tcp_tw_reuse + self.net_ipv4_ip_local_port_range = net_ipv4_ip_local_port_range + self.net_ipv4_neigh_default_gc_thresh1 = net_ipv4_neigh_default_gc_thresh1 + self.net_ipv4_neigh_default_gc_thresh2 = net_ipv4_neigh_default_gc_thresh2 + self.net_ipv4_neigh_default_gc_thresh3 = net_ipv4_neigh_default_gc_thresh3 + self.net_netfilter_nf_conntrack_max = net_netfilter_nf_conntrack_max + self.net_netfilter_nf_conntrack_buckets = net_netfilter_nf_conntrack_buckets + self.fs_inotify_max_user_watches = fs_inotify_max_user_watches + self.fs_file_max = fs_file_max + self.fs_aio_max_nr = fs_aio_max_nr + self.fs_nr_open = fs_nr_open + self.kernel_threads_max = kernel_threads_max + self.vm_max_map_count = vm_max_map_count + self.vm_swappiness = vm_swappiness + self.vm_vfs_cache_pressure = vm_vfs_cache_pressure + + +class SystemData(msrest.serialization.Model): + """Metadata pertaining to creation and last modification of the resource. + + :ivar created_by: The identity that created the resource. + :vartype created_by: str + :ivar created_by_type: The type of identity that created the resource. Known values are: + "User", "Application", "ManagedIdentity", "Key". + :vartype created_by_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreatedByType + :ivar created_at: The timestamp of resource creation (UTC). + :vartype created_at: ~datetime.datetime + :ivar last_modified_by: The identity that last modified the resource. + :vartype last_modified_by: str + :ivar last_modified_by_type: The type of identity that last modified the resource. Known values + are: "User", "Application", "ManagedIdentity", "Key". + :vartype last_modified_by_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreatedByType + :ivar last_modified_at: The timestamp of resource last modification (UTC). + :vartype last_modified_at: ~datetime.datetime + """ + + _attribute_map = { + 'created_by': {'key': 'createdBy', 'type': 'str'}, + 'created_by_type': {'key': 'createdByType', 'type': 'str'}, + 'created_at': {'key': 'createdAt', 'type': 'iso-8601'}, + 'last_modified_by': {'key': 'lastModifiedBy', 'type': 'str'}, + 'last_modified_by_type': {'key': 'lastModifiedByType', 'type': 'str'}, + 'last_modified_at': {'key': 'lastModifiedAt', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + created_by: Optional[str] = None, + created_by_type: Optional[Union[str, "_models.CreatedByType"]] = None, + created_at: Optional[datetime.datetime] = None, + last_modified_by: Optional[str] = None, + last_modified_by_type: Optional[Union[str, "_models.CreatedByType"]] = None, + last_modified_at: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword created_by: The identity that created the resource. + :paramtype created_by: str + :keyword created_by_type: The type of identity that created the resource. Known values are: + "User", "Application", "ManagedIdentity", "Key". + :paramtype created_by_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreatedByType + :keyword created_at: The timestamp of resource creation (UTC). + :paramtype created_at: ~datetime.datetime + :keyword last_modified_by: The identity that last modified the resource. + :paramtype last_modified_by: str + :keyword last_modified_by_type: The type of identity that last modified the resource. Known + values are: "User", "Application", "ManagedIdentity", "Key". + :paramtype last_modified_by_type: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.CreatedByType + :keyword last_modified_at: The timestamp of resource last modification (UTC). + :paramtype last_modified_at: ~datetime.datetime + """ + super(SystemData, self).__init__(**kwargs) + self.created_by = created_by + self.created_by_type = created_by_type + self.created_at = created_at + self.last_modified_by = last_modified_by + self.last_modified_by_type = last_modified_by_type + self.last_modified_at = last_modified_at + + +class TagsObject(msrest.serialization.Model): + """Tags object for patch operations. + + :ivar tags: A set of tags. Resource tags. + :vartype tags: dict[str, str] + """ + + _attribute_map = { + 'tags': {'key': 'tags', 'type': '{str}'}, + } + + def __init__( + self, + *, + tags: Optional[Dict[str, str]] = None, + **kwargs + ): + """ + :keyword tags: A set of tags. Resource tags. + :paramtype tags: dict[str, str] + """ + super(TagsObject, self).__init__(**kwargs) + self.tags = tags + + +class TimeInWeek(msrest.serialization.Model): + """Time in a week. + + :ivar day: The day of the week. Known values are: "Sunday", "Monday", "Tuesday", "Wednesday", + "Thursday", "Friday", "Saturday". + :vartype day: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.WeekDay + :ivar hour_slots: Each integer hour represents a time range beginning at 0m after the hour + ending at the next hour (non-inclusive). 0 corresponds to 00:00 UTC, 23 corresponds to 23:00 + UTC. Specifying [0, 1] means the 00:00 - 02:00 UTC time range. + :vartype hour_slots: list[int] + """ + + _attribute_map = { + 'day': {'key': 'day', 'type': 'str'}, + 'hour_slots': {'key': 'hourSlots', 'type': '[int]'}, + } + + def __init__( + self, + *, + day: Optional[Union[str, "_models.WeekDay"]] = None, + hour_slots: Optional[List[int]] = None, + **kwargs + ): + """ + :keyword day: The day of the week. Known values are: "Sunday", "Monday", "Tuesday", + "Wednesday", "Thursday", "Friday", "Saturday". + :paramtype day: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.WeekDay + :keyword hour_slots: Each integer hour represents a time range beginning at 0m after the hour + ending at the next hour (non-inclusive). 0 corresponds to 00:00 UTC, 23 corresponds to 23:00 + UTC. Specifying [0, 1] means the 00:00 - 02:00 UTC time range. + :paramtype hour_slots: list[int] + """ + super(TimeInWeek, self).__init__(**kwargs) + self.day = day + self.hour_slots = hour_slots + + +class TimeSpan(msrest.serialization.Model): + """For example, between 2021-05-25T13:00:00Z and 2021-05-25T14:00:00Z. + + :ivar start: The start of a time span. + :vartype start: ~datetime.datetime + :ivar end: The end of a time span. + :vartype end: ~datetime.datetime + """ + + _attribute_map = { + 'start': {'key': 'start', 'type': 'iso-8601'}, + 'end': {'key': 'end', 'type': 'iso-8601'}, + } + + def __init__( + self, + *, + start: Optional[datetime.datetime] = None, + end: Optional[datetime.datetime] = None, + **kwargs + ): + """ + :keyword start: The start of a time span. + :paramtype start: ~datetime.datetime + :keyword end: The end of a time span. + :paramtype end: ~datetime.datetime + """ + super(TimeSpan, self).__init__(**kwargs) + self.start = start + self.end = end + + +class TrustedAccessRole(msrest.serialization.Model): + """Trusted access role definition. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar source_resource_type: Resource type of Azure resource. + :vartype source_resource_type: str + :ivar name: Name of role, name is unique under a source resource type. + :vartype name: str + :ivar rules: List of rules for the role. This maps to 'rules' property of `Kubernetes Cluster + Role + `_. + :vartype rules: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleRule] + """ + + _validation = { + 'source_resource_type': {'readonly': True}, + 'name': {'readonly': True}, + 'rules': {'readonly': True}, + } + + _attribute_map = { + 'source_resource_type': {'key': 'sourceResourceType', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'rules': {'key': 'rules', 'type': '[TrustedAccessRoleRule]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(TrustedAccessRole, self).__init__(**kwargs) + self.source_resource_type = None + self.name = None + self.rules = None + + +class TrustedAccessRoleBinding(Resource): + """Defines binding between a resource and role. + + Variables are only populated by the server, and will be ignored when sending a request. + + All required parameters must be populated in order to send to Azure. + + :ivar id: Fully qualified resource ID for the resource. Ex - + /subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}. + :vartype id: str + :ivar name: The name of the resource. + :vartype name: str + :ivar type: The type of the resource. E.g. "Microsoft.Compute/virtualMachines" or + "Microsoft.Storage/storageAccounts". + :vartype type: str + :ivar system_data: Azure Resource Manager metadata containing createdBy and modifiedBy + information. + :vartype system_data: ~azure.mgmt.containerservice.v2022_06_02_preview.models.SystemData + :ivar provisioning_state: The current provisioning state of trusted access role binding. Known + values are: "Succeeded", "Failed", "Updating", "Deleting". + :vartype provisioning_state: str or + ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingProvisioningState + :ivar source_resource_id: Required. The ARM resource ID of source resource that trusted access + is configured for. + :vartype source_resource_id: str + :ivar roles: Required. A list of roles to bind, each item is a resource type qualified role + name. For example: 'Microsoft.MachineLearningServices/workspaces/reader'. + :vartype roles: list[str] + """ + + _validation = { + 'id': {'readonly': True}, + 'name': {'readonly': True}, + 'type': {'readonly': True}, + 'system_data': {'readonly': True}, + 'provisioning_state': {'readonly': True}, + 'source_resource_id': {'required': True}, + 'roles': {'required': True}, + } + + _attribute_map = { + 'id': {'key': 'id', 'type': 'str'}, + 'name': {'key': 'name', 'type': 'str'}, + 'type': {'key': 'type', 'type': 'str'}, + 'system_data': {'key': 'systemData', 'type': 'SystemData'}, + 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, + 'source_resource_id': {'key': 'properties.sourceResourceId', 'type': 'str'}, + 'roles': {'key': 'properties.roles', 'type': '[str]'}, + } + + def __init__( + self, + *, + source_resource_id: str, + roles: List[str], + **kwargs + ): + """ + :keyword source_resource_id: Required. The ARM resource ID of source resource that trusted + access is configured for. + :paramtype source_resource_id: str + :keyword roles: Required. A list of roles to bind, each item is a resource type qualified role + name. For example: 'Microsoft.MachineLearningServices/workspaces/reader'. + :paramtype roles: list[str] + """ + super(TrustedAccessRoleBinding, self).__init__(**kwargs) + self.provisioning_state = None + self.source_resource_id = source_resource_id + self.roles = roles + + +class TrustedAccessRoleBindingListResult(msrest.serialization.Model): + """List of trusted access role bindings. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: Role binding list. + :vartype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding] + :ivar next_link: Link to next page of resources. + :vartype next_link: str + """ + + _validation = { + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TrustedAccessRoleBinding]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + *, + value: Optional[List["_models.TrustedAccessRoleBinding"]] = None, + **kwargs + ): + """ + :keyword value: Role binding list. + :paramtype value: + list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding] + """ + super(TrustedAccessRoleBindingListResult, self).__init__(**kwargs) + self.value = value + self.next_link = None + + +class TrustedAccessRoleListResult(msrest.serialization.Model): + """List of trusted access roles. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar value: Role list. + :vartype value: list[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRole] + :ivar next_link: Link to next page of resources. + :vartype next_link: str + """ + + _validation = { + 'value': {'readonly': True}, + 'next_link': {'readonly': True}, + } + + _attribute_map = { + 'value': {'key': 'value', 'type': '[TrustedAccessRole]'}, + 'next_link': {'key': 'nextLink', 'type': 'str'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(TrustedAccessRoleListResult, self).__init__(**kwargs) + self.value = None + self.next_link = None + + +class TrustedAccessRoleRule(msrest.serialization.Model): + """Rule for trusted access role. + + Variables are only populated by the server, and will be ignored when sending a request. + + :ivar verbs: List of allowed verbs. + :vartype verbs: list[str] + :ivar api_groups: List of allowed apiGroups. + :vartype api_groups: list[str] + :ivar resources: List of allowed resources. + :vartype resources: list[str] + :ivar resource_names: List of allowed names. + :vartype resource_names: list[str] + :ivar non_resource_ur_ls: List of allowed nonResourceURLs. + :vartype non_resource_ur_ls: list[str] + """ + + _validation = { + 'verbs': {'readonly': True}, + 'api_groups': {'readonly': True}, + 'resources': {'readonly': True}, + 'resource_names': {'readonly': True}, + 'non_resource_ur_ls': {'readonly': True}, + } + + _attribute_map = { + 'verbs': {'key': 'verbs', 'type': '[str]'}, + 'api_groups': {'key': 'apiGroups', 'type': '[str]'}, + 'resources': {'key': 'resources', 'type': '[str]'}, + 'resource_names': {'key': 'resourceNames', 'type': '[str]'}, + 'non_resource_ur_ls': {'key': 'nonResourceURLs', 'type': '[str]'}, + } + + def __init__( + self, + **kwargs + ): + """ + """ + super(TrustedAccessRoleRule, self).__init__(**kwargs) + self.verbs = None + self.api_groups = None + self.resources = None + self.resource_names = None + self.non_resource_ur_ls = None + + +class WindowsGmsaProfile(msrest.serialization.Model): + """Windows gMSA Profile in the managed cluster. + + :ivar enabled: Specifies whether to enable Windows gMSA in the managed cluster. + :vartype enabled: bool + :ivar dns_server: Specifies the DNS server for Windows gMSA. :code:`
`:code:`
` Set it to + empty if you have configured the DNS server in the vnet which is used to create the managed + cluster. + :vartype dns_server: str + :ivar root_domain_name: Specifies the root domain name for Windows gMSA. + :code:`
`:code:`
` Set it to empty if you have configured the DNS server in the vnet + which is used to create the managed cluster. + :vartype root_domain_name: str + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'dns_server': {'key': 'dnsServer', 'type': 'str'}, + 'root_domain_name': {'key': 'rootDomainName', 'type': 'str'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + dns_server: Optional[str] = None, + root_domain_name: Optional[str] = None, + **kwargs + ): + """ + :keyword enabled: Specifies whether to enable Windows gMSA in the managed cluster. + :paramtype enabled: bool + :keyword dns_server: Specifies the DNS server for Windows gMSA. :code:`
`:code:`
` Set it + to empty if you have configured the DNS server in the vnet which is used to create the managed + cluster. + :paramtype dns_server: str + :keyword root_domain_name: Specifies the root domain name for Windows gMSA. + :code:`
`:code:`
` Set it to empty if you have configured the DNS server in the vnet + which is used to create the managed cluster. + :paramtype root_domain_name: str + """ + super(WindowsGmsaProfile, self).__init__(**kwargs) + self.enabled = enabled + self.dns_server = dns_server + self.root_domain_name = root_domain_name diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/models/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py new file mode 100644 index 00000000000..03d015afec2 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/__init__.py @@ -0,0 +1,42 @@ +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 ._operations import Operations +from ._managed_clusters_operations import ManagedClustersOperations +from ._maintenance_configurations_operations import MaintenanceConfigurationsOperations +from ._agent_pools_operations import AgentPoolsOperations +from ._private_endpoint_connections_operations import PrivateEndpointConnectionsOperations +from ._private_link_resources_operations import PrivateLinkResourcesOperations +from ._resolve_private_link_service_id_operations import ResolvePrivateLinkServiceIdOperations +from ._snapshots_operations import SnapshotsOperations +from ._managed_cluster_snapshots_operations import ManagedClusterSnapshotsOperations +from ._trusted_access_roles_operations import TrustedAccessRolesOperations +from ._trusted_access_role_bindings_operations import TrustedAccessRoleBindingsOperations +from ._fleets_operations import FleetsOperations +from ._fleet_members_operations import FleetMembersOperations + +from ._patch import __all__ as _patch_all +from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import +from ._patch import patch_sdk as _patch_sdk +__all__ = [ + 'Operations', + 'ManagedClustersOperations', + 'MaintenanceConfigurationsOperations', + 'AgentPoolsOperations', + 'PrivateEndpointConnectionsOperations', + 'PrivateLinkResourcesOperations', + 'ResolvePrivateLinkServiceIdOperations', + 'SnapshotsOperations', + 'ManagedClusterSnapshotsOperations', + 'TrustedAccessRolesOperations', + 'TrustedAccessRoleBindingsOperations', + 'FleetsOperations', + 'FleetMembersOperations', +] +__all__.extend([p for p in _patch_all if p not in __all__]) +_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py new file mode 100644 index 00000000000..ef8e1b47fbb --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_agent_pools_operations.py @@ -0,0 +1,1057 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + *, + json: Optional[_models.AgentPool] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + *, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if ignore_pod_disruption_budget is not None: + _params['ignore-pod-disruption-budget'] = _SERIALIZER.query("ignore_pod_disruption_budget", ignore_pod_disruption_budget, 'bool') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_upgrade_profile_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeProfiles/default") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_available_agent_pool_versions_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/availableAgentPoolVersions") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_upgrade_node_image_version_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeNodeImageVersion") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class AgentPoolsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`agent_pools` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> Iterable[_models.AgentPoolListResult]: + """Gets a list of agent pools in the specified managed cluster. + + Gets a list of agent pools in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either AgentPoolListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("AgentPoolListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> _models.AgentPool: + """Gets the specified managed cluster agent pool. + + Gets the specified managed cluster agent pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPool, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + parameters: _models.AgentPool, + **kwargs: Any + ) -> _models.AgentPool: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + + _json = self._serialize.body(parameters, 'AgentPool') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + @distributed_trace + def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + parameters: _models.AgentPool, + **kwargs: Any + ) -> LROPoller[_models.AgentPool]: + """Creates or updates an agent pool in the specified managed cluster. + + Creates or updates an agent pool in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param parameters: The agent pool to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('AgentPool', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes an agent pool in the specified managed cluster. + + Deletes an agent pool in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :param ignore_pod_disruption_budget: ignore-pod-disruption-budget=true to delete those pods on + a node without considering Pod Disruption Budget. Default value is None. + :type ignore_pod_disruption_budget: bool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}"} # type: ignore + + @distributed_trace + def get_upgrade_profile( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> _models.AgentPoolUpgradeProfile: + """Gets the upgrade profile for an agent pool. + + Gets the upgrade profile for an agent pool. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolUpgradeProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolUpgradeProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolUpgradeProfile] + + + request = build_get_upgrade_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.get_upgrade_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolUpgradeProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_upgrade_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeProfiles/default"} # type: ignore + + + @distributed_trace + def get_available_agent_pool_versions( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.AgentPoolAvailableVersions: + """Gets a list of supported Kubernetes versions for the specified agent pool. + + See `supported Kubernetes versions + `_ for more details about + the version lifecycle. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: AgentPoolAvailableVersions, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPoolAvailableVersions + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPoolAvailableVersions] + + + request = build_get_available_agent_pool_versions_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get_available_agent_pool_versions.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('AgentPoolAvailableVersions', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_available_agent_pool_versions.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/availableAgentPoolVersions"} # type: ignore + + + def _upgrade_node_image_version_initial( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> Optional[_models.AgentPool]: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.AgentPool]] + + + request = build_upgrade_node_image_version_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self._upgrade_node_image_version_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + response_headers = {} + if response.status_code == 202: + response_headers['Azure-AsyncOperation']=self._deserialize('str', response.headers.get('Azure-AsyncOperation')) + + deserialized = self._deserialize('AgentPool', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, response_headers) + + return deserialized + + _upgrade_node_image_version_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeNodeImageVersion"} # type: ignore + + + @distributed_trace + def begin_upgrade_node_image_version( + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> LROPoller[_models.AgentPool]: + """Upgrades the node image version of an agent pool to the latest. + + Upgrading the node image version of an agent pool applies the newest OS and runtime updates to + the nodes. AKS provides one new image per week with the latest updates. For more details on + node image versions, see: https://docs.microsoft.com/azure/aks/node-image-upgrade. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either AgentPool or the result of cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.AgentPool] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.AgentPool] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._upgrade_node_image_version_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + response_headers = {} + response = pipeline_response.http_response + response_headers['Azure-AsyncOperation']=self._deserialize('str', response.headers.get('Azure-AsyncOperation')) + + deserialized = self._deserialize('AgentPool', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, response_headers) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_upgrade_node_image_version.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/agentPools/{agentPoolName}/upgradeNodeImageVersion"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py new file mode 100644 index 00000000000..12952a26598 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleet_members_operations.py @@ -0,0 +1,689 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_create_or_update_request_initial( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + *, + json: Optional[_models.FleetMember] = None, + content: Any = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + "fleetMemberName": _SERIALIZER.url("fleet_member_name", fleet_member_name, 'str', max_length=50, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if if_match is not None: + _headers['If-Match'] = _SERIALIZER.header("if_match", if_match, 'str') + if if_none_match is not None: + _headers['If-None-Match'] = _SERIALIZER.header("if_none_match", if_none_match, 'str') + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + "fleetMemberName": _SERIALIZER.url("fleet_member_name", fleet_member_name, 'str', max_length=50, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + *, + if_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + "fleetMemberName": _SERIALIZER.url("fleet_member_name", fleet_member_name, 'str', max_length=50, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if if_match is not None: + _headers['If-Match'] = _SERIALIZER.header("if_match", if_match, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_fleet_request( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class FleetMembersOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`fleet_members` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + def _create_or_update_initial( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + parameters: _models.FleetMember, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.FleetMember: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + + _json = self._serialize.body(parameters, 'FleetMember') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + if_none_match=if_none_match, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('FleetMember', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('FleetMember', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + @distributed_trace + def begin_create_or_update( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + parameters: _models.FleetMember, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> LROPoller[_models.FleetMember]: + """Creates or updates a fleet member. + + A member contains a reference to an existing Kubernetes cluster. Creating a member makes the + referenced cluster join the Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :param parameters: The Fleet member to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param if_none_match: Set to '*' to allow a new resource to be created and prevent updating an + existing resource. Other values will result in a 412 Pre-condition Failed response. Default + value is None. + :type if_none_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either FleetMember or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + parameters=parameters, + if_match=if_match, + if_none_match=if_none_match, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('FleetMember', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + **kwargs: Any + ) -> _models.FleetMember: + """Gets a Fleet member. + + Gets a Fleet member. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: FleetMember, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMember + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMember] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('FleetMember', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + api_version=api_version, + if_match=if_match, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + fleet_member_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes a fleet member. + + Deleting a Fleet member results in the member cluster leaving fleet. The Member azure resource + is deleted upon success. The underlying cluster is not deleted. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param fleet_member_name: The name of the Fleet member resource. + :type fleet_member_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + fleet_member_name=fleet_member_name, + if_match=if_match, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + lro_options={'final-state-via': 'location'}, + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members/{fleetMemberName}"} # type: ignore + + @distributed_trace + def list_by_fleet( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> Iterable[_models.FleetMembersListResult]: + """Lists the members of a fleet. + + Lists the members of a fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetMembersListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetMembersListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetMembersListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_fleet_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.list_by_fleet.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_fleet_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("FleetMembersListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_fleet.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/members"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py new file mode 100644 index 00000000000..604ebd73e13 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_fleets_operations.py @@ -0,0 +1,1004 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_create_or_update_request_initial( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + *, + json: Optional[_models.Fleet] = None, + content: Any = None, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if if_match is not None: + _headers['If-Match'] = _SERIALIZER.header("if_match", if_match, 'str') + if if_none_match is not None: + _headers['If-None-Match'] = _SERIALIZER.header("if_none_match", if_none_match, 'str') + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_update_request( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + *, + json: Optional[_models.FleetPatch] = None, + content: Any = None, + if_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if if_match is not None: + _headers['If-Match'] = _SERIALIZER.header("if_match", if_match, 'str') + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PATCH", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + *, + if_match: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if if_match is not None: + _headers['If-Match'] = _SERIALIZER.header("if_match", if_match, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_resource_group_request( + subscription_id: str, + resource_group_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/fleets") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_credentials_request( + subscription_id: str, + resource_group_name: str, + fleet_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/listCredentials") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "fleetName": _SERIALIZER.url("fleet_name", fleet_name, 'str', max_length=63, min_length=1, pattern=r'^[a-z0-9]([-a-z0-9]*[a-z0-9])?$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class FleetsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`fleets` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + def _create_or_update_initial( + self, + resource_group_name: str, + fleet_name: str, + parameters: _models.Fleet, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> _models.Fleet: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + _json = self._serialize.body(parameters, 'Fleet') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + if_none_match=if_none_match, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Fleet', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace + def begin_create_or_update( + self, + resource_group_name: str, + fleet_name: str, + parameters: _models.Fleet, + if_match: Optional[str] = None, + if_none_match: Optional[str] = None, + **kwargs: Any + ) -> LROPoller[_models.Fleet]: + """Creates or updates a Fleet. + + Creates or updates a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param parameters: The Fleet to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param if_none_match: Set to '*' to allow a new resource to be created and prevent updating an + existing resource. Other values will result in a 412 Pre-condition Failed response. Default + value is None. + :type if_none_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either Fleet or the result of cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + parameters=parameters, + if_match=if_match, + if_none_match=if_none_match, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('Fleet', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + @distributed_trace + def update( + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + parameters: Optional[_models.FleetPatch] = None, + **kwargs: Any + ) -> _models.Fleet: + """Patches a fleet resource. + + Patches a fleet resource. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :param parameters: The properties of a Fleet to update. Default value is None. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetPatch + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Fleet, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + if parameters is not None: + _json = self._serialize.body(parameters, 'FleetPatch') + else: + _json = None + + request = build_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + content_type=content_type, + json=_json, + if_match=if_match, + template_url=self.update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace + def get( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> _models.Fleet: + """Gets a Fleet. + + Gets a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Fleet, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Fleet + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.Fleet] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Fleet', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + if_match=if_match, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + fleet_name: str, + if_match: Optional[str] = None, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes a Fleet. + + Deletes a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :param if_match: Omit this value to always overwrite the current resource. Specify the + last-seen ETag value to prevent accidentally overwriting concurrent changes. Default value is + None. + :type if_match: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + fleet_name=fleet_name, + if_match=if_match, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + lro_options={'final-state-via': 'location'}, + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.FleetListResult]: + """Lists fleets in the specified subscription and resource group. + + Lists fleets in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("FleetListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets"} # type: ignore + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.FleetListResult]: + """Lists fleets in the specified subscription. + + Lists fleets in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either FleetListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("FleetListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/fleets"} # type: ignore + + @distributed_trace + def list_credentials( + self, + resource_group_name: str, + fleet_name: str, + **kwargs: Any + ) -> _models.FleetCredentialResults: + """Lists the user credentials of a Fleet. + + Lists the user credentials of a Fleet. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param fleet_name: The name of the Fleet resource. + :type fleet_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: FleetCredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.FleetCredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.FleetCredentialResults] + + + request = build_list_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + fleet_name=fleet_name, + api_version=api_version, + template_url=self.list_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + error = self._deserialize.failsafe_deserialize(_models.ErrorResponse, pipeline_response) + raise HttpResponseError(response=response, model=error, error_format=ARMErrorFormat) + + deserialized = self._deserialize('FleetCredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/fleets/{fleetName}/listCredentials"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py new file mode 100644 index 00000000000..20b258720ca --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_maintenance_configurations_operations.py @@ -0,0 +1,512 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_by_managed_cluster_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "configName": _SERIALIZER.url("config_name", config_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + config_name: str, + *, + json: Optional[_models.MaintenanceConfiguration] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "configName": _SERIALIZER.url("config_name", config_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "configName": _SERIALIZER.url("config_name", config_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class MaintenanceConfigurationsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`maintenance_configurations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list_by_managed_cluster( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> Iterable[_models.MaintenanceConfigurationListResult]: + """Gets a list of maintenance configurations in the specified managed cluster. + + Gets a list of maintenance configurations in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either MaintenanceConfigurationListResult or the result + of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfigurationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfigurationListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_managed_cluster_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list_by_managed_cluster.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_managed_cluster_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("MaintenanceConfigurationListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_managed_cluster.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any + ) -> _models.MaintenanceConfiguration: + """Gets the specified maintenance configuration of a managed cluster. + + Gets the specified maintenance configuration of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: MaintenanceConfiguration, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('MaintenanceConfiguration', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + + + @distributed_trace + def create_or_update( + self, + resource_group_name: str, + resource_name: str, + config_name: str, + parameters: _models.MaintenanceConfiguration, + **kwargs: Any + ) -> _models.MaintenanceConfiguration: + """Creates or updates a maintenance configuration in the specified managed cluster. + + Creates or updates a maintenance configuration in the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :param parameters: The maintenance configuration to create or update. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :keyword callable cls: A custom type or function that will be passed the direct response + :return: MaintenanceConfiguration, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.MaintenanceConfiguration + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.MaintenanceConfiguration] + + _json = self._serialize.body(parameters, 'MaintenanceConfiguration') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('MaintenanceConfiguration', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + + + @distributed_trace + def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + config_name: str, + **kwargs: Any + ) -> None: + """Deletes a maintenance configuration. + + Deletes a maintenance configuration. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param config_name: The name of the maintenance configuration. + :type config_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + config_name=config_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/maintenanceConfigurations/{configName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py new file mode 100644 index 00000000000..ea57e68973d --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_cluster_snapshots_operations.py @@ -0,0 +1,723 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedclustersnapshots") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_resource_group_request( + subscription_id: str, + resource_group_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.ManagedClusterSnapshot] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_update_tags_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.TagsObject] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PATCH", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class ManagedClusterSnapshotsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`managed_cluster_snapshots` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.ManagedClusterSnapshotListResult]: + """Gets a list of managed cluster snapshots in the specified subscription. + + Gets a list of managed cluster snapshots in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterSnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedclustersnapshots"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.ManagedClusterSnapshotListResult]: + """Lists managed cluster snapshots in the specified subscription and resource group. + + Lists managed cluster snapshots in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterSnapshotListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterSnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Gets a managed cluster snapshot. + + Gets a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterSnapshot, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Creates or updates a managed cluster snapshot. + + Creates or updates a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The managed cluster snapshot to create or update. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + _json = self._serialize.body(parameters, 'ManagedClusterSnapshot') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.ManagedClusterSnapshot: + """Updates tags on a managed cluster snapshot. + + Updates tags on a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update managed cluster snapshot Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterSnapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterSnapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterSnapshot] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update_tags.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterSnapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Deletes a managed cluster snapshot. + + Deletes a managed cluster snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclustersnapshots/{resourceName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py new file mode 100644 index 00000000000..93aea842378 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_managed_clusters_operations.py @@ -0,0 +1,3023 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_get_os_options_request( + subscription_id: str, + location: str, + *, + resource_type: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/osOptions/default") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "location": _SERIALIZER.url("location", location, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if resource_type is not None: + _params['resource-type'] = _SERIALIZER.query("resource_type", resource_type, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedClusters") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_resource_group_request( + subscription_id: str, + resource_group_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_upgrade_profile_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/upgradeProfiles/default") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_access_profile_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + role_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/accessProfiles/{roleName}/listCredential") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "roleName": _SERIALIZER.url("role_name", role_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_cluster_admin_credentials_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + server_fqdn: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterAdminCredential") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if server_fqdn is not None: + _params['server-fqdn'] = _SERIALIZER.query("server_fqdn", server_fqdn, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_cluster_user_credentials_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + server_fqdn: Optional[str] = None, + format: Optional[Union[str, "_models.Format"]] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterUserCredential") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if server_fqdn is not None: + _params['server-fqdn'] = _SERIALIZER.query("server_fqdn", server_fqdn, 'str') + if format is not None: + _params['format'] = _SERIALIZER.query("format", format, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_cluster_monitoring_user_credentials_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + server_fqdn: Optional[str] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterMonitoringUserCredential") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if server_fqdn is not None: + _params['server-fqdn'] = _SERIALIZER.query("server_fqdn", server_fqdn, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.ManagedCluster] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_update_tags_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.TagsObject] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PATCH", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + if ignore_pod_disruption_budget is not None: + _params['ignore-pod-disruption-budget'] = _SERIALIZER.query("ignore_pod_disruption_budget", ignore_pod_disruption_budget, 'bool') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_reset_service_principal_profile_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.ManagedClusterServicePrincipalProfile] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetServicePrincipalProfile") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_reset_aad_profile_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.ManagedClusterAADProfile] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_rotate_cluster_certificates_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateClusterCertificates") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_rotate_service_account_signing_keys_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateServiceAccountSigningKeys") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_stop_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/stop") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_start_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/start") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_run_command_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.RunCommandRequest] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/runCommand") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_get_command_result_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + command_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/commandResults/{commandId}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "commandId": _SERIALIZER.url("command_id", command_id, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_outbound_network_dependencies_endpoints_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/outboundNetworkDependenciesEndpoints") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class ManagedClustersOperations: # pylint: disable=too-many-public-methods + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`managed_clusters` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def get_os_options( + self, + location: str, + resource_type: Optional[str] = None, + **kwargs: Any + ) -> _models.OSOptionProfile: + """Gets supported OS options in the specified subscription. + + Gets supported OS options in the specified subscription. + + :param location: The name of Azure region. + :type location: str + :param resource_type: The resource type for which the OS options needs to be returned. Default + value is None. + :type resource_type: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: OSOptionProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.OSOptionProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OSOptionProfile] + + + request = build_get_os_options_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + resource_type=resource_type, + template_url=self.get_os_options.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('OSOptionProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_os_options.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/osOptions/default"} # type: ignore + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.ManagedClusterListResult]: + """Gets a list of managed clusters in the specified subscription. + + Gets a list of managed clusters in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/managedClusters"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.ManagedClusterListResult]: + """Lists managed clusters in the specified subscription and resource group. + + Lists managed clusters in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either ManagedClusterListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("ManagedClusterListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters"} # type: ignore + + @distributed_trace + def get_upgrade_profile( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedClusterUpgradeProfile: + """Gets the upgrade profile of a managed cluster. + + Gets the upgrade profile of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterUpgradeProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterUpgradeProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterUpgradeProfile] + + + request = build_get_upgrade_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get_upgrade_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterUpgradeProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_upgrade_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/upgradeProfiles/default"} # type: ignore + + + @distributed_trace + def get_access_profile( + self, + resource_group_name: str, + resource_name: str, + role_name: str, + **kwargs: Any + ) -> _models.ManagedClusterAccessProfile: + """Gets an access profile of a managed cluster. + + **WARNING**\ : This API will be deprecated. Instead use `ListClusterUserCredentials + `_ or + `ListClusterAdminCredentials + `_ . + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param role_name: The name of the role for managed cluster accessProfile resource. + :type role_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedClusterAccessProfile, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAccessProfile + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedClusterAccessProfile] + + + request = build_get_access_profile_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + role_name=role_name, + api_version=api_version, + template_url=self.get_access_profile.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedClusterAccessProfile', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_access_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/accessProfiles/{roleName}/listCredential"} # type: ignore + + + @distributed_trace + def list_cluster_admin_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the admin credentials of a managed cluster. + + Lists the admin credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_admin_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + template_url=self.list_cluster_admin_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_admin_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterAdminCredential"} # type: ignore + + + @distributed_trace + def list_cluster_user_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + format: Optional[Union[str, "_models.Format"]] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the user credentials of a managed cluster. + + Lists the user credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :param format: Only apply to AAD clusters, specifies the format of returned kubeconfig. Format + 'azure' will return azure auth-provider kubeconfig; format 'exec' will return exec format + kubeconfig, which requires kubelogin binary in the path. Default value is None. + :type format: str or ~azure.mgmt.containerservice.v2022_06_02_preview.models.Format + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_user_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + format=format, + template_url=self.list_cluster_user_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_user_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterUserCredential"} # type: ignore + + + @distributed_trace + def list_cluster_monitoring_user_credentials( + self, + resource_group_name: str, + resource_name: str, + server_fqdn: Optional[str] = None, + **kwargs: Any + ) -> _models.CredentialResults: + """Lists the cluster monitoring user credentials of a managed cluster. + + Lists the cluster monitoring user credentials of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param server_fqdn: server fqdn type for credentials to be returned. Default value is None. + :type server_fqdn: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: CredentialResults, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.CredentialResults + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.CredentialResults] + + + request = build_list_cluster_monitoring_user_credentials_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + server_fqdn=server_fqdn, + template_url=self.list_cluster_monitoring_user_credentials.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('CredentialResults', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list_cluster_monitoring_user_credentials.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/listClusterMonitoringUserCredential"} # type: ignore + + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.ManagedCluster: + """Gets a managed cluster. + + Gets a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: ManagedCluster, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + def _create_or_update_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedCluster, + **kwargs: Any + ) -> _models.ManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + _json = self._serialize.body(parameters, 'ManagedCluster') + + request = build_create_or_update_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._create_or_update_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedCluster, + **kwargs: Any + ) -> LROPoller[_models.ManagedCluster]: + """Creates or updates a managed cluster. + + Creates or updates a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The managed cluster to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either ManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._create_or_update_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + def _update_tags_initial( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.ManagedCluster: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._update_tags_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('ManagedCluster', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> LROPoller[_models.ManagedCluster]: + """Updates tags on a managed cluster. + + Updates tags on a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update Managed Cluster Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either ManagedCluster or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedCluster] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.ManagedCluster] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._update_tags_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('ManagedCluster', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + ignore_pod_disruption_budget: Optional[bool] = None, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes a managed cluster. + + Deletes a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param ignore_pod_disruption_budget: ignore-pod-disruption-budget=true to delete those pods on + a node without considering Pod Disruption Budget. Default value is None. + :type ignore_pod_disruption_budget: bool + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + ignore_pod_disruption_budget=ignore_pod_disruption_budget, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}"} # type: ignore + + def _reset_service_principal_profile_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterServicePrincipalProfile, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + + _json = self._serialize.body(parameters, 'ManagedClusterServicePrincipalProfile') + + request = build_reset_service_principal_profile_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._reset_service_principal_profile_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _reset_service_principal_profile_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetServicePrincipalProfile"} # type: ignore + + + @distributed_trace + def begin_reset_service_principal_profile( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterServicePrincipalProfile, + **kwargs: Any + ) -> LROPoller[None]: + """Reset the Service Principal Profile of a managed cluster. + + This action cannot be performed on a cluster that is not using a service principal. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The service principal profile to set on the managed cluster. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterServicePrincipalProfile + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._reset_service_principal_profile_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_reset_service_principal_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetServicePrincipalProfile"} # type: ignore + + def _reset_aad_profile_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterAADProfile, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + + _json = self._serialize.body(parameters, 'ManagedClusterAADProfile') + + request = build_reset_aad_profile_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._reset_aad_profile_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _reset_aad_profile_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + + + @distributed_trace + def begin_reset_aad_profile( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + parameters: _models.ManagedClusterAADProfile, + **kwargs: Any + ) -> LROPoller[None]: + """Reset the AAD Profile of a managed cluster. + + Reset the AAD Profile of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The AAD profile to set on the Managed Cluster. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.ManagedClusterAADProfile + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._reset_aad_profile_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + parameters=parameters, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_reset_aad_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + + def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_rotate_cluster_certificates_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._rotate_cluster_certificates_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _rotate_cluster_certificates_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateClusterCertificates"} # type: ignore + + + @distributed_trace + def begin_rotate_cluster_certificates( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Rotates the certificates of a managed cluster. + + See `Certificate rotation `_ for + more details about rotating managed cluster certificates. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._rotate_cluster_certificates_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_rotate_cluster_certificates.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateClusterCertificates"} # type: ignore + + def _rotate_service_account_signing_keys_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_rotate_service_account_signing_keys_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._rotate_service_account_signing_keys_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _rotate_service_account_signing_keys_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateServiceAccountSigningKeys"} # type: ignore + + + @distributed_trace + def begin_rotate_service_account_signing_keys( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Rotates the service account signing keys of a managed cluster. + + Rotates the service account signing keys of a managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._rotate_service_account_signing_keys_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_rotate_service_account_signing_keys.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/rotateServiceAccountSigningKeys"} # type: ignore + + def _stop_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_stop_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._stop_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _stop_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/stop"} # type: ignore + + + @distributed_trace + def begin_stop( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Stops a Managed Cluster. + + This can only be performed on Azure Virtual Machine Scale set backed clusters. Stopping a + cluster stops the control plane and agent nodes entirely, while maintaining all object and + cluster state. A cluster does not accrue charges while it is stopped. See `stopping a cluster + `_ for more details about stopping a + cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._stop_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_stop.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/stop"} # type: ignore + + def _start_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_start_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self._start_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [202, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _start_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/start"} # type: ignore + + + @distributed_trace + def begin_start( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Starts a previously stopped Managed Cluster. + + See `starting a cluster `_ for more + details about starting a cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._start_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_start.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/start"} # type: ignore + + def _run_command_initial( + self, + resource_group_name: str, + resource_name: str, + request_payload: _models.RunCommandRequest, + **kwargs: Any + ) -> Optional[_models.RunCommandResult]: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] + + _json = self._serialize.body(request_payload, 'RunCommandRequest') + + request = build_run_command_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self._run_command_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('RunCommandResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + _run_command_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/runCommand"} # type: ignore + + + @distributed_trace + def begin_run_command( + self, + resource_group_name: str, + resource_name: str, + request_payload: _models.RunCommandRequest, + **kwargs: Any + ) -> LROPoller[_models.RunCommandResult]: + """Submits a command to run against the Managed Cluster. + + AKS will create a pod to run the command. This is primarily useful for private clusters. For + more information see `AKS Run Command + `_. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param request_payload: The run command request. + :type request_payload: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandRequest + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either RunCommandResult or the result of + cls(response) + :rtype: + ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.RunCommandResult] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._run_command_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + request_payload=request_payload, + api_version=api_version, + content_type=content_type, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + deserialized = self._deserialize('RunCommandResult', pipeline_response) + if cls: + return cls(pipeline_response, deserialized, {}) + return deserialized + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_run_command.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/runCommand"} # type: ignore + + @distributed_trace + def get_command_result( + self, + resource_group_name: str, + resource_name: str, + command_id: str, + **kwargs: Any + ) -> Optional[_models.RunCommandResult]: + """Gets the results of a command which has been run on the Managed Cluster. + + Gets the results of a command which has been run on the Managed Cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param command_id: Id of the command. + :type command_id: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: RunCommandResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.RunCommandResult or None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[Optional[_models.RunCommandResult]] + + + request = build_get_command_result_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + command_id=command_id, + api_version=api_version, + template_url=self.get_command_result.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 202]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = None + if response.status_code == 200: + deserialized = self._deserialize('RunCommandResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get_command_result.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/commandResults/{commandId}"} # type: ignore + + + @distributed_trace + def list_outbound_network_dependencies_endpoints( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> Iterable[_models.OutboundEnvironmentEndpointCollection]: + """Gets a list of egress endpoints (network endpoints of all outbound dependencies) in the + specified managed cluster. + + Gets a list of egress endpoints (network endpoints of all outbound dependencies) in the + specified managed cluster. The operation returns properties of each egress endpoint. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OutboundEnvironmentEndpointCollection or the + result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OutboundEnvironmentEndpointCollection] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OutboundEnvironmentEndpointCollection] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_outbound_network_dependencies_endpoints_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list_outbound_network_dependencies_endpoints.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_outbound_network_dependencies_endpoints_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("OutboundEnvironmentEndpointCollection", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_outbound_network_dependencies_endpoints.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/outboundNetworkDependenciesEndpoints"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py new file mode 100644 index 00000000000..373d8ea0154 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_operations.py @@ -0,0 +1,153 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/providers/Microsoft.ContainerService/operations") + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class Operations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`operations` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.OperationListResult]: + """Gets a list of operations. + + Gets a list of operations. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either OperationListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.OperationListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.OperationListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("OperationListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/providers/Microsoft.ContainerService/operations"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py new file mode 100644 index 00000000000..0ad201a8c58 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_patch.py @@ -0,0 +1,19 @@ +# ------------------------------------ +# Copyright (c) Microsoft Corporation. +# Licensed under the MIT License. +# ------------------------------------ +"""Customize generated code here. + +Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize +""" +from typing import List + +__all__: List[str] = [] # Add all objects you want publicly available to users at this package level + +def patch_sdk(): + """Do not remove from this file. + + `patch_sdk` is a last resort escape hatch that allows you to do customizations + you can't accomplish using the techniques described in + https://aka.ms/azsdk/python/dpcodegen/python/customize + """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py new file mode 100644 index 00000000000..d65c073c21b --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_endpoint_connections_operations.py @@ -0,0 +1,552 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar, Union, cast + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.polling import LROPoller, NoPolling, PollingMethod +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat +from azure.mgmt.core.polling.arm_polling import ARMPolling + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "privateEndpointConnectionName": _SERIALIZER.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_update_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + *, + json: Optional[_models.PrivateEndpointConnection] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "privateEndpointConnectionName": _SERIALIZER.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request_initial( + subscription_id: str, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "privateEndpointConnectionName": _SERIALIZER.url("private_endpoint_connection_name", private_endpoint_connection_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class PrivateEndpointConnectionsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`private_endpoint_connections` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.PrivateEndpointConnectionListResult: + """Gets a list of private endpoint connections in the specified managed cluster. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnectionListResult, or the result of cls(response) + :rtype: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnectionListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnectionListResult] + + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnectionListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections"} # type: ignore + + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> _models.PrivateEndpointConnection: + """Gets the specified private endpoint connection. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + @distributed_trace + def update( + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + parameters: _models.PrivateEndpointConnection, + **kwargs: Any + ) -> _models.PrivateEndpointConnection: + """Updates a private endpoint connection. + + Updates a private endpoint connection. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :param parameters: The updated private endpoint connection. + :type parameters: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateEndpointConnection, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateEndpointConnection + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateEndpointConnection] + + _json = self._serialize.body(parameters, 'PrivateEndpointConnection') + + request = build_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateEndpointConnection', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + def _delete_initial( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> None: + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request_initial( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + template_url=self._delete_initial.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore + + + @distributed_trace + def begin_delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + private_endpoint_connection_name: str, + **kwargs: Any + ) -> LROPoller[None]: + """Deletes a private endpoint connection. + + Deletes a private endpoint connection. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param private_endpoint_connection_name: The name of the private endpoint connection. + :type private_endpoint_connection_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :keyword str continuation_token: A continuation token to restart a poller from a saved state. + :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this + operation to not poll, or pass in your own initialized polling object for a personal polling + strategy. + :paramtype polling: bool or ~azure.core.polling.PollingMethod + :keyword int polling_interval: Default waiting time between two polls for LRO operations if no + Retry-After header is present. + :return: An instance of LROPoller that returns either None or the result of cls(response) + :rtype: ~azure.core.polling.LROPoller[None] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] + lro_delay = kwargs.pop( + 'polling_interval', + self._config.polling_interval + ) + cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] + if cont_token is None: + raw_result = self._delete_initial( # type: ignore + resource_group_name=resource_group_name, + resource_name=resource_name, + private_endpoint_connection_name=private_endpoint_connection_name, + api_version=api_version, + cls=lambda x,y,z: x, + headers=_headers, + params=_params, + **kwargs + ) + kwargs.pop('error_map', None) + + def get_long_running_output(pipeline_response): + if cls: + return cls(pipeline_response, None, {}) + + + if polling is True: + polling_method = cast(PollingMethod, ARMPolling( + lro_delay, + + + **kwargs + )) # type: PollingMethod + elif polling is False: polling_method = cast(PollingMethod, NoPolling()) + else: polling_method = polling + if cont_token: + return LROPoller.from_continuation_token( + polling_method=polling_method, + continuation_token=cont_token, + client=self._client, + deserialization_callback=get_long_running_output + ) + return LROPoller(self._client, raw_result, get_long_running_output, polling_method) + + begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateEndpointConnections/{privateEndpointConnectionName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py new file mode 100644 index 00000000000..189d27c10e6 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_private_link_resources_operations.py @@ -0,0 +1,149 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateLinkResources") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class PrivateLinkResourcesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`private_link_resources` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.PrivateLinkResourcesListResult: + """Gets a list of private link resources in the specified managed cluster. + + To learn more about private clusters, see: + https://docs.microsoft.com/azure/aks/private-clusters. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateLinkResourcesListResult, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResourcesListResult + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResourcesListResult] + + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateLinkResourcesListResult', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/privateLinkResources"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py new file mode 100644 index 00000000000..e4f5b2f7e78 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_resolve_private_link_service_id_operations.py @@ -0,0 +1,163 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_post_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.PrivateLinkResource] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resolvePrivateLinkServiceId") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + +class ResolvePrivateLinkServiceIdOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`resolve_private_link_service_id` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def post( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.PrivateLinkResource, + **kwargs: Any + ) -> _models.PrivateLinkResource: + """Gets the private link service ID for the specified managed cluster. + + Gets the private link service ID for the specified managed cluster. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters required in order to resolve a private link service ID. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :keyword callable cls: A custom type or function that will be passed the direct response + :return: PrivateLinkResource, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.PrivateLinkResource + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.PrivateLinkResource] + + _json = self._serialize.body(parameters, 'PrivateLinkResource') + + request = build_post_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.post.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('PrivateLinkResource', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + post.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resolvePrivateLinkServiceId"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py new file mode 100644 index 00000000000..3a0ec2d61b4 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_snapshots_operations.py @@ -0,0 +1,720 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/snapshots") + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_list_by_resource_group_request( + subscription_id: str, + resource_group_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.Snapshot] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_update_tags_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + *, + json: Optional[_models.TagsObject] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PATCH", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class SnapshotsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`snapshots` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + **kwargs: Any + ) -> Iterable[_models.SnapshotListResult]: + """Gets a list of snapshots in the specified subscription. + + Gets a list of snapshots in the specified subscription. + + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SnapshotListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("SnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/snapshots"} # type: ignore + + @distributed_trace + def list_by_resource_group( + self, + resource_group_name: str, + **kwargs: Any + ) -> Iterable[_models.SnapshotListResult]: + """Lists snapshots in the specified subscription and resource group. + + Lists snapshots in the specified subscription and resource group. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either SnapshotListResult or the result of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.SnapshotListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.SnapshotListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=self.list_by_resource_group.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_by_resource_group_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("SnapshotListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> _models.Snapshot: + """Gets a snapshot. + + Gets a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def create_or_update( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.Snapshot, + **kwargs: Any + ) -> _models.Snapshot: + """Creates or updates a snapshot. + + Creates or updates a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: The snapshot to create or update. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + _json = self._serialize.body(parameters, 'Snapshot') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 201]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if response.status_code == 200: + deserialized = self._deserialize('Snapshot', pipeline_response) + + if response.status_code == 201: + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def update_tags( + self, + resource_group_name: str, + resource_name: str, + parameters: _models.TagsObject, + **kwargs: Any + ) -> _models.Snapshot: + """Updates tags on a snapshot. + + Updates tags on a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param parameters: Parameters supplied to the Update snapshot Tags operation. + :type parameters: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TagsObject + :keyword callable cls: A custom type or function that will be passed the direct response + :return: Snapshot, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.Snapshot + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.Snapshot] + + _json = self._serialize.body(parameters, 'TagsObject') + + request = build_update_tags_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.update_tags.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('Snapshot', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + + + @distributed_trace + def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Deletes a snapshot. + + Deletes a snapshot. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/snapshots/{resourceName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py new file mode 100644 index 00000000000..5d954e2a98c --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_role_bindings_operations.py @@ -0,0 +1,512 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_get_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "trustedAccessRoleBindingName": _SERIALIZER.url("trusted_access_role_binding_name", trusted_access_role_binding_name, 'str', max_length=36, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + +def build_create_or_update_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + *, + json: Optional[_models.TrustedAccessRoleBinding] = None, + content: Any = None, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "trustedAccessRoleBindingName": _SERIALIZER.url("trusted_access_role_binding_name", trusted_access_role_binding_name, 'str', max_length=36, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + if content_type is not None: + _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="PUT", + url=_url, + params=_params, + headers=_headers, + json=json, + content=content, + **kwargs + ) + + +def build_delete_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "trustedAccessRoleBindingName": _SERIALIZER.url("trusted_access_role_binding_name", trusted_access_role_binding_name, 'str', max_length=36, min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="DELETE", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class TrustedAccessRoleBindingsOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`trusted_access_role_bindings` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> Iterable[_models.TrustedAccessRoleBindingListResult]: + """List trusted access role bindings. + + List trusted access role bindings. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TrustedAccessRoleBindingListResult or the result + of cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBindingListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBindingListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("TrustedAccessRoleBindingListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings"} # type: ignore + + @distributed_trace + def get( + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any + ) -> _models.TrustedAccessRoleBinding: + """Get a trusted access role binding. + + Get a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TrustedAccessRoleBinding, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] + + + request = build_get_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + template_url=self.get.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TrustedAccessRoleBinding', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + + + @distributed_trace + def create_or_update( + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + trusted_access_role_binding: _models.TrustedAccessRoleBinding, + **kwargs: Any + ) -> _models.TrustedAccessRoleBinding: + """Create or update a trusted access role binding. + + Create or update a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :param trusted_access_role_binding: A trusted access role binding. + :type trusted_access_role_binding: + ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :keyword callable cls: A custom type or function that will be passed the direct response + :return: TrustedAccessRoleBinding, or the result of cls(response) + :rtype: ~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleBinding + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleBinding] + + _json = self._serialize.body(trusted_access_role_binding, 'TrustedAccessRoleBinding') + + request = build_create_or_update_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + content_type=content_type, + json=_json, + template_url=self.create_or_update.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + deserialized = self._deserialize('TrustedAccessRoleBinding', pipeline_response) + + if cls: + return cls(pipeline_response, deserialized, {}) + + return deserialized + + create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + + + @distributed_trace + def delete( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + trusted_access_role_binding_name: str, + **kwargs: Any + ) -> None: + """Delete a trusted access role binding. + + Delete a trusted access role binding. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param trusted_access_role_binding_name: The name of trusted access role binding. + :type trusted_access_role_binding_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_delete_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + trusted_access_role_binding_name=trusted_access_role_binding_name, + api_version=api_version, + template_url=self.delete.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200, 204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/trustedAccessRoleBindings/{trustedAccessRoleBindingName}"} # type: ignore + diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py new file mode 100644 index 00000000000..982e0448952 --- /dev/null +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_06_02_preview/operations/_trusted_access_roles_operations.py @@ -0,0 +1,169 @@ +# pylint: disable=too-many-lines +# coding=utf-8 +# -------------------------------------------------------------------------- +# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar + +from msrest import Serializer + +from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error +from azure.core.paging import ItemPaged +from azure.core.pipeline import PipelineResponse +from azure.core.pipeline.transport import HttpResponse +from azure.core.rest import HttpRequest +from azure.core.tracing.decorator import distributed_trace +from azure.core.utils import case_insensitive_dict +from azure.mgmt.core.exceptions import ARMErrorFormat + +from .. import models as _models +from .._vendor import _convert_request, _format_url_section +T = TypeVar('T') +ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] + +_SERIALIZER = Serializer() +_SERIALIZER.client_side_validation = False + +def build_list_request( + subscription_id: str, + location: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/trustedAccessRoles") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "location": _SERIALIZER.url("location", location, 'str', min_length=1), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="GET", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + +class TrustedAccessRolesOperations: + """ + .. warning:: + **DO NOT** instantiate this class directly. + + Instead, you should access the following operations through + :class:`~azure.mgmt.containerservice.v2022_06_02_preview.ContainerServiceClient`'s + :attr:`trusted_access_roles` attribute. + """ + + models = _models + + def __init__(self, *args, **kwargs): + input_args = list(args) + self._client = input_args.pop(0) if input_args else kwargs.pop("client") + self._config = input_args.pop(0) if input_args else kwargs.pop("config") + self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") + self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + + + @distributed_trace + def list( + self, + location: str, + **kwargs: Any + ) -> Iterable[_models.TrustedAccessRoleListResult]: + """List supported trusted access roles. + + List supported trusted access roles. + + :param location: The name of Azure region. + :type location: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: An iterator like instance of either TrustedAccessRoleListResult or the result of + cls(response) + :rtype: + ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2022_06_02_preview.models.TrustedAccessRoleListResult] + :raises: ~azure.core.exceptions.HttpResponseError + """ + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-06-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[_models.TrustedAccessRoleListResult] + + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + def prepare_request(next_link=None): + if not next_link: + + request = build_list_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + template_url=self.list.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + else: + + request = build_list_request( + subscription_id=self._config.subscription_id, + location=location, + api_version=api_version, + template_url=next_link, + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + request.method = "GET" + return request + + def extract_data(pipeline_response): + deserialized = self._deserialize("TrustedAccessRoleListResult", pipeline_response) + list_of_elem = deserialized.value + if cls: + list_of_elem = cls(list_of_elem) + return deserialized.next_link or None, iter(list_of_elem) + + def get_next(next_link=None): + request = prepare_request(next_link) + + pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [200]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + return pipeline_response + + + return ItemPaged( + get_next, extract_data + ) + list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/locations/{location}/trustedAccessRoles"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py index 71a75097bd4..6e88ff127d5 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_agent_pools_operations.py @@ -22,7 +22,7 @@ from ... import models as _models from ..._vendor import _convert_request -from ...operations._agent_pools_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_available_agent_pool_versions_request, build_get_request, build_get_upgrade_profile_request, build_list_request, build_upgrade_node_image_version_request_initial +from ...operations._agent_pools_operations import build_abort_latest_operation_request, build_create_or_update_request_initial, build_delete_request_initial, build_get_available_agent_pool_versions_request, build_get_request, build_get_upgrade_profile_request, build_list_request, build_upgrade_node_image_version_request_initial T = TypeVar('T') ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -46,6 +46,75 @@ def __init__(self, *args, **kwargs) -> None: self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + @distributed_trace_async + async def abort_latest_operation( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> None: + """Aborts last operation running on agent pool. + + Aborting last running operation on agent pool. We return a 204 no content code here to indicate + that the operation has been accepted and an abort will be attempted but is not guaranteed to + complete successfully. Please look up the provisioning state of the agent pool to keep track of + whether it changes to Canceled. A canceled provisioning state indicates that the abort was + successful. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_abort_latest_operation_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.abort_latest_operation.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + abort_latest_operation.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/agentPools/{agentPoolName}/abort"} # type: ignore + + @distributed_trace def list( self, diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py index 824779ef48e..030bf4760ec 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/aio/operations/_managed_clusters_operations.py @@ -22,7 +22,7 @@ from ... import models as _models from ..._vendor import _convert_request -from ...operations._managed_clusters_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_access_profile_request, build_get_command_result_request, build_get_os_options_request, build_get_request, build_get_upgrade_profile_request, build_list_by_resource_group_request, build_list_cluster_admin_credentials_request, build_list_cluster_monitoring_user_credentials_request, build_list_cluster_user_credentials_request, build_list_outbound_network_dependencies_endpoints_request, build_list_request, build_reset_aad_profile_request_initial, build_reset_service_principal_profile_request_initial, build_rotate_cluster_certificates_request_initial, build_rotate_service_account_signing_keys_request_initial, build_run_command_request_initial, build_start_request_initial, build_stop_request_initial, build_update_tags_request_initial +from ...operations._managed_clusters_operations import build_abort_latest_operation_request, build_create_or_update_request_initial, build_delete_request_initial, build_get_access_profile_request, build_get_command_result_request, build_get_os_options_request, build_get_request, build_get_upgrade_profile_request, build_list_by_resource_group_request, build_list_cluster_admin_credentials_request, build_list_cluster_monitoring_user_credentials_request, build_list_cluster_user_credentials_request, build_list_outbound_network_dependencies_endpoints_request, build_list_request, build_reset_aad_profile_request_initial, build_reset_service_principal_profile_request_initial, build_rotate_cluster_certificates_request_initial, build_rotate_service_account_signing_keys_request_initial, build_run_command_request_initial, build_start_request_initial, build_stop_request_initial, build_update_tags_request_initial T = TypeVar('T') ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] @@ -1379,6 +1379,71 @@ def get_long_running_output(pipeline_response): begin_reset_aad_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + @distributed_trace_async + async def abort_latest_operation( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Aborts last operation running on managed cluster. + + Aborting last running operation on managed cluster. We return a 204 no content code here to + indicate that the operation has been accepted and an abort will be attempted but is not + guaranteed to complete successfully. Please look up the provisioning state of the managed + cluster to keep track of whether it changes to Canceled. A canceled provisioning state + indicates that the abort was successful. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_abort_latest_operation_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.abort_latest_operation.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + abort_latest_operation.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/abort"} # type: ignore + + async def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent-return-statements self, resource_group_name: str, diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py index 71cc173f171..76e35bd3256 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/__init__.py @@ -53,8 +53,9 @@ from ._models_py3 import ManagedClusterAgentPoolProfile from ._models_py3 import ManagedClusterAgentPoolProfileProperties from ._models_py3 import ManagedClusterAutoUpgradeProfile -from ._models_py3 import ManagedClusterAzureMonitorMetricsProfile -from ._models_py3 import ManagedClusterAzureMonitorMetricsProfileMetrics +from ._models_py3 import ManagedClusterAzureMonitorProfile +from ._models_py3 import ManagedClusterAzureMonitorProfileKubeStateMetrics +from ._models_py3 import ManagedClusterAzureMonitorProfileMetrics from ._models_py3 import ManagedClusterHTTPProxyConfig from ._models_py3 import ManagedClusterIdentity from ._models_py3 import ManagedClusterIngressProfile @@ -81,6 +82,7 @@ from ._models_py3 import ManagedClusterSecurityProfile from ._models_py3 import ManagedClusterSecurityProfileDefender from ._models_py3 import ManagedClusterSecurityProfileDefenderSecurityMonitoring +from ._models_py3 import ManagedClusterSecurityProfileImageCleaner from ._models_py3 import ManagedClusterSecurityProfileNodeRestriction from ._models_py3 import ManagedClusterSecurityProfileWorkloadIdentity from ._models_py3 import ManagedClusterServicePrincipalProfile @@ -229,8 +231,9 @@ 'ManagedClusterAgentPoolProfile', 'ManagedClusterAgentPoolProfileProperties', 'ManagedClusterAutoUpgradeProfile', - 'ManagedClusterAzureMonitorMetricsProfile', - 'ManagedClusterAzureMonitorMetricsProfileMetrics', + 'ManagedClusterAzureMonitorProfile', + 'ManagedClusterAzureMonitorProfileKubeStateMetrics', + 'ManagedClusterAzureMonitorProfileMetrics', 'ManagedClusterHTTPProxyConfig', 'ManagedClusterIdentity', 'ManagedClusterIngressProfile', @@ -257,6 +260,7 @@ 'ManagedClusterSecurityProfile', 'ManagedClusterSecurityProfileDefender', 'ManagedClusterSecurityProfileDefenderSecurityMonitoring', + 'ManagedClusterSecurityProfileImageCleaner', 'ManagedClusterSecurityProfileNodeRestriction', 'ManagedClusterSecurityProfileWorkloadIdentity', 'ManagedClusterServicePrincipalProfile', diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py index 057ed9ee143..528cfd64ca8 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_container_service_client_enums.py @@ -525,8 +525,12 @@ class PublicNetworkAccess(str, Enum, metaclass=CaseInsensitiveEnumMeta): """Allow or deny public network access for AKS """ + #: Inbound/Outbound to the managedCluster is allowed. ENABLED = "Enabled" + #: Inbound traffic to managedCluster is disabled, traffic from managedCluster is allowed. DISABLED = "Disabled" + #: Inbound/Outbound traffic is managed by Microsoft.Network/NetworkSecurityPerimeters. + SECURED_BY_PERIMETER = "SecuredByPerimeter" class ResourceIdentityType(str, Enum, metaclass=CaseInsensitiveEnumMeta): """For more information see `use managed identities in AKS diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py index ca225df9c98..78020ccaf39 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/models/_models_py3.py @@ -2667,17 +2667,16 @@ class ManagedCluster(TrackedResource): :vartype ingress_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfile :ivar public_network_access: Allow or deny public network access for AKS. Known values are: - "Enabled", "Disabled". + "Enabled", "Disabled", "SecuredByPerimeter". :vartype public_network_access: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.PublicNetworkAccess :ivar workload_auto_scaler_profile: Workload Auto-scaler profile for the container service cluster. :vartype workload_auto_scaler_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfile - :ivar azure_monitor_metrics_profile: Prometheus addon profile for the container service - cluster. - :vartype azure_monitor_metrics_profile: - ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfile + :ivar azure_monitor_profile: Prometheus addon profile for the container service cluster. + :vartype azure_monitor_profile: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfile """ _validation = { @@ -2742,7 +2741,7 @@ class ManagedCluster(TrackedResource): 'ingress_profile': {'key': 'properties.ingressProfile', 'type': 'ManagedClusterIngressProfile'}, 'public_network_access': {'key': 'properties.publicNetworkAccess', 'type': 'str'}, 'workload_auto_scaler_profile': {'key': 'properties.workloadAutoScalerProfile', 'type': 'ManagedClusterWorkloadAutoScalerProfile'}, - 'azure_monitor_metrics_profile': {'key': 'properties.azureMonitorMetricsProfile', 'type': 'ManagedClusterAzureMonitorMetricsProfile'}, + 'azure_monitor_profile': {'key': 'properties.azureMonitorProfile', 'type': 'ManagedClusterAzureMonitorProfile'}, } def __init__( @@ -2783,7 +2782,7 @@ def __init__( ingress_profile: Optional["_models.ManagedClusterIngressProfile"] = None, public_network_access: Optional[Union[str, "_models.PublicNetworkAccess"]] = None, workload_auto_scaler_profile: Optional["_models.ManagedClusterWorkloadAutoScalerProfile"] = None, - azure_monitor_metrics_profile: Optional["_models.ManagedClusterAzureMonitorMetricsProfile"] = None, + azure_monitor_profile: Optional["_models.ManagedClusterAzureMonitorProfile"] = None, **kwargs ): """ @@ -2891,17 +2890,16 @@ def __init__( :paramtype ingress_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterIngressProfile :keyword public_network_access: Allow or deny public network access for AKS. Known values are: - "Enabled", "Disabled". + "Enabled", "Disabled", "SecuredByPerimeter". :paramtype public_network_access: str or ~azure.mgmt.containerservice.v2022_07_02_preview.models.PublicNetworkAccess :keyword workload_auto_scaler_profile: Workload Auto-scaler profile for the container service cluster. :paramtype workload_auto_scaler_profile: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterWorkloadAutoScalerProfile - :keyword azure_monitor_metrics_profile: Prometheus addon profile for the container service - cluster. - :paramtype azure_monitor_metrics_profile: - ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfile + :keyword azure_monitor_profile: Prometheus addon profile for the container service cluster. + :paramtype azure_monitor_profile: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfile """ super(ManagedCluster, self).__init__(tags=tags, location=location, **kwargs) self.sku = sku @@ -2944,7 +2942,7 @@ def __init__( self.ingress_profile = ingress_profile self.public_network_access = public_network_access self.workload_auto_scaler_profile = workload_auto_scaler_profile - self.azure_monitor_metrics_profile = azure_monitor_metrics_profile + self.azure_monitor_profile = azure_monitor_profile class ManagedClusterAADProfile(msrest.serialization.Model): @@ -4239,40 +4237,36 @@ def __init__( self.upgrade_channel = upgrade_channel -class ManagedClusterAzureMonitorMetricsProfile(msrest.serialization.Model): +class ManagedClusterAzureMonitorProfile(msrest.serialization.Model): """Prometheus addon profile for the container service cluster. - :ivar metrics: Metrics profile for the Prometheus service addon. + :ivar metrics: Metrics profile for the prometheus service addon. :vartype metrics: - ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfileMetrics + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfileMetrics """ _attribute_map = { - 'metrics': {'key': 'Metrics', 'type': 'ManagedClusterAzureMonitorMetricsProfileMetrics'}, + 'metrics': {'key': 'metrics', 'type': 'ManagedClusterAzureMonitorProfileMetrics'}, } def __init__( self, *, - metrics: Optional["_models.ManagedClusterAzureMonitorMetricsProfileMetrics"] = None, + metrics: Optional["_models.ManagedClusterAzureMonitorProfileMetrics"] = None, **kwargs ): """ - :keyword metrics: Metrics profile for the Prometheus service addon. + :keyword metrics: Metrics profile for the prometheus service addon. :paramtype metrics: - ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorMetricsProfileMetrics + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfileMetrics """ - super(ManagedClusterAzureMonitorMetricsProfile, self).__init__(**kwargs) + super(ManagedClusterAzureMonitorProfile, self).__init__(**kwargs) self.metrics = metrics -class ManagedClusterAzureMonitorMetricsProfileMetrics(msrest.serialization.Model): - """Metrics profile for the Prometheus service addon. - - All required parameters must be populated in order to send to Azure. +class ManagedClusterAzureMonitorProfileKubeStateMetrics(msrest.serialization.Model): + """Kube State Metrics for prometheus addon profile for the container service cluster. - :ivar enabled: Required. Whether to enable the Prometheus collector. - :vartype enabled: bool :ivar metric_labels_allowlist: Comma-separated list of Kubernetes annotations keys that will be used in the resource's labels metric. :vartype metric_labels_allowlist: str @@ -4281,12 +4275,7 @@ class ManagedClusterAzureMonitorMetricsProfileMetrics(msrest.serialization.Model :vartype metric_annotations_allow_list: str """ - _validation = { - 'enabled': {'required': True}, - } - _attribute_map = { - 'enabled': {'key': 'enabled', 'type': 'bool'}, 'metric_labels_allowlist': {'key': 'metricLabelsAllowlist', 'type': 'str'}, 'metric_annotations_allow_list': {'key': 'metricAnnotationsAllowList', 'type': 'str'}, } @@ -4294,14 +4283,11 @@ class ManagedClusterAzureMonitorMetricsProfileMetrics(msrest.serialization.Model def __init__( self, *, - enabled: bool, metric_labels_allowlist: Optional[str] = None, metric_annotations_allow_list: Optional[str] = None, **kwargs ): """ - :keyword enabled: Required. Whether to enable the Prometheus collector. - :paramtype enabled: bool :keyword metric_labels_allowlist: Comma-separated list of Kubernetes annotations keys that will be used in the resource's labels metric. :paramtype metric_labels_allowlist: str @@ -4309,12 +4295,53 @@ def __init__( keys that will be used in the resource's labels metric. :paramtype metric_annotations_allow_list: str """ - super(ManagedClusterAzureMonitorMetricsProfileMetrics, self).__init__(**kwargs) - self.enabled = enabled + super(ManagedClusterAzureMonitorProfileKubeStateMetrics, self).__init__(**kwargs) self.metric_labels_allowlist = metric_labels_allowlist self.metric_annotations_allow_list = metric_annotations_allow_list +class ManagedClusterAzureMonitorProfileMetrics(msrest.serialization.Model): + """Metrics profile for the prometheus service addon. + + All required parameters must be populated in order to send to Azure. + + :ivar enabled: Required. Whether to enable the Prometheus collector. + :vartype enabled: bool + :ivar kube_state_metrics: Kube State Metrics for prometheus addon profile for the container + service cluster. + :vartype kube_state_metrics: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfileKubeStateMetrics + """ + + _validation = { + 'enabled': {'required': True}, + } + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'kube_state_metrics': {'key': 'kubeStateMetrics', 'type': 'ManagedClusterAzureMonitorProfileKubeStateMetrics'}, + } + + def __init__( + self, + *, + enabled: bool, + kube_state_metrics: Optional["_models.ManagedClusterAzureMonitorProfileKubeStateMetrics"] = None, + **kwargs + ): + """ + :keyword enabled: Required. Whether to enable the Prometheus collector. + :paramtype enabled: bool + :keyword kube_state_metrics: Kube State Metrics for prometheus addon profile for the container + service cluster. + :paramtype kube_state_metrics: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterAzureMonitorProfileKubeStateMetrics + """ + super(ManagedClusterAzureMonitorProfileMetrics, self).__init__(**kwargs) + self.enabled = enabled + self.kube_state_metrics = kube_state_metrics + + class ManagedClusterHTTPProxyConfig(msrest.serialization.Model): """Cluster HTTP proxy configuration. @@ -5433,6 +5460,9 @@ class ManagedClusterSecurityProfile(msrest.serialization.Model): `_ settings for the security profile. :vartype workload_identity: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + :ivar image_cleaner: ImageCleaner settings for the security profile. + :vartype image_cleaner: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileImageCleaner :ivar node_restriction: `Node Restriction `_ settings for the security profile. @@ -5444,6 +5474,7 @@ class ManagedClusterSecurityProfile(msrest.serialization.Model): 'defender': {'key': 'defender', 'type': 'ManagedClusterSecurityProfileDefender'}, 'azure_key_vault_kms': {'key': 'azureKeyVaultKms', 'type': 'AzureKeyVaultKms'}, 'workload_identity': {'key': 'workloadIdentity', 'type': 'ManagedClusterSecurityProfileWorkloadIdentity'}, + 'image_cleaner': {'key': 'imageCleaner', 'type': 'ManagedClusterSecurityProfileImageCleaner'}, 'node_restriction': {'key': 'nodeRestriction', 'type': 'ManagedClusterSecurityProfileNodeRestriction'}, } @@ -5453,6 +5484,7 @@ def __init__( defender: Optional["_models.ManagedClusterSecurityProfileDefender"] = None, azure_key_vault_kms: Optional["_models.AzureKeyVaultKms"] = None, workload_identity: Optional["_models.ManagedClusterSecurityProfileWorkloadIdentity"] = None, + image_cleaner: Optional["_models.ManagedClusterSecurityProfileImageCleaner"] = None, node_restriction: Optional["_models.ManagedClusterSecurityProfileNodeRestriction"] = None, **kwargs ): @@ -5469,6 +5501,9 @@ def __init__( `_ settings for the security profile. :paramtype workload_identity: ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileWorkloadIdentity + :keyword image_cleaner: ImageCleaner settings for the security profile. + :paramtype image_cleaner: + ~azure.mgmt.containerservice.v2022_07_02_preview.models.ManagedClusterSecurityProfileImageCleaner :keyword node_restriction: `Node Restriction `_ settings for the security profile. @@ -5479,6 +5514,7 @@ def __init__( self.defender = defender self.azure_key_vault_kms = azure_key_vault_kms self.workload_identity = workload_identity + self.image_cleaner = image_cleaner self.node_restriction = node_restriction @@ -5549,6 +5585,38 @@ def __init__( self.enabled = enabled +class ManagedClusterSecurityProfileImageCleaner(msrest.serialization.Model): + """ImageCleaner removes unused images from nodes, freeing up disk space and helping to reduce attack surface area. Here are settings for the security profile. + + :ivar enabled: Whether to enable ImageCleaner on AKS cluster. + :vartype enabled: bool + :ivar interval_hours: ImageCleaner scanning interval. + :vartype interval_hours: int + """ + + _attribute_map = { + 'enabled': {'key': 'enabled', 'type': 'bool'}, + 'interval_hours': {'key': 'intervalHours', 'type': 'int'}, + } + + def __init__( + self, + *, + enabled: Optional[bool] = None, + interval_hours: Optional[int] = None, + **kwargs + ): + """ + :keyword enabled: Whether to enable ImageCleaner on AKS cluster. + :paramtype enabled: bool + :keyword interval_hours: ImageCleaner scanning interval. + :paramtype interval_hours: int + """ + super(ManagedClusterSecurityProfileImageCleaner, self).__init__(**kwargs) + self.enabled = enabled + self.interval_hours = interval_hours + + class ManagedClusterSecurityProfileNodeRestriction(msrest.serialization.Model): """Node Restriction settings for the security profile. diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py index c9a75360e1c..6375f27c034 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_agent_pools_operations.py @@ -29,6 +29,45 @@ _SERIALIZER = Serializer() _SERIALIZER.client_side_validation = False +def build_abort_latest_operation_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/agentPools/{agentPoolName}/abort") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + "agentPoolName": _SERIALIZER.url("agent_pool_name", agent_pool_name, 'str'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + def build_list_request( subscription_id: str, resource_group_name: str, @@ -329,6 +368,75 @@ def __init__(self, *args, **kwargs): self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") + @distributed_trace + def abort_latest_operation( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + agent_pool_name: str, + **kwargs: Any + ) -> None: + """Aborts last operation running on agent pool. + + Aborting last running operation on agent pool. We return a 204 no content code here to indicate + that the operation has been accepted and an abort will be attempted but is not guaranteed to + complete successfully. Please look up the provisioning state of the agent pool to keep track of + whether it changes to Canceled. A canceled provisioning state indicates that the abort was + successful. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :param agent_pool_name: The name of the agent pool. + :type agent_pool_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_abort_latest_operation_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + agent_pool_name=agent_pool_name, + api_version=api_version, + template_url=self.abort_latest_operation.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + abort_latest_operation.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/agentPools/{agentPoolName}/abort"} # type: ignore + + @distributed_trace def list( self, diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py index bdf150c50a0..79e51b2b8b8 100644 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py +++ b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2022_07_02_preview/operations/_managed_clusters_operations.py @@ -596,6 +596,43 @@ def build_reset_aad_profile_request_initial( ) +def build_abort_latest_operation_request( + subscription_id: str, + resource_group_name: str, + resource_name: str, + **kwargs: Any +) -> HttpRequest: + _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + accept = _headers.pop('Accept', "application/json") + + # Construct URL + _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/abort") # pylint: disable=line-too-long + path_format_arguments = { + "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str', min_length=1), + "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', max_length=90, min_length=1), + "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str', max_length=63, min_length=1, pattern=r'^[a-zA-Z0-9]$|^[a-zA-Z0-9][-_a-zA-Z0-9]{0,61}[a-zA-Z0-9]$'), + } + + _url = _format_url_section(_url, **path_format_arguments) + + # Construct parameters + _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') + + # Construct headers + _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') + + return HttpRequest( + method="POST", + url=_url, + params=_params, + headers=_headers, + **kwargs + ) + + def build_rotate_cluster_certificates_request_initial( subscription_id: str, resource_group_name: str, @@ -2217,6 +2254,71 @@ def get_long_running_output(pipeline_response): begin_reset_aad_profile.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedClusters/{resourceName}/resetAADProfile"} # type: ignore + @distributed_trace + def abort_latest_operation( # pylint: disable=inconsistent-return-statements + self, + resource_group_name: str, + resource_name: str, + **kwargs: Any + ) -> None: + """Aborts last operation running on managed cluster. + + Aborting last running operation on managed cluster. We return a 204 no content code here to + indicate that the operation has been accepted and an abort will be attempted but is not + guaranteed to complete successfully. Please look up the provisioning state of the managed + cluster to keep track of whether it changes to Canceled. A canceled provisioning state + indicates that the abort was successful. + + :param resource_group_name: The name of the resource group. The name is case insensitive. + :type resource_group_name: str + :param resource_name: The name of the managed cluster resource. + :type resource_name: str + :keyword callable cls: A custom type or function that will be passed the direct response + :return: None, or the result of cls(response) + :rtype: None + :raises: ~azure.core.exceptions.HttpResponseError + """ + error_map = { + 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError + } + error_map.update(kwargs.pop('error_map', {}) or {}) + + _headers = kwargs.pop("headers", {}) or {} + _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) + + api_version = kwargs.pop('api_version', _params.pop('api-version', "2022-07-02-preview")) # type: str + cls = kwargs.pop('cls', None) # type: ClsType[None] + + + request = build_abort_latest_operation_request( + subscription_id=self._config.subscription_id, + resource_group_name=resource_group_name, + resource_name=resource_name, + api_version=api_version, + template_url=self.abort_latest_operation.metadata['url'], + headers=_headers, + params=_params, + ) + request = _convert_request(request) + request.url = self._client.format_url(request.url) # type: ignore + + pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access + request, + stream=False, + **kwargs + ) + response = pipeline_response.http_response + + if response.status_code not in [204]: + map_error(status_code=response.status_code, response=response, error_map=error_map) + raise HttpResponseError(response=response, error_format=ARMErrorFormat) + + if cls: + return cls(pipeline_response, None, {}) + + abort_latest_operation.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/managedclusters/{resourceName}/abort"} # type: ignore + + def _rotate_cluster_certificates_initial( # pylint: disable=inconsistent-return-statements self, resource_group_name: str, diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index aed0f708af1..74f806244ca 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -9,7 +9,7 @@ from setuptools import setup, find_packages -VERSION = "0.5.93" +VERSION = "0.5.92" CLASSIFIERS = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", From aa67027fe10c198609aaebed47852d8042fd1d94 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 8 Aug 2022 12:36:46 -0700 Subject: [PATCH 003/109] WIP --- .../azext_aks_preview/azuremonitorprofile.py | 263 +++++++++++++++++- .../managed_cluster_decorator.py | 3 - 2 files changed, 255 insertions(+), 11 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index a334a580dbe..a3cdf1da059 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -2,14 +2,249 @@ # Copyright (c) Microsoft Corporation. All rights reserved. # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- +import json -def link_azure_monitor_profile_artifacts(): - print("Calling unlink_azure_monitor_profile_artifacts...") - return +from knack.util import CLIError +from azure.cli.core.azclierror import ClientRequestError +from ._client_factory import cf_resources + +MapToClosestMACRegion = { + "australiacentral": "eastus", + "australiacentral2": "eastus", + "australiaeast": "eastus", + "australiasoutheast": "eastus", + "brazilsouth": "eastus", + "canadacentral": "eastus", + "canadaeast": "eastus", + "centralus": "centralus", + "centralindia": "centralindia", + "eastasia": "westeurope", + "eastus": "eastus", + "eastus2": "eastus2", + "francecentral": "westeurope", + "francesouth": "westeurope", + "japaneast": "eastus", + "japanwest": "eastus", + "koreacentral": "westeurope", + "koreasouth": "westeurope", + "northcentralus": "eastus", + "northeurope": "westeurope", + "southafricanorth": "westeurope", + "southafricawest": "westeurope", + "southcentralus": "westeurope", + "southeastasia": "westeurope", + "southindia": "centralindia", + "uksouth": "uksouth", + "ukwest": "uksouth", + "westcentralus": "eastus", + "westeurope": "westeurope", + "westindia": "centralindia", + "westus": "westus", + "westus2": "westus2", + "norwayeast": "westeurope", + "norwaywest": "westeurope", + "switzerlandnorth": "westeurope", + "switzerlandwest": "westeurope", + "uaenorth": "westeurope", + "germanywestcentral": "westeurope", + "germanynorth": "westeurope", + "uaecentral": "westeurope", + "eastus2euap": "eastus2euap", + "centraluseuap": "westeurope", + "brazilsoutheast": "eastus" + } + +MAC_CREATION_API = "2021-06-01-preview" + +def get_default_mac_name(cluster_region, cluster_name): + default_mac_name = 'MSProm-' + MapToClosestMACRegion[cluster_region] + '-' + cluster_name + default_mac_name = default_mac_name[0:43] + + return default_mac_name -def unlink_azure_monitor_profile_artifacts(): +def create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region): + from azure.cli.core.util import send_raw_request + + default_mac_name = get_default_mac_name(cluster_region, cluster_name) + mac_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/microsoft.monitor/accounts/{2}".format( + cluster_subscription, + cluster_resource_group_name, + default_mac_name, + ) + + association_body = json.dumps({"location": cluster_region, + "properties": { + # do I need to link an existing MDM account for + }}) + association_url = f"https://management.azure.com/subscriptions/{mac_resource_id}?api-version={MAC_CREATION_API}" + + # If mac already exists then just return the mac_resource_id + # response = send_raw_request(cmd.cli_ctx, "GET", association_url) + # print(response) + # return mac_resource_id + # raise CLIError("TEMP ERROR") + + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "PUT", association_url, + body=association_body) + error = None + return mac_resource_id + except CLIError as e: + error = e + else: + raise error + +def sanitize_resource_id(resource_id): + resource_id = resource_id.strip() + if not resource_id.startswith("/"): + resource_id = "/" + resource_id + if resource_id.endswith("/"): + resource_id = resource_id.rstrip("/") + return resource_id + +def get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters): + mac_resource_id = raw_parameters.get("mac_resource_id") + print(mac_resource_id) + if mac_resource_id is None or mac_resource_id == "": + print("Creating default MAC account") + mac_resource_id = create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region) + else: + mac_resource_id = sanitize_resource_id(mac_resource_id) + return mac_resource_id + +def get_default_dce_name(mac_region, cluster_name): + default_dce_name = 'MSProm-' + mac_region + cluster_name + default_dce_name = default_dce_name[0:43] + return default_dce_name + +def get_mac_region(cmd, mac_resource_id, cluster_region): + from azure.cli.core.util import send_raw_request + from azure.core.exceptions import HttpResponseError + + # region of MAC can be different from region of RG so find the location of the mac_resource_id + mac_subscription_id = mac_resource_id.split('/')[2] + resources = cf_resources(cmd.cli_ctx, mac_subscription_id) + try: + resource = resources.get_by_id( + mac_resource_id, '2021-06-01-preview') + mac_location = resource.location + except HttpResponseError as ex: + raise ex + + # first get the association between region display names and region IDs (because for some reason + # the "which RPs are available in which regions" check returns region display names) + region_names_to_id = {} + # retry the request up to two times + for _ in range(3): + try: + location_list_url = f"https://management.azure.com/subscriptions/{mac_subscription_id}/locations?api-version=2019-11-01" + r = send_raw_request(cmd.cli_ctx, "GET", location_list_url) + + # this is required to fool the static analyzer. The else statement will only run if an exception + # is thrown, but flake8 will complain that e is undefined if we don't also define it here. + error = None + break + except CLIError as e: + error = e + else: + # This will run if the above for loop was not broken out of. This means all three requests failed + raise error + + json_response = json.loads(r.text) + for region_data in json_response["value"]: + region_names_to_id[region_data["displayName"] + ] = region_data["name"] + + # check if region supports DCR and DCRA + for _ in range(3): + try: + feature_check_url = f"https://management.azure.com/subscriptions/{mac_subscription_id}/providers/Microsoft.Insights?api-version=2020-10-01" + r = send_raw_request(cmd.cli_ctx, "GET", feature_check_url) + error = None + break + except CLIError as e: + error = e + else: + raise error + json_response = json.loads(r.text) + for resource in json_response["resourceTypes"]: + region_ids = map(lambda x: region_names_to_id[x], + resource["locations"]) # map is lazy, so doing this for every region isn't slow + if resource["resourceType"].lower() == "datacollectionrules" and mac_location not in region_ids: + raise ClientRequestError( + f'Data Collection Rules are not supported for MAC region {mac_location}') + elif resource[ + "resourceType"].lower() == "datacollectionruleassociations" and cluster_region not in region_ids: + raise ClientRequestError( + f'Data Collection Rule Associations are not supported for cluster region {cluster_region}') + + return region_ids[mac_location] + +def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, cluster_region): + print('Calling function create_dce') + from azure.cli.core.util import send_raw_request + + mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + dce_name = get_default_dce_name(mac_region, cluster_name) + + dce_resource_id = "subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionEndpoints/{2}".format( + cluster_subscription, + cluster_resource_group_name, + dce_name, + ) + + for _ in range(3): + try: + dce_url = f"https://management.azure.com/{dce_resource_id}?api-version=2021-09-01-preview" + dce_creation_body = json.dumps({"name": dce_name, + "location": mac_region, + # "tags": { + # "tagName1": "tagValue1", + # "tagName2": "tagValue2" + # }, + "kind": "Linux", + "properties": { + }}) + send_raw_request(cmd.cli_ctx, "PUT", + dce_url, body=dce_creation_body) + error = None + break + except CLIError as e: + error = e + else: + raise error + +def link_azure_monitor_profile_artifacts(cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + cluster_region, + raw_parameters, + ): + print("Calling link_azure_monitor_profile_artifacts...") + + # MAC creation if required + mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) + print(mac_resource_id) + + # DCE creation + create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, cluster_region) + + # DCR creation + + # DCRA creation + + raise CLIError("TEMP ERROR") + +def unlink_azure_monitor_profile_artifacts(cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + cluster_region, + raw_parameters, + ): print("Calling unlink_azure_monitor_profile_artifacts...") - return # pylint: disable=too-many-locals,too-many-branches,too-many-statements,line-too-long def ensure_azure_monitor_profile_prerequisites( @@ -23,8 +258,20 @@ def ensure_azure_monitor_profile_prerequisites( ): print("Calling ensure_azure_monitor_profile_prerequisites...") if (remove_azuremonitormetrics): - unlink_azure_monitor_profile_artifacts() + unlink_azure_monitor_profile_artifacts(cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + cluster_region, + raw_parameters + ) else: - link_azure_monitor_profile_artifacts() - + link_azure_monitor_profile_artifacts(cmd, + cluster_subscription, + cluster_resource_group_name, + cluster_name, + cluster_region, + raw_parameters + ) + return \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index 5c74ece8c28..201a409d4e3 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1419,13 +1419,11 @@ def _get_enable_azure_monitor_metrics(self, enable_validation: bool = False) -> self.mc.azure_monitor_profile.metrics ): print("REACHES HERE 3") - print(self.mc.azure_monitor_profile.metrics) enable_azure_monitor_metrics = self.mc.azure_monitor_profile.metrics.enabled # This parameter does not need dynamic completion. if enable_validation: print("REACHES HERE 4") - print(dir(self.mc)) if enable_azure_monitor_metrics and self._get_disable_azure_monitor_metrics(False): print("REACHES HERE 5") raise MutuallyExclusiveArgumentError( @@ -2141,7 +2139,6 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() print("REACHES HERE 9") mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=True) - print(mc.azure_monitor_profile.metrics.enabled) if self.context.get_disable_azure_monitor_metrics(): if mc.azure_monitor_profile is None: From 278366d7b4ae750a1f82f46e7e4964b36aad802e Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 8 Aug 2022 16:11:22 -0700 Subject: [PATCH 004/109] wip --- src/aks-preview/azext_aks_preview/_params.py | 4 +- .../azext_aks_preview/azuremonitorprofile.py | 145 ++++++++++++++++-- src/aks-preview/azext_aks_preview/custom.py | 3 + 3 files changed, 134 insertions(+), 18 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 1f0ce2f964f..f9b479ab51e 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -322,7 +322,7 @@ def load_arguments(self, _): c.argument('dns_zone_resource_id') c.argument('enable_keda', action='store_true', is_preview=True) c.argument('enable_azuremonitormetrics', action='store_true', is_preview=True) - c.argument('mac_resource_id', action='store_true', is_preview=True) + c.argument('mac_resource_id', is_preview=True) c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) c.argument('grafana_resource_id', action='store_true', is_preview=True) @@ -421,7 +421,7 @@ def load_arguments(self, _): c.argument('enable_keda', action='store_true', is_preview=True) c.argument('disable_keda', action='store_true', is_preview=True) c.argument('enable_azuremonitormetrics', action='store_true', is_preview=True) - c.argument('mac_resource_id', action='store_true', is_preview=True) + c.argument('mac_resource_id', is_preview=True) c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) c.argument('grafana_resource_id', action='store_true', is_preview=True) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index a3cdf1da059..a0217d618a3 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -6,7 +6,7 @@ from knack.util import CLIError from azure.cli.core.azclierror import ClientRequestError -from ._client_factory import cf_resources +from ._client_factory import get_resources_client MapToClosestMACRegion = { "australiacentral": "eastus", @@ -54,9 +54,12 @@ "brazilsoutheast": "eastus" } -MAC_CREATION_API = "2021-06-01-preview" +MAC_CREATION_API = "2021-06-03-preview" def get_default_mac_name(cluster_region, cluster_name): + ################### + ################### TEMPORARY -> -MAC in name because of bug with the account creation, deletion + ################### default_mac_name = 'MSProm-' + MapToClosestMACRegion[cluster_region] + '-' + cluster_name default_mac_name = default_mac_name[0:43] @@ -76,7 +79,7 @@ def create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, c "properties": { # do I need to link an existing MDM account for }}) - association_url = f"https://management.azure.com/subscriptions/{mac_resource_id}?api-version={MAC_CREATION_API}" + association_url = f"https://management.azure.com{mac_resource_id}?api-version={MAC_CREATION_API}" # If mac already exists then just return the mac_resource_id # response = send_raw_request(cmd.cli_ctx, "GET", association_url) @@ -105,7 +108,6 @@ def sanitize_resource_id(resource_id): def get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters): mac_resource_id = raw_parameters.get("mac_resource_id") - print(mac_resource_id) if mac_resource_id is None or mac_resource_id == "": print("Creating default MAC account") mac_resource_id = create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region) @@ -118,13 +120,23 @@ def get_default_dce_name(mac_region, cluster_name): default_dce_name = default_dce_name[0:43] return default_dce_name +def get_default_dcr_name(mac_region, cluster_name): + default_dcr_name = 'MSProm-' + mac_region + cluster_name + default_dcr_name = default_dcr_name[0:43] + return default_dcr_name + +def get_default_dcra_name(cluster_region, cluster_name): + default_dcra_name = 'MSProm-' + cluster_region + cluster_name + default_dcra_name = default_dcra_name[0:43] + return default_dcra_name + def get_mac_region(cmd, mac_resource_id, cluster_region): from azure.cli.core.util import send_raw_request from azure.core.exceptions import HttpResponseError # region of MAC can be different from region of RG so find the location of the mac_resource_id mac_subscription_id = mac_resource_id.split('/')[2] - resources = cf_resources(cmd.cli_ctx, mac_subscription_id) + resources = get_resources_client(cmd.cli_ctx, mac_subscription_id) try: resource = resources.get_by_id( mac_resource_id, '2021-06-01-preview') @@ -178,17 +190,16 @@ def get_mac_region(cmd, mac_resource_id, cluster_region): "resourceType"].lower() == "datacollectionruleassociations" and cluster_region not in region_ids: raise ClientRequestError( f'Data Collection Rule Associations are not supported for cluster region {cluster_region}') - - return region_ids[mac_location] -def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, cluster_region): + return mac_location + +def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region): print('Calling function create_dce') from azure.cli.core.util import send_raw_request - mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) dce_name = get_default_dce_name(mac_region, cluster_name) - dce_resource_id = "subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionEndpoints/{2}".format( + dce_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionEndpoints/{2}".format( cluster_subscription, cluster_resource_group_name, dce_name, @@ -196,7 +207,7 @@ def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_n for _ in range(3): try: - dce_url = f"https://management.azure.com/{dce_resource_id}?api-version=2021-09-01-preview" + dce_url = f"https://management.azure.com{dce_resource_id}?api-version=2021-09-01-preview" dce_creation_body = json.dumps({"name": dce_name, "location": mac_region, # "tags": { @@ -209,11 +220,106 @@ def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_n send_raw_request(cmd.cli_ctx, "PUT", dce_url, body=dce_creation_body) error = None - break + return dce_resource_id + except CLIError as e: + error = e + else: + raise error + +def create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id): + from azure.cli.core.util import send_raw_request + + print('Calling function create_dcr') + + dcr_name = get_default_dcr_name(mac_region, cluster_name) + dcr_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRules/{2}".format( + mac_resource_id.split('/')[2], + mac_resource_id.split('/')[4], + dcr_name + ) + + dcr_creation_body = json.dumps({"location": mac_region, + "kind": "Linux", + "properties": { + "dataCollectionEndpointId": dce_resource_id, + "dataSources": { + "prometheusForwarder": [ + { + "name": "PrometheusDataSource", + "streams": [ + "Microsoft-PrometheusMetrics" + ], + "labelIncludeFilter": { + # "microsoft_metrics_include_label": "MonitoringData" + } + } + ] + }, + "dataFlows": [ + { + "destinations": [ "MonitoringAccount1" ], + "streams": [ "Microsoft-PrometheusMetrics" ] + } + ], + "description": "DCR description", + "destinations": { + "monitoringAccounts": [ + { + "accountResourceId": mac_resource_id, + "name": "MonitoringAccount1" + } + ] + } + }}) + dcr_url = f"https://management.azure.com{dcr_resource_id}?api-version=2021-09-01-preview" + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "PUT", + dcr_url, body=dcr_creation_body) + error = None + return dcr_resource_id + except CLIError as e: + error = e + else: + raise error + +def create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id): + from azure.cli.core.util import send_raw_request + + print('Calling function create_dcra') + + cluster_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( + cluster_subscription, + cluster_resource_group_name, + cluster_name + ) + + dcra_name = get_default_dcra_name(cluster_region, cluster_name) + dcra_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{2}".format( + cluster_subscription, + cluster_resource_group_name, + dcra_name + ) + + # only create or delete the association between the DCR and cluster + association_body = json.dumps({"location": cluster_region, + "properties": { + # "dataCollectionEndpointId": dce_resource_id, + "dataCollectionRuleId": dcr_resource_id, + "description": "Data collection association between DCR, DCE and target AKS resource" + }}) + association_url = f"https://management.azure.com{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{dcra_name}?api-version=2021-09-01-preview" + for _ in range(3): + try: + # send_raw_request(cmd.cli_ctx, "PUT" if not remove_monitoring else "DELETE", association_url, + send_raw_request(cmd.cli_ctx, "PUT", association_url, + body=association_body) + error = None + return dcra_resource_id except CLIError as e: error = e else: - raise error + raise error def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, @@ -228,14 +334,21 @@ def link_azure_monitor_profile_artifacts(cmd, mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) print(mac_resource_id) + # Get MAC region (required for DCE, DCR creation) + mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + print(mac_region) + # DCE creation - create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, cluster_region) + dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) + print(dce_resource_id) # DCR creation + dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + print(dcr_resource_id) # DCRA creation - - raise CLIError("TEMP ERROR") + dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) + print(dcra_resource_id) def unlink_azure_monitor_profile_artifacts(cmd, cluster_subscription, diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index aed9fbd0d50..818b4f40244 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -816,6 +816,9 @@ def aks_update( # update mc profile mc = aks_update_decorator.update_mc_profile_preview() + print("REACHES HERE 13") + print(raw_parameters.get("enable_azuremonitormetrics")) + if ( raw_parameters.get("enable_azuremonitormetrics") or raw_parameters.get("disable_azuremonitormetrics")): subscription_id = get_subscription_id(cmd.cli_ctx) instance = client.get(resource_group_name, name) From 73536f21648637784b55ac3fab4d2b52045e7eb1 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 17:21:22 -0700 Subject: [PATCH 005/109] grafana working --- src/aks-preview/azext_aks_preview/_params.py | 4 +- .../azext_aks_preview/azuremonitorprofile.py | 172 ++++++++++++++---- 2 files changed, 136 insertions(+), 40 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index f9b479ab51e..ef77fb98dc8 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -325,7 +325,7 @@ def load_arguments(self, _): c.argument('mac_resource_id', is_preview=True) c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) - c.argument('grafana_resource_id', action='store_true', is_preview=True) + c.argument('grafana_resource_id', is_preview=True) # nodepool c.argument('host_group_id', validator=validate_host_group_id, is_preview=True) c.argument('crg_id', validator=validate_crg_id, is_preview=True) @@ -424,7 +424,7 @@ def load_arguments(self, _): c.argument('mac_resource_id', is_preview=True) c.argument('metriclabelsallowlist', validator=validate_metriclabelsallowlist, is_preview=True) c.argument('metricannotationsallowlist', validator=validate_metricannotationsallowlist, is_preview=True) - c.argument('grafana_resource_id', action='store_true', is_preview=True) + c.argument('grafana_resource_id', is_preview=True) c.argument('disable_azuremonitormetrics', action='store_true', is_preview=True) with self.argument_context('aks upgrade') as c: diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index a0217d618a3..245dff9d4f2 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -3,10 +3,22 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import json +from sre_constants import FAILURE, SUCCESS from knack.util import CLIError from azure.cli.core.azclierror import ClientRequestError from ._client_factory import get_resources_client +from enum import Enum +from six import with_metaclass +from azure.core import CaseInsensitiveEnumMeta +import uuid +class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): + """Status of Grafana link to the Prometheus Addon + """ + SUCCESS = "SUCCESS" + FAILURE = "FAILURE" + ALREADYPRESENT = "ALREADYPRESENT" + NA = "NA" MapToClosestMACRegion = { "australiacentral": "eastus", @@ -54,13 +66,15 @@ "brazilsoutheast": "eastus" } -MAC_CREATION_API = "2021-06-03-preview" +MAC_API = "2021-06-03-preview" +GRAFANA_API = "2022-08-01" +GRAFANA_ROLE_ASSIGNMENT_API = "2018-01-01-preview" def get_default_mac_name(cluster_region, cluster_name): ################### ################### TEMPORARY -> -MAC in name because of bug with the account creation, deletion ################### - default_mac_name = 'MSProm-' + MapToClosestMACRegion[cluster_region] + '-' + cluster_name + default_mac_name = "MSProm-" + MapToClosestMACRegion[cluster_region] + "-" + cluster_name default_mac_name = default_mac_name[0:43] return default_mac_name @@ -79,7 +93,7 @@ def create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, c "properties": { # do I need to link an existing MDM account for }}) - association_url = f"https://management.azure.com{mac_resource_id}?api-version={MAC_CREATION_API}" + association_url = f"https://management.azure.com{mac_resource_id}?api-version={MAC_API}" # If mac already exists then just return the mac_resource_id # response = send_raw_request(cmd.cli_ctx, "GET", association_url) @@ -116,17 +130,17 @@ def get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, return mac_resource_id def get_default_dce_name(mac_region, cluster_name): - default_dce_name = 'MSProm-' + mac_region + cluster_name + default_dce_name = "MSProm-" + mac_region + cluster_name default_dce_name = default_dce_name[0:43] return default_dce_name def get_default_dcr_name(mac_region, cluster_name): - default_dcr_name = 'MSProm-' + mac_region + cluster_name + default_dcr_name = "MSProm-" + mac_region + cluster_name default_dcr_name = default_dcr_name[0:43] return default_dcr_name def get_default_dcra_name(cluster_region, cluster_name): - default_dcra_name = 'MSProm-' + cluster_region + cluster_name + default_dcra_name = "MSProm-" + cluster_region + cluster_name default_dcra_name = default_dcra_name[0:43] return default_dcra_name @@ -135,11 +149,11 @@ def get_mac_region(cmd, mac_resource_id, cluster_region): from azure.core.exceptions import HttpResponseError # region of MAC can be different from region of RG so find the location of the mac_resource_id - mac_subscription_id = mac_resource_id.split('/')[2] + mac_subscription_id = mac_resource_id.split("/")[2] resources = get_resources_client(cmd.cli_ctx, mac_subscription_id) try: resource = resources.get_by_id( - mac_resource_id, '2021-06-01-preview') + mac_resource_id, "2021-06-01-preview") mac_location = resource.location except HttpResponseError as ex: raise ex @@ -154,7 +168,7 @@ def get_mac_region(cmd, mac_resource_id, cluster_region): r = send_raw_request(cmd.cli_ctx, "GET", location_list_url) # this is required to fool the static analyzer. The else statement will only run if an exception - # is thrown, but flake8 will complain that e is undefined if we don't also define it here. + # is thrown, but flake8 will complain that e is undefined if we don"t also define it here. error = None break except CLIError as e: @@ -182,19 +196,18 @@ def get_mac_region(cmd, mac_resource_id, cluster_region): json_response = json.loads(r.text) for resource in json_response["resourceTypes"]: region_ids = map(lambda x: region_names_to_id[x], - resource["locations"]) # map is lazy, so doing this for every region isn't slow + resource["locations"]) # map is lazy, so doing this for every region isn"t slow if resource["resourceType"].lower() == "datacollectionrules" and mac_location not in region_ids: raise ClientRequestError( - f'Data Collection Rules are not supported for MAC region {mac_location}') + f"Data Collection Rules are not supported for MAC region {mac_location}") elif resource[ "resourceType"].lower() == "datacollectionruleassociations" and cluster_region not in region_ids: raise ClientRequestError( - f'Data Collection Rule Associations are not supported for cluster region {cluster_region}') - + f"Data Collection Rule Associations are not supported for cluster region {cluster_region}") return mac_location def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region): - print('Calling function create_dce') + print("Calling function create_dce") from azure.cli.core.util import send_raw_request dce_name = get_default_dce_name(mac_region, cluster_name) @@ -229,12 +242,12 @@ def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_n def create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id): from azure.cli.core.util import send_raw_request - print('Calling function create_dcr') + print("Calling function create_dcr") dcr_name = get_default_dcr_name(mac_region, cluster_name) dcr_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRules/{2}".format( - mac_resource_id.split('/')[2], - mac_resource_id.split('/')[4], + mac_resource_id.split("/")[2], + mac_resource_id.split("/")[4], dcr_name ) @@ -286,7 +299,7 @@ def create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id): def create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id): from azure.cli.core.util import send_raw_request - print('Calling function create_dcra') + print("Calling function create_dcra") cluster_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( cluster_subscription, @@ -311,7 +324,6 @@ def create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_grou association_url = f"https://management.azure.com{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{dcra_name}?api-version=2021-09-01-preview" for _ in range(3): try: - # send_raw_request(cmd.cli_ctx, "PUT" if not remove_monitoring else "DELETE", association_url, send_raw_request(cmd.cli_ctx, "PUT", association_url, body=association_body) error = None @@ -321,6 +333,84 @@ def create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_grou else: raise error +def link_grafana_instance(cmd, raw_parameters, mac_resource_id): + from azure.cli.core.util import send_raw_request + + # GET grafana principal ID + try: + grafana_resource_id = raw_parameters.get("grafana_resource_id") + if grafana_resource_id is None or grafana_resource_id == "": + return GrafanaLink.NA + grafana_resource_id = sanitize_resource_id(grafana_resource_id) + grafanaURI = "https://management.azure.com{0}?api-version={1}".format( + grafana_resource_id, + GRAFANA_API + ) + print(grafanaURI) + grafanaArmResponse = send_raw_request(cmd.cli_ctx, "GET", grafanaURI, body={}) + servicePrincipalId = grafanaArmResponse.json()["identity"]["principalId"] + except CLIError as e: + error = e + raise CLIError(e) + + # Add Role Assignment + try: + MonitoringReader = "43d0d8ad-25c7-4714-9337-8ba259a9fe05" + roleDefinitionURI = "https://management.azure.com{0}/providers/Microsoft.Authorization/roleAssignments/{1}?api-version={2}".format( + grafana_resource_id, + uuid.uuid4(), + GRAFANA_ROLE_ASSIGNMENT_API + ) + roleDefinitionId = "{0}/providers/Microsoft.Authorization/roleDefinitions/{1}".format( + grafana_resource_id, + MonitoringReader + ) + + association_body = json.dumps({ + "properties": { + "roleDefinitionId": roleDefinitionId, + "principalId": servicePrincipalId + }}) + + send_raw_request(cmd.cli_ctx, "PUT", roleDefinitionURI, body=association_body) + except CLIError as e: + error = e + if e.response.status_code != 409: + raise CLIError(e) + + # Add AMW integration to grafana + + # Setting up AMW Integration + targetGrafanaArmPayload = grafanaArmResponse.json() + if targetGrafanaArmPayload["properties"] is None: + raise CLIError("Invalid grafana payload to add AMW integration") + if "grafanaIntegrations" not in targetGrafanaArmPayload: + targetGrafanaArmPayload["properties"]["grafanaIntegrations"] = {} + if "azureMonitorWorkspaceIntegrations" not in targetGrafanaArmPayload: + targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] = [] + + amwIntegrations = targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] + if amwIntegrations != []: + print("Grafana already has AMW integration") + return GrafanaLink.ALREADYPRESENT + + try: + grafanaURI = "https://management.azure.com{0}?api-version={1}".format( + grafana_resource_id, + GRAFANA_API + ) + targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] = [{ "azureMonitorWorkspaceResourceId" : mac_resource_id }] + targetGrafanaArmPayload=json.dumps(targetGrafanaArmPayload) + + final_response = send_raw_request(cmd.cli_ctx, "PUT", grafanaURI, body=targetGrafanaArmPayload, headers={'Content-Type=application/json'}) + # final_response = send_raw_request(cmd.cli_ctx, "PUT", grafanaURI, body=targetGrafanaArmPayload) + print(final_response.json()) + except CLIError as e: + error = e + raise CLIError(e) + + return GrafanaLink.SUCCESS + def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, cluster_resource_group_name, @@ -330,25 +420,31 @@ def link_azure_monitor_profile_artifacts(cmd, ): print("Calling link_azure_monitor_profile_artifacts...") - # MAC creation if required - mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) - print(mac_resource_id) - - # Get MAC region (required for DCE, DCR creation) - mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) - print(mac_region) - - # DCE creation - dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) - print(dce_resource_id) - - # DCR creation - dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) - print(dcr_resource_id) - - # DCRA creation - dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) - print(dcra_resource_id) + # # MAC creation if required + mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" + # mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) + # print(mac_resource_id) + + # # Get MAC region (required for DCE, DCR creation) + # mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + # print(mac_region) + + # # DCE creation + # dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) + # print(dce_resource_id) + + # # DCR creation + # dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + # print(dcr_resource_id) + + # # DCRA creation + # dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) + # print(dcra_resource_id) + + # Link grafana + isGrafanaLinkSuccessful = link_grafana_instance(cmd, raw_parameters, mac_resource_id) + print("isGrafanaLinkSuccessful -> {isGrafanaLinkSuccessful}") + raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOP") def unlink_azure_monitor_profile_artifacts(cmd, cluster_subscription, From 370ca3ca4ec947f171ba5b9235ba1ceac674c1e8 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 17:21:47 -0700 Subject: [PATCH 006/109] now working --- .../azext_aks_preview/azuremonitorprofile.py | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 245dff9d4f2..3d73c575e49 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -420,26 +420,26 @@ def link_azure_monitor_profile_artifacts(cmd, ): print("Calling link_azure_monitor_profile_artifacts...") - # # MAC creation if required - mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" - # mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) - # print(mac_resource_id) - - # # Get MAC region (required for DCE, DCR creation) - # mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) - # print(mac_region) - - # # DCE creation - # dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) - # print(dce_resource_id) - - # # DCR creation - # dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) - # print(dcr_resource_id) - - # # DCRA creation - # dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) - # print(dcra_resource_id) + # MAC creation if required + # mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" + mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) + print(mac_resource_id) + + # Get MAC region (required for DCE, DCR creation) + mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + print(mac_region) + + # DCE creation + dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) + print(dce_resource_id) + + # DCR creation + dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + print(dcr_resource_id) + + # DCRA creation + dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) + print(dcra_resource_id) # Link grafana isGrafanaLinkSuccessful = link_grafana_instance(cmd, raw_parameters, mac_resource_id) From aa6bbcde808f534a30136496ca1121c809bfee28 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 17:34:01 -0700 Subject: [PATCH 007/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 44 ++++++++++--------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 3d73c575e49..b55934e5598 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -349,6 +349,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): print(grafanaURI) grafanaArmResponse = send_raw_request(cmd.cli_ctx, "GET", grafanaURI, body={}) servicePrincipalId = grafanaArmResponse.json()["identity"]["principalId"] + print(grafanaArmResponse.json()) except CLIError as e: error = e raise CLIError(e) @@ -384,16 +385,17 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): targetGrafanaArmPayload = grafanaArmResponse.json() if targetGrafanaArmPayload["properties"] is None: raise CLIError("Invalid grafana payload to add AMW integration") - if "grafanaIntegrations" not in targetGrafanaArmPayload: + if "grafanaIntegrations" not in json.dumps(targetGrafanaArmPayload): targetGrafanaArmPayload["properties"]["grafanaIntegrations"] = {} - if "azureMonitorWorkspaceIntegrations" not in targetGrafanaArmPayload: + if "azureMonitorWorkspaceIntegrations" not in json.dumps(targetGrafanaArmPayload): targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] = [] amwIntegrations = targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] + if amwIntegrations != []: print("Grafana already has AMW integration") return GrafanaLink.ALREADYPRESENT - + try: grafanaURI = "https://management.azure.com{0}?api-version={1}".format( grafana_resource_id, @@ -420,31 +422,31 @@ def link_azure_monitor_profile_artifacts(cmd, ): print("Calling link_azure_monitor_profile_artifacts...") - # MAC creation if required - # mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" - mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) - print(mac_resource_id) + # # MAC creation if required + mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" + # mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) + # print(mac_resource_id) - # Get MAC region (required for DCE, DCR creation) - mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) - print(mac_region) + # # Get MAC region (required for DCE, DCR creation) + # mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + # print(mac_region) - # DCE creation - dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) - print(dce_resource_id) + # # DCE creation + # dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) + # print(dce_resource_id) - # DCR creation - dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) - print(dcr_resource_id) + # # DCR creation + # dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + # print(dcr_resource_id) - # DCRA creation - dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) - print(dcra_resource_id) + # # DCRA creation + # dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) + # print(dcra_resource_id) # Link grafana isGrafanaLinkSuccessful = link_grafana_instance(cmd, raw_parameters, mac_resource_id) - print("isGrafanaLinkSuccessful -> {isGrafanaLinkSuccessful}") - raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOP") + print(isGrafanaLinkSuccessful) + raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOP") def unlink_azure_monitor_profile_artifacts(cmd, cluster_subscription, From 74c7e8a80432834b91a04e322259852e3d997b6b Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 17:37:35 -0700 Subject: [PATCH 008/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index b55934e5598..b0b107c909e 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -392,7 +392,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): amwIntegrations = targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] - if amwIntegrations != []: + if amwIntegrations != [] and mac_resource_id in json.dumps(amwIntegrations): print("Grafana already has AMW integration") return GrafanaLink.ALREADYPRESENT @@ -422,31 +422,31 @@ def link_azure_monitor_profile_artifacts(cmd, ): print("Calling link_azure_monitor_profile_artifacts...") - # # MAC creation if required - mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" - # mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) - # print(mac_resource_id) + # MAC creation if required + # mac_resource_id = "/subscriptions/ce4d1293-71c0-4c72-bc55-133553ee9e50/resourceGroups/kaveeshMACRG/providers/microsoft.monitor/accounts/kaveesheastusmac" + mac_resource_id = get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters) + print(mac_resource_id) - # # Get MAC region (required for DCE, DCR creation) - # mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) - # print(mac_region) + # Get MAC region (required for DCE, DCR creation) + mac_region = get_mac_region(cmd, mac_resource_id, cluster_region) + print(mac_region) - # # DCE creation - # dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) - # print(dce_resource_id) + # DCE creation + dce_resource_id = create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, mac_region) + print(dce_resource_id) - # # DCR creation - # dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) - # print(dcr_resource_id) + # DCR creation + dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + print(dcr_resource_id) - # # DCRA creation - # dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) - # print(dcra_resource_id) + # DCRA creation + dcra_resource_id = create_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, dcr_resource_id) + print(dcra_resource_id) # Link grafana isGrafanaLinkSuccessful = link_grafana_instance(cmd, raw_parameters, mac_resource_id) print(isGrafanaLinkSuccessful) - raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOP") + # raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOP") def unlink_azure_monitor_profile_artifacts(cmd, cluster_subscription, From 319991ad7cb34dbc636d79344afcceac61f70241 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 19:37:36 -0700 Subject: [PATCH 009/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index b0b107c909e..35d30f05356 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -18,7 +18,7 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): SUCCESS = "SUCCESS" FAILURE = "FAILURE" ALREADYPRESENT = "ALREADYPRESENT" - NA = "NA" + NOPARAMPROVIDED = "NOPARAMPROVIDED" MapToClosestMACRegion = { "australiacentral": "eastus", @@ -239,15 +239,15 @@ def create_dce(cmd, cluster_subscription, cluster_resource_group_name, cluster_n else: raise error -def create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id): +def create_dcr(cmd, mac_region, mac_resource_id, cluster_subscription, cluster_resource_group_name, cluster_name, dce_resource_id): from azure.cli.core.util import send_raw_request print("Calling function create_dcr") dcr_name = get_default_dcr_name(mac_region, cluster_name) dcr_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRules/{2}".format( - mac_resource_id.split("/")[2], - mac_resource_id.split("/")[4], + cluster_subscription, + cluster_resource_group_name, dcr_name ) @@ -340,7 +340,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): try: grafana_resource_id = raw_parameters.get("grafana_resource_id") if grafana_resource_id is None or grafana_resource_id == "": - return GrafanaLink.NA + return GrafanaLink.NOPARAMPROVIDED grafana_resource_id = sanitize_resource_id(grafana_resource_id) grafanaURI = "https://management.azure.com{0}?api-version={1}".format( grafana_resource_id, @@ -436,7 +436,7 @@ def link_azure_monitor_profile_artifacts(cmd, print(dce_resource_id) # DCR creation - dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_name, dce_resource_id) + dcr_resource_id = create_dcr(cmd, mac_region, mac_resource_id, cluster_subscription, cluster_resource_group_name, cluster_name, dce_resource_id) print(dcr_resource_id) # DCRA creation From 359c434c8a1831c9c93606a8b11d450831086366 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 21:50:18 -0700 Subject: [PATCH 010/109] . --- .../azext_aks_preview/managed_cluster_decorator.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index 201a409d4e3..1d90cc9365c 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1781,10 +1781,23 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: """ self._ensure_mc(mc) + # read the original value passed by the command + metriclabelsallowlist = self.raw_param.get("metriclabelsallowlist") + metricannotationsallowlist = self.raw_param.get("metricannotationsallowlist") + + # normalize + ## DO VALIDATION HERE + # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) + # metricannotationsallowlist = extract_comma_separated_string(metricannotationsallowlist, keep_none=True, default_value=[]) + if self.context.get_enable_azure_monitor_metrics(): if mc.azure_monitor_profile is None: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorMetricsProfile() mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorMetricsProfileMetrics(enabled=True) + mc.azure_monitor_profile.metrics.kubeStateMetrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( + metriclabelsallowlist=metriclabelsallowlist, + metricannotationsallowlist=metricannotationsallowlist + ) return mc From 6bbfb43611708e97e401fd291806003f14f56833 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 9 Aug 2022 21:56:33 -0700 Subject: [PATCH 011/109] whl file --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 0 -> 573719 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl new file mode 100644 index 0000000000000000000000000000000000000000..6bfbe36c2a2af4b288ee05c1d858f5a3660200b6 GIT binary patch literal 573719 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
D53eb}Rfw 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

M>!Xqn0a(mUQ(- zHNhyUM?Aq)eCTxm3wnN}b?j7#oc?UE<$3Nrm-(dHprW`&(%Rkbru4eRUsqKa@V=2f zlg@ZP`{3$g=Pp*g#G+z%x1rEFp72O7YQnrGWpbu{`e-!$nUM4VTzRh*y zI^f#13vj}{q#LUm?&^htHpeJ^OZyACZ**A-B&{pp#n;(0Vs5#4nqeb9QkE8*;}H8f!>xhBQ}s|G|pbFok!F%qQUGr0mp zE5DuG&hi3j&}up<;q2AHi2}G&0XK)kVO`F)I1XCT!ZT;Poip06#eB0tNbO2jV8YFs zeY+&-%40cHWgSixqZbvn>yic^MH>_CUVSNr4v%lDZH{tgelfqS) zhlEGeYNphf@$5(n1uwzDirvhZiK1Jia05=?*=xx*^R~tyc>KXSOXru4dS~R$L15d< zwvWInhp!jq{ClWW7MZzG4wFu(95dYKFNt3%rxLWkI8o zooKd=3t2OAf14@Hbdw>Lr`sebD$ zn_(xY{7uXH8A17u#y_NDx<7Ew5JH!?WT z!P6{Dy{{C0KCOiNdwGBkoJ_uMR<`<5X1bayA+N*{wCu- z{Zj0wki6rnlsT(9`-a|J6H>PG;h1sx1?5$R@bM~Boo=f#ujFGQ^7`mKXs?VK3+~Oz zTPENIAh1<|6PmGtnXsZqCo_lF%z6%G6PI2s0Lvs<+ST-JXt&;$)Ay!yiuu22ni;ka z;H(9W*zObB__bujDkWL4SZai?_Kcuod3pXI0`eh&s0q4=V1pYLkb@T@1jQiJ!j+O{ zC~x=!cGyHkj&?t_iI0S1#@6pKUb$y+53-qsjeb70#g5Xi@29%+Sj2*xWVK;3=z+;_ z0HRNqvK=9R>ljRxXvffx6_gN05W>VC+*RZS1ONeL*K~RMWqB|S00R5k8Ho}y!O*?6 zX^*ABaQmk{$HsB0(tePh4~Ai!%cZ)Mu6IP{xi|X-X}NKp+orm-u6Kmyxzh#&X_>1T z2O3xZ+*}S-d5&AS6vxgYo4eNJG+RwDRYoOg@*SV7Pzz- zAcn*!|D-dYJ*4UAl1#v?G414P=`>XAO>iyVoM5$5uXSy$5Z`-BE8`{O$4kXqd(qj3 z=ib0^?KoBD_nubFy>xV^{CSrwvh;0BnjDX&52aC|%q|Db_ReCkh$9 z=qk8K)u>+RsGbO%Hrft5%UN$$;n%-|;|Wx1A&>|w9c6dB4@DOa1-3a6Qr2WR5;h3Er0_5|KdiGkyU ze5dic_Jc7UpzFpF-Q$2(cw`JA2KN|b5?)`4s}I8V`%se^{Dhl46AJ|<8VXLNq`p*Z zFt1u-U1J zt$V+3n1?Px$hH)AEP+LI3Jq!(9;zWUTtQ$okibA7LG0JDFZ0W@{}c)iP-8hW3`*e% zqZ_MW=diYuxX>k3RTqJmDBv8y;h2rcg8~y%09kx`i)h0!@CCYTf zWy9_>8PGA1QP2_Ko8yvTG+`88M~L+qoS2yx{c?SVa^+;$LPawk73Ki1bte|Ov=wRF z#>Utu70_glwZAY2KE^pz+OZdTfGVlboZ<`Etp+B^vb>UU2r?Snz_c^eJ8xMZ43qGc zvCcu5CJ6^t!U^8x1tkG#>X&WLmu>H_Zp^Q46l~vov8!1=tKyPvJY%PuLwnqnLqEd0 zM95s%~@aHG}N!c&p6+y-Wq=F`C)%_l%3YVcqE2m@qw~(vy_FWaYn3N$dIjx!-(jzrF@6;CUej*Qil2G@8$CX?AYkrk z>6~Wj44*A)on`%K##CP>roT^xJ3=U3m)`adn@dBWETmm6dg5WVO;TaT*7(0=?jW9i z4n8aZfXbD>jl%rjwy*zq>f3uT|5Y>O{d8JyN$5SU?Q8Fr-e`2W71vo|&T%WhEXwhE zEnuA2lYVHYNHt zM(>6d=e2le!U}Ofiy5N93oakC6S_V7&{f<({$!xRznf_fGtxBAAp3#|ZI?(SL06Zg z8mWNm3M~yEpp?W8-s6fACIF7p*}^{H_3Wg~nZ7%)Njt3Ab5doLG+oFf=z(KqguEJN zNR#|MNFs}PY3h!=A?C*xCcZ}(P@@}Slm(D=A~nx0Vvp$BEV6Y!`2?D-bX| zz~Q0M1gER3pgIN*;>C-!h&j0Ho) zAqgIgXl%#;=mOIm9*+kjCXfc10ce~CHzZbP@j=hdspY54l%Dla{HnulXz;aBLjp(#0kDY%M>){l2xQ|ctsYKFBHW@41_W4I~7L< zsxxgu5ngx1A`vK=7D_3Tq#43I*awoxDtXu>N5b;){&1{`^+Q5@&L%Fx!db=T1m`H+ z3)IfQUig)5Qn}Cv1|k~mWo)ess|mG-L2H-Ts`$sO+P(<|IG}a~-ZK@(uryfdk3kBE znnvPV6pr}F11UbNz5`-n2{w%WqCWs}EeIQP%H-X-LL&b1 z+N4jRvzMWA6D~Hd8w$M_!8P=`*k_4&r);L0$aolZ0pPjOZ@mKlg}rx*lJv{gz0;ryULotxc0@HGPDmJo%ix17A-SWCgA91ue#*nOk0=7(+$~ zAdF!?IoTw_vX3Rwwt+JoRb^yoya8~xcmndmQV)tgUF@)LSu}K?(9!O=K$sW zPg{bb`F)SrC&}bsp7qObn=dZc7@un=B~hx;V++{8^@TIXV_%+RCc+K?l~^$XErv9} zEfpu&V*yEJ8L_4iBRAw*JjQOHR|g{h)sATb0POR%JadLhE+<`FBw@Rhaff3`0e21D zeuP7X_${@(BCdk(QbgC%eph4yI1(>I?qtC_JRKaNDL#*!etkg2qUrA%9MVFZ^ah}A z_~V1_dWr49qzrIEC6sgxNE3xS46WgUm6)e*`=LqbpxS8}aR6_f!}F@N>hKsCe8yd| z{MM3=CSc!qr+CR^9C}i$m&suXBJfyczu{>eWk{HBG>2uI!ZPct!)%|q^>Dx zTfQpv18-^?_5?Q60XUUefYTr=!~jDBE8ktob$825TKNrLPy9#*$$U{jt9gfS&D5EZ zM1w`zb^!kFSOC%QS&^N(`&m0rICoOh!ZTM(W4X4VNlOC{+?Jndjw#goS z`hwOCJp~!&yoF&Wb6V)ldPUg~K;$kQv;vtNt8!(AD_Y5XTGbZ`GLj?okf~}Vk$8SO zSAuDDC(hx!---in9DK519x&@F`Usfx_So-uy(3Y7 zW>gP8O=>gb%S}jo=oMS?gVW6Pt>Xnj#@wOX(Wd)Qs6k{9@NLQxjK=@1PLkmswh{8( z$s~&) zK8xk^aj5kwL5BKlZ%=VmljC-gkQVq!#P>Mxv%IzI9ityOgYdKT(QF8dFMeRcWq<29ju7*zouGv~mZ>O!0>^zOgJ(L8Iyn z)D!BoWkb?tCs-~p)|YvU3CKTyUzh<_oKLe&_bN!HF#?8=l?T1x%dGH|=f6moaTQ{- z*u^itQnt8Qq7F0p_Ao9yCLQh5q$duzybN&wIn^%fCJFbr2^j=s-Q^mxwT*|EvsA1P zFL%^0lZ`d!q2bLKF!fy*EY*#W%EMQa0;afuP`M#{+6OXf=NUg!N|)UX8{ca>fb(|2 z4%Ss0h7qYE#v3+c^sWo=b4TMxh!HSnALOpt)sb(++sO}g#03QG7;vu(6dp(Ht`oev zFb(HsK~le6YsW^PiOIG9h-+)khBqDhwS0Wkolk%Zn|Wzv^=oJd`xV0&?N%~yO-HjA z{{jkG!`Oc_Z{cwz5A?gQAu6xEA8)owXF+u6`3#V|y3mDd{_0a(TqJ7sk+<#+0yM|6 z(&*+K?pX?QaX45u85yMK4goflH9(s)z~ggW9BS!0q<$9P+VE3UBilZ?OJHCRZP6J) z-B@`D-Ke$c{EgvKZ?z@yhGX_}oz`Vbs%HE=qw|)3|KXXBjwSS6C(&SldEKW3>^Ly? zu>kJ8P}ynDMC2!&ZzJ@&QjH!p>_>)9S@)?y)^GrDtH|+YBlPHIBQMbh*Uib&s9Y8_ z0tyG=l`Z~akBe&6z;}3$uAg)5nSt=mz4J#_<$Kb!MjU!L9ahRT-eO{wg-#i{67rcWm1pBC(sBC?`o={2)_z6s!HK+ZBz?Q>zDCDsO#0Ir6UC;^V2Eh-7F-oL zlU!B60yuOxe$mJdo-#Sfp*IE8v+XD5bL@nFlGU{C#W`NUyEIM#xYt`~K_x6fVqL1D zs=Fg)iA#>oZuiY=P(`r1{sg;D^AMElQw7iv#IPZ_xQa!eld7|2@)9|Cd0_>*GNuqP z_C{m^0Vf=c{G??q#m#0yzXfhvnCbdB~6P)fspft%cAvf&8CqpC{+uYuJ z61jSXLRgO9Ch7$JFA2?Zrlie7T12A>!Gy`OLs*^PcF0!D!zeM};*>RUZiNYZQk#$^ z>~!+;7Gylg@CMA{A**ty#CGqU^@^{`_xf0b$FK}NANh)^q=clb+p{1Ou;3~`S;M0> z1r?mlJ>79n#kIHb5vlKlVhVe_C9Iy^Q;p5$6yDh}ZByZ5%`x)aMS%j0It`C0T3ew^ zK<-Wat^uH6RH#DO!<>$ESO+jISMyWwo2^6%P35sEO2*s0Rpd1-!*|B|H)LWW

;f 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

v)C3>m^ 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�kwcXLc|nG)(Lv!Pox@c2x5cv8>T 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 Oi=aA#Z34m* Date: Wed, 10 Aug 2022 08:48:35 -0700 Subject: [PATCH 012/109] . --- src/aks-preview/azext_aks_preview/custom.py | 1 - .../managed_cluster_decorator.py | 31 ++++++++++--------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index 818b4f40244..68b6661f2b8 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -816,7 +816,6 @@ def aks_update( # update mc profile mc = aks_update_decorator.update_mc_profile_preview() - print("REACHES HERE 13") print(raw_parameters.get("enable_azuremonitormetrics")) if ( raw_parameters.get("enable_azuremonitormetrics") or raw_parameters.get("disable_azuremonitormetrics")): diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index 1d90cc9365c..d378163d04e 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1407,25 +1407,20 @@ def _get_enable_azure_monitor_metrics(self, enable_validation: bool = False) -> # Read the original value passed by the command. - print("REACHES HERE 1") enable_azure_monitor_metrics = self.raw_param.get("enable_azuremonitormetrics") # In create mode, try to read the property value corresponding to the parameter from the `mc` object. if self.decorator_mode == DecoratorMode.CREATE: - print ("REACHES HERE OUT OF TURN") if ( self.mc and self.mc.azure_monitor_profile and self.mc.azure_monitor_profile.metrics ): - print("REACHES HERE 3") enable_azure_monitor_metrics = self.mc.azure_monitor_profile.metrics.enabled # This parameter does not need dynamic completion. if enable_validation: - print("REACHES HERE 4") if enable_azure_monitor_metrics and self._get_disable_azure_monitor_metrics(False): - print("REACHES HERE 5") raise MutuallyExclusiveArgumentError( "Cannot specify --enable-azuremonitormetrics and --enable-azuremonitormetrics at the same time." ) @@ -1448,14 +1443,11 @@ def _get_disable_azure_monitor_metrics(self, enable_validation: bool = False) -> """ # Read the original value passed by the command. disable_azure_monitor_metrics = self.raw_param.get("disable_azuremonitormetrics") - print("REACHES HERE 10") # This option is not supported in create mode, hence we do not read the property value from the `mc` object. # This parameter does not need dynamic completion. if enable_validation: - print("REACHES HERE 11") if disable_azure_monitor_metrics and self._get_enable_azure_monitor_metrics(False): - print("REACHES HERE 12") raise MutuallyExclusiveArgumentError( "Cannot specify --enable-azuremonitormetrics and --disable-azuremonitormetrics at the same time." ) @@ -1782,8 +1774,8 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: self._ensure_mc(mc) # read the original value passed by the command - metriclabelsallowlist = self.raw_param.get("metriclabelsallowlist") - metricannotationsallowlist = self.raw_param.get("metricannotationsallowlist") + metriclabelsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metriclabelsallowlist") + metricannotationsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metricannotationsallowlist") # normalize ## DO VALIDATION HERE @@ -2143,21 +2135,30 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: :return: the ManagedCluster object """ self._ensure_mc(mc) - print("REACHES HERE 6") + + # read the original value passed by the command + metriclabelsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metriclabelsallowlist") + metricannotationsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metricannotationsallowlist") + + # normalize + ## DO VALIDATION HERE + # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) + # metricannotationsallowlist = extract_comma_separated_string(metricannotationsallowlist, keep_none=True, default_value=[]) if self.context.get_enable_azure_monitor_metrics(): - print("REACHES HERE 7") if mc.azure_monitor_profile is None: - print("REACHES HERE 8") mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() - print("REACHES HERE 9") mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=True) + mc.azure_monitor_profile.metrics.kubeStateMetrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( + metriclabelsallowlist=metriclabelsallowlist, + metricannotationsallowlist=metricannotationsallowlist + ) if self.context.get_disable_azure_monitor_metrics(): if mc.azure_monitor_profile is None: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=False) - + return mc def update_mc_profile_preview(self) -> ManagedCluster: From 16b2279f1c0fd39a29e0517b21026be51a7153b1 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 09:28:46 -0700 Subject: [PATCH 013/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 4 +--- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573719 -> 573580 bytes 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 35d30f05356..5c750150647 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -71,10 +71,8 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): GRAFANA_ROLE_ASSIGNMENT_API = "2018-01-01-preview" def get_default_mac_name(cluster_region, cluster_name): - ################### - ################### TEMPORARY -> -MAC in name because of bug with the account creation, deletion - ################### default_mac_name = "MSProm-" + MapToClosestMACRegion[cluster_region] + "-" + cluster_name + ### CHANGE THIS TO 25?? default_mac_name = default_mac_name[0:43] return default_mac_name diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index 6bfbe36c2a2af4b288ee05c1d858f5a3660200b6..1b5a40744839bea09fd990e87c78ba144a050d54 100644 GIT binary patch delta 36602 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 ANB{r; delta 36882 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

ZMB37}?^eIJ}W16vKs$&i`2+64%k) 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 Date: Tue, 16 Aug 2022 15:14:22 -0700 Subject: [PATCH 023/109] remove dcra --- .../azext_aks_preview/azuremonitorprofile.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index bfe2a563d34..13cfcde38c1 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -611,6 +611,38 @@ def create_rules(cmd, cluster_region, cluster_subscription, cluster_resource_gro else: raise error +def delete_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name): + from azure.cli.core.util import send_raw_request + print("Calling function delete_dcra") + + cluster_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.ContainerService/managedClusters/{2}".format( + cluster_subscription, + cluster_resource_group_name, + cluster_name + ) + + dcra_name = get_default_dcra_name(cluster_region, cluster_name) + dcra_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{2}".format( + cluster_subscription, + cluster_resource_group_name, + dcra_name + ) + + # only create or delete the association between the DCR and cluster + association_body = json.dumps({"location": cluster_region, "properties": {}}) + association_url = f"https://management.azure.com{cluster_resource_id}/providers/Microsoft.Insights/dataCollectionRuleAssociations/{dcra_name}?api-version=2021-09-01-preview" + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "DELETE", association_url, + body=association_body) + error = None + return True + except CLIError as e: + error = e + return False + else: + raise error + def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, cluster_resource_group_name, @@ -657,6 +689,9 @@ def unlink_azure_monitor_profile_artifacts(cmd, raw_parameters, ): print("Calling unlink_azure_monitor_profile_artifacts...") + # Remove DCRA link + isSuccessfulDeletion = delete_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name) + print("DCRA removal successful -> ", isSuccessfulDeletion) # pylint: disable=too-many-locals,too-many-branches,too-many-statements,line-too-long def ensure_azure_monitor_profile_prerequisites( From 509d0e876c4ecf37e95369241e8895cc6d475776 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 16 Aug 2022 15:15:00 -0700 Subject: [PATCH 024/109] . --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 574912 -> 575022 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index 371c1ad0dd8245bcf51b60305ae75409884e440c..aff61a6f1381acca8a21e99311c32edc79f90150 100644 GIT binary patch delta 15554 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 Zrf_i7|00p8JOuE#8-kBiZ4H4b{}1K{#ozz{ From bdb09045c88d142cbd682ba5d1c8eaa1409f5486 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Tue, 16 Aug 2022 15:35:29 -0700 Subject: [PATCH 025/109] pt1m --- src/aks-preview/azext_aks_preview/azuremonitorprofile.py | 1 + 1 file changed, 1 insertion(+) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 13cfcde38c1..129467e6024 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -556,6 +556,7 @@ def create_rules(cmd, cluster_region, cluster_subscription, cluster_resource_gro mac_resource_id ], "clusterName": cluster_name, + "interval": "PT1M", "rules": default_rules_template["resources"][0]["properties"]["rules"] } }) From e591308f7b26a7d4d604b5179a3af238471e71c7 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 17 Aug 2022 14:14:54 -0700 Subject: [PATCH 026/109] merge main and update setup version to 9.94 --- ...> aks_preview-0.5.94-py2.py3-none-any.whl} | Bin 575022 -> 578639 bytes src/aks-preview/setup.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename src/aks-preview/dist/{aks_preview-0.5.92-py2.py3-none-any.whl => aks_preview-0.5.94-py2.py3-none-any.whl} (51%) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl similarity index 51% rename from src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl rename to src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl index aff61a6f1381acca8a21e99311c32edc79f90150..14d6e721689f2752fb0f3050461ee846d641569d 100644 GIT binary patch delta 272538 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

W3dm@=0yuTvg|P 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 delta 219968 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ΠJlTxV$)YTVgF#V4J{}e37AD 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

      |_$mK##*Fo87EA2uZf@1;F}`KH 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 diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index aed0f708af1..8033e1125a1 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -9,7 +9,7 @@ from setuptools import setup, find_packages -VERSION = "0.5.93" +VERSION = "0.5.94" CLASSIFIERS = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", From 00cf4d8a689049806a1518f315a1b964f302a99b Mon Sep 17 00:00:00 2001 From: bragi92 Date: Fri, 19 Aug 2022 10:40:47 -0700 Subject: [PATCH 027/109] bug fixes --- .../azext_aks_preview/azuremonitorprofile.py | 21 ++++++++++--------- src/aks-preview/azext_aks_preview/custom.py | 5 ----- .../managed_cluster_decorator.py | 2 -- 3 files changed, 11 insertions(+), 17 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 129467e6024..1d16dad913c 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -75,7 +75,7 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): "eastus2euap": "eastus2euap", "centraluseuap": "westeurope", "brazilsoutheast": "eastus" - } +} AzureCloudLocationToOmsRegionCodeMap = { "australiasoutheast": "ASE", @@ -111,7 +111,7 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): "switzerlandnorth": "CHN", "switzerlandwest": "CHW", "uaecentral": "AUH", - } +} def validate_ksm_parameter(ksmparam): print("Calling validate_ksm_parameter") @@ -140,7 +140,7 @@ def validate_ksm_parameter(ksmparam): if v == "=": if previous == ord(",") or next != ord("["): raise InvalidArgumentValueError( - "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" ) name = ksmparam[firstWordPos:i] labelValueMap[name] = [] @@ -148,14 +148,14 @@ def validate_ksm_parameter(ksmparam): elif v == "[": if previous != ord("="): raise InvalidArgumentValueError( - "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" ) firstWordPos = i + 1 elif v == "]": # if after metric group, has char not comma or end. if next != EOF and next != ord(","): raise InvalidArgumentValueError( - "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" ) if previous != ord("["): labelValueMap[name].append(ksmparam[firstWordPos:i]) @@ -164,7 +164,7 @@ def validate_ksm_parameter(ksmparam): # if starts or ends with comma if previous == v or next == EOF or next == ord("]"): raise InvalidArgumentValueError( - "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" ) if previous != ord("]"): labelValueMap[name].append(ksmparam[firstWordPos:i]) @@ -177,13 +177,13 @@ def validate_ksm_parameter(ksmparam): for label in labelValueMap: if (bool(re.match(r'^[a-zA-Z_][A-Za-z0-9_]+$', label)))== False: raise InvalidArgumentValueError( - "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" ) # else: # for value in labelValueMap[label]: # if (bool(labelValuePattern.match(value))) == False: # raise InvalidArgumentValueError( - # "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + # "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" # ) return ksmparam @@ -474,12 +474,12 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): try: MonitoringReader = "43d0d8ad-25c7-4714-9337-8ba259a9fe05" roleDefinitionURI = "https://management.azure.com{0}/providers/Microsoft.Authorization/roleAssignments/{1}?api-version={2}".format( - grafana_resource_id, + mac_resource_id, uuid.uuid4(), GRAFANA_ROLE_ASSIGNMENT_API ) roleDefinitionId = "{0}/providers/Microsoft.Authorization/roleDefinitions/{1}".format( - grafana_resource_id, + mac_resource_id, MonitoringReader ) @@ -490,6 +490,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): }}) send_raw_request(cmd.cli_ctx, "PUT", roleDefinitionURI, body=association_body) + print("Role Assignment successful") except CLIError as e: error = e if e.response.status_code != 409: diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index ba11d22d037..d2d77443d89 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -671,11 +671,6 @@ def aks_create( apiserver_subnet_id=None, dns_zone_resource_id=None, enable_keda=False, - enable_azuremonitormetrics=False, - mac_resource_id=None, - metriclabelsallowlist=None, - metricannotationsallowlist=None, - grafana_resource_id=None, # nodepool host_group_id=None, crg_id=None, diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index 855155d8936..14cb71755f6 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1780,8 +1780,6 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: metriclabelsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metriclabelsallowlist") metricannotationsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metricannotationsallowlist") - print("REACHES HERE 2") - # Validate Param metriclabelsallowlist = validate_ksm_parameter(metriclabelsallowlist) metricannotationsallowlist = validate_ksm_parameter(metricannotationsallowlist) From d0743e935f122d121683f5960d60e68f8076b0bf Mon Sep 17 00:00:00 2001 From: bragi92 Date: Fri, 19 Aug 2022 10:41:27 -0700 Subject: [PATCH 028/109] new bits --- .../aks_preview-0.5.94-py2.py3-none-any.whl | Bin 578639 -> 578622 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl index 14d6e721689f2752fb0f3050461ee846d641569d..c3906b16c82e1b992c36dc5de124fccb1a604f58 100644 GIT binary patch delta 33721 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 delta 33486 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 JxCa=j{eKUJlQsYV From bd66b53e167722662f5f73585aacb7e283a4cd90 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Fri, 19 Aug 2022 12:29:28 -0700 Subject: [PATCH 029/109] bug fixes --- .../azext_aks_preview/azuremonitorprofile.py | 53 +++++++++++++++++- .../aks_preview-0.5.94-py2.py3-none-any.whl | Bin 578622 -> 578803 bytes 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 1d16dad913c..e0a050a641c 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -570,7 +570,6 @@ def create_rules(cmd, cluster_region, cluster_subscription, cluster_resource_gro print("Successully deployed Node Recording rules") break except CLIError as e: - print(e) error = e else: raise error @@ -645,6 +644,55 @@ def delete_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_grou else: raise error +def delete_rules(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name): + from azure.cli.core.util import send_raw_request + + default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(cluster_name) + default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( + cluster_subscription, + cluster_resource_group_name, + default_rule_group_name + ) + url = "https://management.azure.com{0}?api-version={1}".format( + default_rule_group_id, + RULES_API + ) + + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "DELETE", url) + error = None + print("Successully DELETED Node Recording rules") + break + except CLIError as e: + error = e + else: + raise error + + + default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name) + default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( + cluster_subscription, + cluster_resource_group_name, + default_rule_group_name + ) + url = "https://management.azure.com{0}?api-version={1}".format( + default_rule_group_id, + RULES_API + ) + + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "DELETE", url) + error = None + print("Successully DELETED Kubernetes Recording rules") + break + except CLIError as e: + error = e + else: + raise error + + def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, cluster_resource_group_name, @@ -694,6 +742,9 @@ def unlink_azure_monitor_profile_artifacts(cmd, # Remove DCRA link isSuccessfulDeletion = delete_dcra(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name) print("DCRA removal successful -> ", isSuccessfulDeletion) + + # Delete rules (Conflict({"error":{"code":"InvalidResourceLocation","message":"The resource 'NodeRecordingRulesRuleGroup-grace-cli-3' already exists in location 'eastus2' in resource group 'grace-cli-3'. A resource with the same name cannot be created in location 'eastus'. Please select a new resource name."}}) + delete_rules(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name) # pylint: disable=too-many-locals,too-many-branches,too-many-statements,line-too-long def ensure_azure_monitor_profile_prerequisites( diff --git a/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl index c3906b16c82e1b992c36dc5de124fccb1a604f58..b16a191656d5531029e24e62929a07a019aed8e0 100644 GIT binary patch delta 16360 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 delta 16236 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 From c2158dbc9a1b3eb7016aca6805d9907274e2662f Mon Sep 17 00:00:00 2001 From: bragi92 Date: Fri, 19 Aug 2022 16:11:07 -0700 Subject: [PATCH 030/109] new monitoring data reader role --- src/aks-preview/azext_aks_preview/azuremonitorprofile.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index e0a050a641c..526f99c9fc9 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -472,7 +472,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): # Add Role Assignment try: - MonitoringReader = "43d0d8ad-25c7-4714-9337-8ba259a9fe05" + MonitoringDataReader = "b0d8363b-8ddd-447d-831f-62ca05bff136" roleDefinitionURI = "https://management.azure.com{0}/providers/Microsoft.Authorization/roleAssignments/{1}?api-version={2}".format( mac_resource_id, uuid.uuid4(), @@ -480,7 +480,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): ) roleDefinitionId = "{0}/providers/Microsoft.Authorization/roleDefinitions/{1}".format( mac_resource_id, - MonitoringReader + MonitoringDataReader ) association_body = json.dumps({ From a1293c56eff531be5e4f71cab17b7b192473d767 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 22 Aug 2022 10:21:17 -0700 Subject: [PATCH 031/109] . --- src/aks-preview/azext_aks_preview/azuremonitorprofile.py | 1 - 1 file changed, 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 526f99c9fc9..eee249d04d5 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -692,7 +692,6 @@ def delete_rules(cmd, cluster_region, cluster_subscription, cluster_resource_gro else: raise error - def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, cluster_resource_group_name, From 64af05eb7191166f1fd43ed70ee5b80e0e02615a Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 22 Aug 2022 14:05:30 -0700 Subject: [PATCH 032/109] . --- .../v2019_04_30/__init__.py | 20 - .../v2019_04_30/_configuration.py | 73 -- .../v2019_04_30/_container_service_client.py | 101 -- .../v2019_04_30/_patch.py | 31 - .../v2019_04_30/_vendor.py | 27 - .../v2019_04_30/aio/__init__.py | 20 - .../v2019_04_30/aio/_configuration.py | 72 -- .../aio/_container_service_client.py | 98 -- .../v2019_04_30/aio/_patch.py | 31 - .../v2019_04_30/aio/operations/__init__.py | 18 - ..._open_shift_managed_clusters_operations.py | 693 ------------- .../v2019_04_30/aio/operations/_patch.py | 19 - .../v2019_04_30/models/__init__.py | 53 - .../models/_container_service_client_enums.py | 63 -- .../v2019_04_30/models/_models_py3.py | 760 -------------- .../v2019_04_30/models/_patch.py | 19 - .../v2019_04_30/operations/__init__.py | 18 - ..._open_shift_managed_clusters_operations.py | 927 ------------------ .../v2019_04_30/operations/_patch.py | 19 - .../aks_preview-0.5.94-py2.py3-none-any.whl | Bin 578803 -> 0 bytes 20 files changed, 3062 deletions(-) delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py delete mode 100644 src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py delete mode 100644 src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py deleted file mode 100644 index 37a5f9e02e6..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 ._container_service_client import ContainerServiceClient - -try: - from ._patch import __all__ as _patch_all - from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk -__all__ = ['ContainerServiceClient'] -__all__.extend([p for p in _patch_all if p not in __all__]) - -_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py deleted file mode 100644 index 2301b306f79..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_configuration.py +++ /dev/null @@ -1,73 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 typing import Any, TYPE_CHECKING - -from azure.core.configuration import Configuration -from azure.core.pipeline import policies -from azure.mgmt.core.policies import ARMChallengeAuthenticationPolicy, ARMHttpLoggingPolicy - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials import TokenCredential - -VERSION = "unknown" - -class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes - """Configuration for ContainerServiceClient. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param credential: Credential needed for the client to connect to Azure. - :type credential: ~azure.core.credentials.TokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure - subscription. The subscription ID forms part of the URI for every service call. - :type subscription_id: str - :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__( - self, - credential: "TokenCredential", - subscription_id: str, - **kwargs: Any - ) -> None: - super(ContainerServiceClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop('api_version', "2019-04-30") # type: str - - if credential is None: - raise ValueError("Parameter 'credential' must not be None.") - if subscription_id is None: - raise ValueError("Parameter 'subscription_id' must not be None.") - - self.credential = credential - self.subscription_id = subscription_id - self.api_version = api_version - self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) - kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) - self._configure(**kwargs) - - def _configure( - self, - **kwargs # type: Any - ): - # type: (...) -> None - self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get('retry_policy') or policies.RetryPolicy(**kwargs) - self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get('redirect_policy') or policies.RedirectPolicy(**kwargs) - self.authentication_policy = kwargs.get('authentication_policy') - if self.credential and not self.authentication_policy: - self.authentication_policy = ARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py deleted file mode 100644 index ec8f09f2259..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_container_service_client.py +++ /dev/null @@ -1,101 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 copy import deepcopy -from typing import Any, TYPE_CHECKING - -from msrest import Deserializer, Serializer - -from azure.core.rest import HttpRequest, HttpResponse -from azure.mgmt.core import ARMPipelineClient - -from . import models -from ._configuration import ContainerServiceClientConfiguration -from .operations import OpenShiftManagedClustersOperations - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials import TokenCredential - -class ContainerServiceClient: - """The Container Service Client. - - :ivar open_shift_managed_clusters: OpenShiftManagedClustersOperations operations - :vartype open_shift_managed_clusters: - azure.mgmt.containerservice.v2019_04_30.operations.OpenShiftManagedClustersOperations - :param credential: Credential needed for the client to connect to Azure. - :type credential: ~azure.core.credentials.TokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure - subscription. The subscription ID forms part of the URI for every service call. - :type subscription_id: str - :param base_url: Service URL. Default value is "https://management.azure.com". - :type base_url: str - :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - """ - - def __init__( - self, - credential: "TokenCredential", - subscription_id: str, - base_url: str = "https://management.azure.com", - **kwargs: Any - ) -> None: - self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) - self._client = ARMPipelineClient(base_url=base_url, config=self._config, **kwargs) - - 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) - self._serialize.client_side_validation = False - self.open_shift_managed_clusters = OpenShiftManagedClustersOperations( - self._client, self._config, self._serialize, self._deserialize - ) - - - def _send_request( - self, - request: HttpRequest, - **kwargs: Any - ) -> HttpResponse: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = client._send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.HttpResponse - """ - - request_copy = deepcopy(request) - request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) - - def close(self): - # type: () -> None - self._client.close() - - def __enter__(self): - # type: () -> ContainerServiceClient - self._client.__enter__() - return self - - def __exit__(self, *exc_details): - # type: (Any) -> None - self._client.__exit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py deleted file mode 100644 index 74e48ecd07c..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_patch.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# -# The MIT License (MIT) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the ""Software""), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# -------------------------------------------------------------------------- - -# This file is used for handwritten extensions to the generated code. Example: -# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md -def patch_sdk(): - pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py deleted file mode 100644 index 138f663c53a..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/_vendor.py +++ /dev/null @@ -1,27 +0,0 @@ -# -------------------------------------------------------------------------- -# 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 azure.core.pipeline.transport import HttpRequest - -def _convert_request(request, files=None): - data = request.content if not files else None - request = HttpRequest(method=request.method, url=request.url, headers=request.headers, data=data) - if files: - request.set_formdata_body(files) - return request - -def _format_url_section(template, **kwargs): - components = template.split("/") - while components: - try: - return template.format(**kwargs) - except KeyError as key: - formatted_components = template.split("/") - components = [ - c for c in formatted_components if "{}".format(key.args[0]) not in c - ] - template = "/".join(components) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py deleted file mode 100644 index 37a5f9e02e6..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/__init__.py +++ /dev/null @@ -1,20 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 ._container_service_client import ContainerServiceClient - -try: - from ._patch import __all__ as _patch_all - from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import -except ImportError: - _patch_all = [] -from ._patch import patch_sdk as _patch_sdk -__all__ = ['ContainerServiceClient'] -__all__.extend([p for p in _patch_all if p not in __all__]) - -_patch_sdk() diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py deleted file mode 100644 index dd0be08c423..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_configuration.py +++ /dev/null @@ -1,72 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 typing import Any, TYPE_CHECKING - -from azure.core.configuration import Configuration -from azure.core.pipeline import policies -from azure.mgmt.core.policies import ARMHttpLoggingPolicy, AsyncARMChallengeAuthenticationPolicy - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential - -VERSION = "unknown" - -class ContainerServiceClientConfiguration(Configuration): # pylint: disable=too-many-instance-attributes - """Configuration for ContainerServiceClient. - - Note that all parameters used to create this instance are saved as instance - attributes. - - :param credential: Credential needed for the client to connect to Azure. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure - subscription. The subscription ID forms part of the URI for every service call. - :type subscription_id: str - :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - """ - - def __init__( - self, - credential: "AsyncTokenCredential", - subscription_id: str, - **kwargs: Any - ) -> None: - super(ContainerServiceClientConfiguration, self).__init__(**kwargs) - api_version = kwargs.pop('api_version', "2019-04-30") # type: str - - if credential is None: - raise ValueError("Parameter 'credential' must not be None.") - if subscription_id is None: - raise ValueError("Parameter 'subscription_id' must not be None.") - - self.credential = credential - self.subscription_id = subscription_id - self.api_version = api_version - self.credential_scopes = kwargs.pop('credential_scopes', ['https://management.azure.com/.default']) - kwargs.setdefault('sdk_moniker', 'mgmt-containerservice/{}'.format(VERSION)) - self._configure(**kwargs) - - def _configure( - self, - **kwargs: Any - ) -> None: - self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs) - self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs) - self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs) - self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs) - self.http_logging_policy = kwargs.get('http_logging_policy') or ARMHttpLoggingPolicy(**kwargs) - self.retry_policy = kwargs.get('retry_policy') or policies.AsyncRetryPolicy(**kwargs) - self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs) - self.redirect_policy = kwargs.get('redirect_policy') or policies.AsyncRedirectPolicy(**kwargs) - self.authentication_policy = kwargs.get('authentication_policy') - if self.credential and not self.authentication_policy: - self.authentication_policy = AsyncARMChallengeAuthenticationPolicy(self.credential, *self.credential_scopes, **kwargs) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py deleted file mode 100644 index 518b6b89f5c..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_container_service_client.py +++ /dev/null @@ -1,98 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 copy import deepcopy -from typing import Any, Awaitable, TYPE_CHECKING - -from msrest import Deserializer, Serializer - -from azure.core.rest import AsyncHttpResponse, HttpRequest -from azure.mgmt.core import AsyncARMPipelineClient - -from .. import models -from ._configuration import ContainerServiceClientConfiguration -from .operations import OpenShiftManagedClustersOperations - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - from azure.core.credentials_async import AsyncTokenCredential - -class ContainerServiceClient: - """The Container Service Client. - - :ivar open_shift_managed_clusters: OpenShiftManagedClustersOperations operations - :vartype open_shift_managed_clusters: - azure.mgmt.containerservice.v2019_04_30.aio.operations.OpenShiftManagedClustersOperations - :param credential: Credential needed for the client to connect to Azure. - :type credential: ~azure.core.credentials_async.AsyncTokenCredential - :param subscription_id: Subscription credentials which uniquely identify Microsoft Azure - subscription. The subscription ID forms part of the URI for every service call. - :type subscription_id: str - :param base_url: Service URL. Default value is "https://management.azure.com". - :type base_url: str - :keyword api_version: Api Version. Default value is "2019-04-30". Note that overriding this - default value may result in unsupported behavior. - :paramtype api_version: str - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - """ - - def __init__( - self, - credential: "AsyncTokenCredential", - subscription_id: str, - base_url: str = "https://management.azure.com", - **kwargs: Any - ) -> None: - self._config = ContainerServiceClientConfiguration(credential=credential, subscription_id=subscription_id, **kwargs) - self._client = AsyncARMPipelineClient(base_url=base_url, config=self._config, **kwargs) - - 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) - self._serialize.client_side_validation = False - self.open_shift_managed_clusters = OpenShiftManagedClustersOperations( - self._client, self._config, self._serialize, self._deserialize - ) - - - def _send_request( - self, - request: HttpRequest, - **kwargs: Any - ) -> Awaitable[AsyncHttpResponse]: - """Runs the network request through the client's chained policies. - - >>> from azure.core.rest import HttpRequest - >>> request = HttpRequest("GET", "https://www.example.org/") - - >>> response = await client._send_request(request) - - - For more information on this code flow, see https://aka.ms/azsdk/python/protocol/quickstart - - :param request: The network request you want to make. Required. - :type request: ~azure.core.rest.HttpRequest - :keyword bool stream: Whether the response payload will be streamed. Defaults to False. - :return: The response of your network call. Does not do error handling on your response. - :rtype: ~azure.core.rest.AsyncHttpResponse - """ - - request_copy = deepcopy(request) - request_copy.url = self._client.format_url(request_copy.url) - return self._client.send_request(request_copy, **kwargs) - - async def close(self) -> None: - await self._client.close() - - async def __aenter__(self) -> "ContainerServiceClient": - await self._client.__aenter__() - return self - - async def __aexit__(self, *exc_details) -> None: - await self._client.__aexit__(*exc_details) diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py deleted file mode 100644 index 74e48ecd07c..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/_patch.py +++ /dev/null @@ -1,31 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# -# Copyright (c) Microsoft Corporation. All rights reserved. -# -# The MIT License (MIT) -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the ""Software""), to -# deal in the Software without restriction, including without limitation the -# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or -# sell copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in -# all copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS -# IN THE SOFTWARE. -# -# -------------------------------------------------------------------------- - -# This file is used for handwritten extensions to the generated code. Example: -# https://github.com/Azure/azure-sdk-for-python/blob/main/doc/dev/customize_code/how-to-patch-sdk-code.md -def patch_sdk(): - pass \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py deleted file mode 100644 index 211a8787980..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 ._open_shift_managed_clusters_operations import OpenShiftManagedClustersOperations - -from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import -from ._patch import patch_sdk as _patch_sdk -__all__ = [ - 'OpenShiftManagedClustersOperations', -] -__all__.extend([p for p in _patch_all if p not in __all__]) -_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py deleted file mode 100644 index f675bb3916d..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_open_shift_managed_clusters_operations.py +++ /dev/null @@ -1,693 +0,0 @@ -# pylint: disable=too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 typing import Any, AsyncIterable, Callable, Dict, Optional, TypeVar, Union, cast - -from azure.core.async_paging import AsyncItemPaged, AsyncList -from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import AsyncHttpResponse -from azure.core.polling import AsyncLROPoller, AsyncNoPolling, AsyncPollingMethod -from azure.core.rest import HttpRequest -from azure.core.tracing.decorator import distributed_trace -from azure.core.tracing.decorator_async import distributed_trace_async -from azure.core.utils import case_insensitive_dict -from azure.mgmt.core.exceptions import ARMErrorFormat -from azure.mgmt.core.polling.async_arm_polling import AsyncARMPolling - -from ... import models as _models -from ..._vendor import _convert_request -from ...operations._open_shift_managed_clusters_operations import build_create_or_update_request_initial, build_delete_request_initial, build_get_request, build_list_by_resource_group_request, build_list_request, build_update_tags_request_initial -T = TypeVar('T') -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, AsyncHttpResponse], T, Dict[str, Any]], Any]] - -class OpenShiftManagedClustersOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2019_04_30.aio.ContainerServiceClient`'s - :attr:`open_shift_managed_clusters` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs) -> None: - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - - @distributed_trace - def list( - self, - **kwargs: Any - ) -> AsyncIterable[_models.OpenShiftManagedClusterListResult]: - """Gets a list of OpenShift managed clusters in the specified subscription. - - Gets a list of OpenShift managed clusters in the specified subscription. The operation returns - properties of each OpenShift managed cluster. - - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of - cls(response) - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] - - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - def prepare_request(next_link=None): - if not next_link: - - request = build_list_request( - subscription_id=self._config.subscription_id, - api_version=api_version, - template_url=self.list.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - else: - - request = build_list_request( - subscription_id=self._config.subscription_id, - api_version=api_version, - template_url=next_link, - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request - - async def extract_data(pipeline_response): - deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - list_of_elem = cls(list_of_elem) - return deserialized.next_link or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - - return AsyncItemPaged( - get_next, extract_data - ) - list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore - - @distributed_trace - def list_by_resource_group( - self, - resource_group_name: str, - **kwargs: Any - ) -> AsyncIterable[_models.OpenShiftManagedClusterListResult]: - """Lists OpenShift managed clusters in the specified subscription and resource group. - - Lists OpenShift managed clusters in the specified subscription and resource group. The - operation returns properties of each OpenShift managed cluster. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of - cls(response) - :rtype: - ~azure.core.async_paging.AsyncItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] - - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - def prepare_request(next_link=None): - if not next_link: - - request = build_list_by_resource_group_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - api_version=api_version, - template_url=self.list_by_resource_group.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - else: - - request = build_list_by_resource_group_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - api_version=api_version, - template_url=next_link, - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request - - async def extract_data(pipeline_response): - deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - list_of_elem = cls(list_of_elem) - return deserialized.next_link or None, AsyncList(list_of_elem) - - async def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response = await self._client._pipeline.run( # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - - return AsyncItemPaged( - get_next, extract_data - ) - list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore - - @distributed_trace_async - async def get( - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - """Gets a OpenShift managed cluster. - - Gets the details of the managed OpenShift cluster with a specified resource group and name. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: OpenShiftManagedCluster, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster - :raises: ~azure.core.exceptions.HttpResponseError - """ - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - - request = build_get_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - template_url=self.get.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - async def _create_or_update_initial( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.OpenShiftManagedCluster, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - _json = self._serialize.body(parameters, 'OpenShiftManagedCluster') - - request = build_create_or_update_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - content_type=content_type, - json=_json, - template_url=self._create_or_update_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if response.status_code == 200: - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if response.status_code == 201: - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace_async - async def begin_create_or_update( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.OpenShiftManagedCluster, - **kwargs: Any - ) -> AsyncLROPoller[_models.OpenShiftManagedCluster]: - """Creates or updates an OpenShift managed cluster. - - Creates or updates a OpenShift managed cluster with the specified configuration for agents and - OpenShift version. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :param parameters: Parameters supplied to the Create or Update an OpenShift Managed Cluster - operation. - :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns either OpenShiftManagedCluster or the - result of cls(response) - :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = await self._create_or_update_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - if cls: - return cls(pipeline_response, deserialized, {}) - return deserialized - - - if polling is True: - polling_method = cast(AsyncPollingMethod, AsyncARMPolling( - lro_delay, - - - **kwargs - )) # type: AsyncPollingMethod - elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: polling_method = polling - if cont_token: - return AsyncLROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - async def _update_tags_initial( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.TagsObject, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - _json = self._serialize.body(parameters, 'TagsObject') - - request = build_update_tags_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - content_type=content_type, - json=_json, - template_url=self._update_tags_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace_async - async def begin_update_tags( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.TagsObject, - **kwargs: Any - ) -> AsyncLROPoller[_models.OpenShiftManagedCluster]: - """Updates tags on an OpenShift managed cluster. - - Updates an OpenShift managed cluster with the specified tags. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :param parameters: Parameters supplied to the Update OpenShift Managed Cluster Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.TagsObject - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns either OpenShiftManagedCluster or the - result of cls(response) - :rtype: - ~azure.core.polling.AsyncLROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = await self._update_tags_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - if cls: - return cls(pipeline_response, deserialized, {}) - return deserialized - - - if polling is True: - polling_method = cast(AsyncPollingMethod, AsyncARMPolling( - lro_delay, - - - **kwargs - )) # type: AsyncPollingMethod - elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: polling_method = polling - if cont_token: - return AsyncLROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - async def _delete_initial( # pylint: disable=inconsistent-return-statements - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> None: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[None] - - - request = build_delete_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - template_url=self._delete_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = await self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [202, 204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) - - _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace_async - async def begin_delete( # pylint: disable=inconsistent-return-statements - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> AsyncLROPoller[None]: - """Deletes an OpenShift managed cluster. - - Deletes the OpenShift managed cluster with a specified resource group and name. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be AsyncARMPolling. Pass in False for - this operation to not poll, or pass in your own initialized polling object for a personal - polling strategy. - :paramtype polling: bool or ~azure.core.polling.AsyncPollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of AsyncLROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.AsyncLROPoller[None] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[None] - polling = kwargs.pop('polling', True) # type: Union[bool, AsyncPollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = await self._delete_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - if cls: - return cls(pipeline_response, None, {}) - - - if polling is True: - polling_method = cast(AsyncPollingMethod, AsyncARMPolling( - lro_delay, - - - **kwargs - )) # type: AsyncPollingMethod - elif polling is False: polling_method = cast(AsyncPollingMethod, AsyncNoPolling()) - else: polling_method = polling - if cont_token: - return AsyncLROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return AsyncLROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py deleted file mode 100644 index 0ad201a8c58..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/aio/operations/_patch.py +++ /dev/null @@ -1,19 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py deleted file mode 100644 index 421ce777c25..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/__init__.py +++ /dev/null @@ -1,53 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 ._models_py3 import CloudErrorBody -from ._models_py3 import NetworkProfile -from ._models_py3 import OpenShiftManagedCluster -from ._models_py3 import OpenShiftManagedClusterAADIdentityProvider -from ._models_py3 import OpenShiftManagedClusterAgentPoolProfile -from ._models_py3 import OpenShiftManagedClusterAuthProfile -from ._models_py3 import OpenShiftManagedClusterBaseIdentityProvider -from ._models_py3 import OpenShiftManagedClusterIdentityProvider -from ._models_py3 import OpenShiftManagedClusterListResult -from ._models_py3 import OpenShiftManagedClusterMasterPoolProfile -from ._models_py3 import OpenShiftRouterProfile -from ._models_py3 import PurchasePlan -from ._models_py3 import Resource -from ._models_py3 import TagsObject - - -from ._container_service_client_enums import ( - OSType, - OpenShiftAgentPoolProfileRole, - OpenShiftContainerServiceVMSize, -) -from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import -from ._patch import patch_sdk as _patch_sdk -__all__ = [ - 'CloudErrorBody', - 'NetworkProfile', - 'OpenShiftManagedCluster', - 'OpenShiftManagedClusterAADIdentityProvider', - 'OpenShiftManagedClusterAgentPoolProfile', - 'OpenShiftManagedClusterAuthProfile', - 'OpenShiftManagedClusterBaseIdentityProvider', - 'OpenShiftManagedClusterIdentityProvider', - 'OpenShiftManagedClusterListResult', - 'OpenShiftManagedClusterMasterPoolProfile', - 'OpenShiftRouterProfile', - 'PurchasePlan', - 'Resource', - 'TagsObject', - 'OSType', - 'OpenShiftAgentPoolProfileRole', - 'OpenShiftContainerServiceVMSize', -] -__all__.extend([p for p in _patch_all if p not in __all__]) -_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py deleted file mode 100644 index 6c64f62d066..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_container_service_client_enums.py +++ /dev/null @@ -1,63 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 -from azure.core import CaseInsensitiveEnumMeta - - -class OpenShiftAgentPoolProfileRole(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """OpenShiftAgentPoolProfileRole represents the role of the AgentPoolProfile. - """ - - COMPUTE = "compute" - INFRA = "infra" - -class OpenShiftContainerServiceVMSize(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """Size of OpenShift VMs. - """ - - STANDARD_D2_S_V3 = "Standard_D2s_v3" - STANDARD_D4_S_V3 = "Standard_D4s_v3" - STANDARD_D8_S_V3 = "Standard_D8s_v3" - STANDARD_D16_S_V3 = "Standard_D16s_v3" - STANDARD_D32_S_V3 = "Standard_D32s_v3" - STANDARD_D64_S_V3 = "Standard_D64s_v3" - STANDARD_DS4_V2 = "Standard_DS4_v2" - STANDARD_DS5_V2 = "Standard_DS5_v2" - STANDARD_F8_S_V2 = "Standard_F8s_v2" - STANDARD_F16_S_V2 = "Standard_F16s_v2" - STANDARD_F32_S_V2 = "Standard_F32s_v2" - STANDARD_F64_S_V2 = "Standard_F64s_v2" - STANDARD_F72_S_V2 = "Standard_F72s_v2" - STANDARD_F8_S = "Standard_F8s" - STANDARD_F16_S = "Standard_F16s" - STANDARD_E4_S_V3 = "Standard_E4s_v3" - STANDARD_E8_S_V3 = "Standard_E8s_v3" - STANDARD_E16_S_V3 = "Standard_E16s_v3" - STANDARD_E20_S_V3 = "Standard_E20s_v3" - STANDARD_E32_S_V3 = "Standard_E32s_v3" - STANDARD_E64_S_V3 = "Standard_E64s_v3" - STANDARD_GS2 = "Standard_GS2" - STANDARD_GS3 = "Standard_GS3" - STANDARD_GS4 = "Standard_GS4" - STANDARD_GS5 = "Standard_GS5" - STANDARD_DS12_V2 = "Standard_DS12_v2" - STANDARD_DS13_V2 = "Standard_DS13_v2" - STANDARD_DS14_V2 = "Standard_DS14_v2" - STANDARD_DS15_V2 = "Standard_DS15_v2" - STANDARD_L4_S = "Standard_L4s" - STANDARD_L8_S = "Standard_L8s" - STANDARD_L16_S = "Standard_L16s" - STANDARD_L32_S = "Standard_L32s" - -class OSType(str, Enum, metaclass=CaseInsensitiveEnumMeta): - """OsType to be used to specify os type. Choose from Linux and Windows. Default to Linux. - """ - - LINUX = "Linux" - WINDOWS = "Windows" diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py deleted file mode 100644 index 47a7d05afb3..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_models_py3.py +++ /dev/null @@ -1,760 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 typing import Dict, List, Optional, TYPE_CHECKING, Union - -import msrest.serialization - -if TYPE_CHECKING: - # pylint: disable=unused-import,ungrouped-imports - import __init__ as _models - - -class CloudErrorBody(msrest.serialization.Model): - """An error response from the Container service. - - :ivar code: An identifier for the error. Codes are invariant and are intended to be consumed - programmatically. - :vartype code: str - :ivar message: A message describing the error, intended to be suitable for display in a user - interface. - :vartype message: str - :ivar target: The target of the particular error. For example, the name of the property in - error. - :vartype target: str - :ivar details: A list of additional details about the error. - :vartype details: list[~azure.mgmt.containerservice.v2019_04_30.models.CloudErrorBody] - """ - - _attribute_map = { - 'code': {'key': 'code', 'type': 'str'}, - 'message': {'key': 'message', 'type': 'str'}, - 'target': {'key': 'target', 'type': 'str'}, - 'details': {'key': 'details', 'type': '[CloudErrorBody]'}, - } - - def __init__( - self, - *, - code: Optional[str] = None, - message: Optional[str] = None, - target: Optional[str] = None, - details: Optional[List["_models.CloudErrorBody"]] = None, - **kwargs - ): - """ - :keyword code: An identifier for the error. Codes are invariant and are intended to be consumed - programmatically. - :paramtype code: str - :keyword message: A message describing the error, intended to be suitable for display in a user - interface. - :paramtype message: str - :keyword target: The target of the particular error. For example, the name of the property in - error. - :paramtype target: str - :keyword details: A list of additional details about the error. - :paramtype details: list[~azure.mgmt.containerservice.v2019_04_30.models.CloudErrorBody] - """ - super(CloudErrorBody, self).__init__(**kwargs) - self.code = code - self.message = message - self.target = target - self.details = details - - -class NetworkProfile(msrest.serialization.Model): - """Represents the OpenShift networking configuration. - - :ivar vnet_cidr: CIDR for the OpenShift Vnet. - :vartype vnet_cidr: str - :ivar peer_vnet_id: CIDR of the Vnet to peer. - :vartype peer_vnet_id: str - :ivar vnet_id: ID of the Vnet created for OSA cluster. - :vartype vnet_id: str - """ - - _attribute_map = { - 'vnet_cidr': {'key': 'vnetCidr', 'type': 'str'}, - 'peer_vnet_id': {'key': 'peerVnetId', 'type': 'str'}, - 'vnet_id': {'key': 'vnetId', 'type': 'str'}, - } - - def __init__( - self, - *, - vnet_cidr: Optional[str] = "10.0.0.0/8", - peer_vnet_id: Optional[str] = None, - vnet_id: Optional[str] = None, - **kwargs - ): - """ - :keyword vnet_cidr: CIDR for the OpenShift Vnet. - :paramtype vnet_cidr: str - :keyword peer_vnet_id: CIDR of the Vnet to peer. - :paramtype peer_vnet_id: str - :keyword vnet_id: ID of the Vnet created for OSA cluster. - :paramtype vnet_id: str - """ - super(NetworkProfile, self).__init__(**kwargs) - self.vnet_cidr = vnet_cidr - self.peer_vnet_id = peer_vnet_id - self.vnet_id = vnet_id - - -class Resource(msrest.serialization.Model): - """The Resource model definition. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id. - :vartype id: str - :ivar name: Resource name. - :vartype name: str - :ivar type: Resource type. - :vartype type: str - :ivar location: Required. Resource location. - :vartype location: str - :ivar tags: A set of tags. Resource tags. - :vartype tags: dict[str, str] - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'required': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - } - - def __init__( - self, - *, - location: str, - tags: Optional[Dict[str, str]] = None, - **kwargs - ): - """ - :keyword location: Required. Resource location. - :paramtype location: str - :keyword tags: A set of tags. Resource tags. - :paramtype tags: dict[str, str] - """ - super(Resource, self).__init__(**kwargs) - self.id = None - self.name = None - self.type = None - self.location = location - self.tags = tags - - -class OpenShiftManagedCluster(Resource): - """OpenShift Managed cluster. - - Variables are only populated by the server, and will be ignored when sending a request. - - All required parameters must be populated in order to send to Azure. - - :ivar id: Resource Id. - :vartype id: str - :ivar name: Resource name. - :vartype name: str - :ivar type: Resource type. - :vartype type: str - :ivar location: Required. Resource location. - :vartype location: str - :ivar tags: A set of tags. Resource tags. - :vartype tags: dict[str, str] - :ivar plan: Define the resource plan as required by ARM for billing purposes. - :vartype plan: ~azure.mgmt.containerservice.v2019_04_30.models.PurchasePlan - :ivar provisioning_state: The current deployment or provisioning state, which only appears in - the response. - :vartype provisioning_state: str - :ivar open_shift_version: Version of OpenShift specified when creating the cluster. - :vartype open_shift_version: str - :ivar cluster_version: Version of OpenShift specified when creating the cluster. - :vartype cluster_version: str - :ivar public_hostname: Service generated FQDN for OpenShift API server. - :vartype public_hostname: str - :ivar fqdn: Service generated FQDN for OpenShift API server loadbalancer internal hostname. - :vartype fqdn: str - :ivar network_profile: Configuration for OpenShift networking. - :vartype network_profile: ~azure.mgmt.containerservice.v2019_04_30.models.NetworkProfile - :ivar router_profiles: Configuration for OpenShift router(s). - :vartype router_profiles: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftRouterProfile] - :ivar master_pool_profile: Configuration for OpenShift master VMs. - :vartype master_pool_profile: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterMasterPoolProfile - :ivar agent_pool_profiles: Configuration of OpenShift cluster VMs. - :vartype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAgentPoolProfile] - :ivar auth_profile: Configures OpenShift authentication. - :vartype auth_profile: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAuthProfile - """ - - _validation = { - 'id': {'readonly': True}, - 'name': {'readonly': True}, - 'type': {'readonly': True}, - 'location': {'required': True}, - 'provisioning_state': {'readonly': True}, - 'cluster_version': {'readonly': True}, - 'public_hostname': {'readonly': True}, - 'fqdn': {'readonly': True}, - } - - _attribute_map = { - 'id': {'key': 'id', 'type': 'str'}, - 'name': {'key': 'name', 'type': 'str'}, - 'type': {'key': 'type', 'type': 'str'}, - 'location': {'key': 'location', 'type': 'str'}, - 'tags': {'key': 'tags', 'type': '{str}'}, - 'plan': {'key': 'plan', 'type': 'PurchasePlan'}, - 'provisioning_state': {'key': 'properties.provisioningState', 'type': 'str'}, - 'open_shift_version': {'key': 'properties.openShiftVersion', 'type': 'str'}, - 'cluster_version': {'key': 'properties.clusterVersion', 'type': 'str'}, - 'public_hostname': {'key': 'properties.publicHostname', 'type': 'str'}, - 'fqdn': {'key': 'properties.fqdn', 'type': 'str'}, - 'network_profile': {'key': 'properties.networkProfile', 'type': 'NetworkProfile'}, - 'router_profiles': {'key': 'properties.routerProfiles', 'type': '[OpenShiftRouterProfile]'}, - 'master_pool_profile': {'key': 'properties.masterPoolProfile', 'type': 'OpenShiftManagedClusterMasterPoolProfile'}, - 'agent_pool_profiles': {'key': 'properties.agentPoolProfiles', 'type': '[OpenShiftManagedClusterAgentPoolProfile]'}, - 'auth_profile': {'key': 'properties.authProfile', 'type': 'OpenShiftManagedClusterAuthProfile'}, - } - - def __init__( - self, - *, - location: str, - tags: Optional[Dict[str, str]] = None, - plan: Optional["_models.PurchasePlan"] = None, - open_shift_version: Optional[str] = None, - network_profile: Optional["_models.NetworkProfile"] = None, - router_profiles: Optional[List["_models.OpenShiftRouterProfile"]] = None, - master_pool_profile: Optional["_models.OpenShiftManagedClusterMasterPoolProfile"] = None, - agent_pool_profiles: Optional[List["_models.OpenShiftManagedClusterAgentPoolProfile"]] = None, - auth_profile: Optional["_models.OpenShiftManagedClusterAuthProfile"] = None, - **kwargs - ): - """ - :keyword location: Required. Resource location. - :paramtype location: str - :keyword tags: A set of tags. Resource tags. - :paramtype tags: dict[str, str] - :keyword plan: Define the resource plan as required by ARM for billing purposes. - :paramtype plan: ~azure.mgmt.containerservice.v2019_04_30.models.PurchasePlan - :keyword open_shift_version: Version of OpenShift specified when creating the cluster. - :paramtype open_shift_version: str - :keyword network_profile: Configuration for OpenShift networking. - :paramtype network_profile: ~azure.mgmt.containerservice.v2019_04_30.models.NetworkProfile - :keyword router_profiles: Configuration for OpenShift router(s). - :paramtype router_profiles: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftRouterProfile] - :keyword master_pool_profile: Configuration for OpenShift master VMs. - :paramtype master_pool_profile: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterMasterPoolProfile - :keyword agent_pool_profiles: Configuration of OpenShift cluster VMs. - :paramtype agent_pool_profiles: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAgentPoolProfile] - :keyword auth_profile: Configures OpenShift authentication. - :paramtype auth_profile: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterAuthProfile - """ - super(OpenShiftManagedCluster, self).__init__(location=location, tags=tags, **kwargs) - self.plan = plan - self.provisioning_state = None - self.open_shift_version = open_shift_version - self.cluster_version = None - self.public_hostname = None - self.fqdn = None - self.network_profile = network_profile - self.router_profiles = router_profiles - self.master_pool_profile = master_pool_profile - self.agent_pool_profiles = agent_pool_profiles - self.auth_profile = auth_profile - - -class OpenShiftManagedClusterBaseIdentityProvider(msrest.serialization.Model): - """Structure for any Identity provider. - - You probably want to use the sub-classes and not this class directly. Known - sub-classes are: OpenShiftManagedClusterAADIdentityProvider. - - All required parameters must be populated in order to send to Azure. - - :ivar kind: Required. The kind of the provider.Constant filled by server. - :vartype kind: str - """ - - _validation = { - 'kind': {'required': True}, - } - - _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, - } - - _subtype_map = { - 'kind': {'AADIdentityProvider': 'OpenShiftManagedClusterAADIdentityProvider'} - } - - def __init__( - self, - **kwargs - ): - """ - """ - super(OpenShiftManagedClusterBaseIdentityProvider, self).__init__(**kwargs) - self.kind = None # type: Optional[str] - - -class OpenShiftManagedClusterAADIdentityProvider(OpenShiftManagedClusterBaseIdentityProvider): - """Defines the Identity provider for MS AAD. - - All required parameters must be populated in order to send to Azure. - - :ivar kind: Required. The kind of the provider.Constant filled by server. - :vartype kind: str - :ivar client_id: The clientId password associated with the provider. - :vartype client_id: str - :ivar secret: The secret password associated with the provider. - :vartype secret: str - :ivar tenant_id: The tenantId associated with the provider. - :vartype tenant_id: str - :ivar customer_admin_group_id: The groupId to be granted cluster admin role. - :vartype customer_admin_group_id: str - """ - - _validation = { - 'kind': {'required': True}, - } - - _attribute_map = { - 'kind': {'key': 'kind', 'type': 'str'}, - 'client_id': {'key': 'clientId', 'type': 'str'}, - 'secret': {'key': 'secret', 'type': 'str'}, - 'tenant_id': {'key': 'tenantId', 'type': 'str'}, - 'customer_admin_group_id': {'key': 'customerAdminGroupId', 'type': 'str'}, - } - - def __init__( - self, - *, - client_id: Optional[str] = None, - secret: Optional[str] = None, - tenant_id: Optional[str] = None, - customer_admin_group_id: Optional[str] = None, - **kwargs - ): - """ - :keyword client_id: The clientId password associated with the provider. - :paramtype client_id: str - :keyword secret: The secret password associated with the provider. - :paramtype secret: str - :keyword tenant_id: The tenantId associated with the provider. - :paramtype tenant_id: str - :keyword customer_admin_group_id: The groupId to be granted cluster admin role. - :paramtype customer_admin_group_id: str - """ - super(OpenShiftManagedClusterAADIdentityProvider, self).__init__(**kwargs) - self.kind = 'AADIdentityProvider' # type: str - self.client_id = client_id - self.secret = secret - self.tenant_id = tenant_id - self.customer_admin_group_id = customer_admin_group_id - - -class OpenShiftManagedClusterAgentPoolProfile(msrest.serialization.Model): - """Defines the configuration of the OpenShift cluster VMs. - - All required parameters must be populated in order to send to Azure. - - :ivar name: Required. Unique name of the pool profile in the context of the subscription and - resource group. - :vartype name: str - :ivar count: Required. Number of agents (VMs) to host docker containers. - :vartype count: int - :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", - "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", - "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", - "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", - "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", - "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", - "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", - "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". - :vartype vm_size: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize - :ivar subnet_cidr: Subnet CIDR for the peering. - :vartype subnet_cidr: str - :ivar os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to - Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType - :ivar role: Define the role of the AgentPoolProfile. Known values are: "compute", "infra". - :vartype role: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftAgentPoolProfileRole - """ - - _validation = { - 'name': {'required': True}, - 'count': {'required': True}, - 'vm_size': {'required': True}, - } - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'count': {'key': 'count', 'type': 'int'}, - 'vm_size': {'key': 'vmSize', 'type': 'str'}, - 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, - 'os_type': {'key': 'osType', 'type': 'str'}, - 'role': {'key': 'role', 'type': 'str'}, - } - - def __init__( - self, - *, - name: str, - count: int, - vm_size: Union[str, "_models.OpenShiftContainerServiceVMSize"], - subnet_cidr: Optional[str] = "10.0.0.0/24", - os_type: Optional[Union[str, "_models.OSType"]] = "Linux", - role: Optional[Union[str, "_models.OpenShiftAgentPoolProfileRole"]] = None, - **kwargs - ): - """ - :keyword name: Required. Unique name of the pool profile in the context of the subscription and - resource group. - :paramtype name: str - :keyword count: Required. Number of agents (VMs) to host docker containers. - :paramtype count: int - :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", - "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", - "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", - "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", - "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", - "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", - "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", - "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". - :paramtype vm_size: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize - :keyword subnet_cidr: Subnet CIDR for the peering. - :paramtype subnet_cidr: str - :keyword os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default - to Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType - :keyword role: Define the role of the AgentPoolProfile. Known values are: "compute", "infra". - :paramtype role: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftAgentPoolProfileRole - """ - super(OpenShiftManagedClusterAgentPoolProfile, self).__init__(**kwargs) - self.name = name - self.count = count - self.vm_size = vm_size - self.subnet_cidr = subnet_cidr - self.os_type = os_type - self.role = role - - -class OpenShiftManagedClusterAuthProfile(msrest.serialization.Model): - """Defines all possible authentication profiles for the OpenShift cluster. - - :ivar identity_providers: Type of authentication profile to use. - :vartype identity_providers: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterIdentityProvider] - """ - - _attribute_map = { - 'identity_providers': {'key': 'identityProviders', 'type': '[OpenShiftManagedClusterIdentityProvider]'}, - } - - def __init__( - self, - *, - identity_providers: Optional[List["_models.OpenShiftManagedClusterIdentityProvider"]] = None, - **kwargs - ): - """ - :keyword identity_providers: Type of authentication profile to use. - :paramtype identity_providers: - list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterIdentityProvider] - """ - super(OpenShiftManagedClusterAuthProfile, self).__init__(**kwargs) - self.identity_providers = identity_providers - - -class OpenShiftManagedClusterIdentityProvider(msrest.serialization.Model): - """Defines the configuration of the identity providers to be used in the OpenShift cluster. - - :ivar name: Name of the provider. - :vartype name: str - :ivar provider: Configuration of the provider. - :vartype provider: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterBaseIdentityProvider - """ - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'provider': {'key': 'provider', 'type': 'OpenShiftManagedClusterBaseIdentityProvider'}, - } - - def __init__( - self, - *, - name: Optional[str] = None, - provider: Optional["_models.OpenShiftManagedClusterBaseIdentityProvider"] = None, - **kwargs - ): - """ - :keyword name: Name of the provider. - :paramtype name: str - :keyword provider: Configuration of the provider. - :paramtype provider: - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterBaseIdentityProvider - """ - super(OpenShiftManagedClusterIdentityProvider, self).__init__(**kwargs) - self.name = name - self.provider = provider - - -class OpenShiftManagedClusterListResult(msrest.serialization.Model): - """The response from the List OpenShift Managed Clusters operation. - - Variables are only populated by the server, and will be ignored when sending a request. - - :ivar value: The list of OpenShift managed clusters. - :vartype value: list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - :ivar next_link: The URL to get the next set of OpenShift managed cluster results. - :vartype next_link: str - """ - - _validation = { - 'next_link': {'readonly': True}, - } - - _attribute_map = { - 'value': {'key': 'value', 'type': '[OpenShiftManagedCluster]'}, - 'next_link': {'key': 'nextLink', 'type': 'str'}, - } - - def __init__( - self, - *, - value: Optional[List["_models.OpenShiftManagedCluster"]] = None, - **kwargs - ): - """ - :keyword value: The list of OpenShift managed clusters. - :paramtype value: list[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - """ - super(OpenShiftManagedClusterListResult, self).__init__(**kwargs) - self.value = value - self.next_link = None - - -class OpenShiftManagedClusterMasterPoolProfile(msrest.serialization.Model): - """OpenShiftManagedClusterMaterPoolProfile contains configuration for OpenShift master VMs. - - All required parameters must be populated in order to send to Azure. - - :ivar name: Unique name of the master pool profile in the context of the subscription and - resource group. - :vartype name: str - :ivar count: Required. Number of masters (VMs) to host docker containers. The default value is - 3. - :vartype count: int - :ivar vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", - "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", - "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", - "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", - "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", - "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", - "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", - "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". - :vartype vm_size: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize - :ivar subnet_cidr: Subnet CIDR for the peering. - :vartype subnet_cidr: str - :ivar os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default to - Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :vartype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType - """ - - _validation = { - 'count': {'required': True}, - 'vm_size': {'required': True}, - } - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'count': {'key': 'count', 'type': 'int'}, - 'vm_size': {'key': 'vmSize', 'type': 'str'}, - 'subnet_cidr': {'key': 'subnetCidr', 'type': 'str'}, - 'os_type': {'key': 'osType', 'type': 'str'}, - } - - def __init__( - self, - *, - count: int, - vm_size: Union[str, "_models.OpenShiftContainerServiceVMSize"], - name: Optional[str] = None, - subnet_cidr: Optional[str] = None, - os_type: Optional[Union[str, "_models.OSType"]] = "Linux", - **kwargs - ): - """ - :keyword name: Unique name of the master pool profile in the context of the subscription and - resource group. - :paramtype name: str - :keyword count: Required. Number of masters (VMs) to host docker containers. The default value - is 3. - :paramtype count: int - :keyword vm_size: Required. Size of agent VMs. Known values are: "Standard_D2s_v3", - "Standard_D4s_v3", "Standard_D8s_v3", "Standard_D16s_v3", "Standard_D32s_v3", - "Standard_D64s_v3", "Standard_DS4_v2", "Standard_DS5_v2", "Standard_F8s_v2", - "Standard_F16s_v2", "Standard_F32s_v2", "Standard_F64s_v2", "Standard_F72s_v2", "Standard_F8s", - "Standard_F16s", "Standard_E4s_v3", "Standard_E8s_v3", "Standard_E16s_v3", "Standard_E20s_v3", - "Standard_E32s_v3", "Standard_E64s_v3", "Standard_GS2", "Standard_GS3", "Standard_GS4", - "Standard_GS5", "Standard_DS12_v2", "Standard_DS13_v2", "Standard_DS14_v2", "Standard_DS15_v2", - "Standard_L4s", "Standard_L8s", "Standard_L16s", "Standard_L32s". - :paramtype vm_size: str or - ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftContainerServiceVMSize - :keyword subnet_cidr: Subnet CIDR for the peering. - :paramtype subnet_cidr: str - :keyword os_type: OsType to be used to specify os type. Choose from Linux and Windows. Default - to Linux. Known values are: "Linux", "Windows". Default value: "Linux". - :paramtype os_type: str or ~azure.mgmt.containerservice.v2019_04_30.models.OSType - """ - super(OpenShiftManagedClusterMasterPoolProfile, self).__init__(**kwargs) - self.name = name - self.count = count - self.vm_size = vm_size - self.subnet_cidr = subnet_cidr - self.os_type = os_type - - -class OpenShiftRouterProfile(msrest.serialization.Model): - """Represents an OpenShift router. - - Variables are only populated by the server, and will be ignored when sending a request. - - :ivar name: Name of the router profile. - :vartype name: str - :ivar public_subdomain: DNS subdomain for OpenShift router. - :vartype public_subdomain: str - :ivar fqdn: Auto-allocated FQDN for the OpenShift router. - :vartype fqdn: str - """ - - _validation = { - 'public_subdomain': {'readonly': True}, - 'fqdn': {'readonly': True}, - } - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'public_subdomain': {'key': 'publicSubdomain', 'type': 'str'}, - 'fqdn': {'key': 'fqdn', 'type': 'str'}, - } - - def __init__( - self, - *, - name: Optional[str] = None, - **kwargs - ): - """ - :keyword name: Name of the router profile. - :paramtype name: str - """ - super(OpenShiftRouterProfile, self).__init__(**kwargs) - self.name = name - self.public_subdomain = None - self.fqdn = None - - -class PurchasePlan(msrest.serialization.Model): - """Used for establishing the purchase context of any 3rd Party artifact through MarketPlace. - - :ivar name: The plan ID. - :vartype name: str - :ivar product: Specifies the product of the image from the marketplace. This is the same value - as Offer under the imageReference element. - :vartype product: str - :ivar promotion_code: The promotion code. - :vartype promotion_code: str - :ivar publisher: The plan ID. - :vartype publisher: str - """ - - _attribute_map = { - 'name': {'key': 'name', 'type': 'str'}, - 'product': {'key': 'product', 'type': 'str'}, - 'promotion_code': {'key': 'promotionCode', 'type': 'str'}, - 'publisher': {'key': 'publisher', 'type': 'str'}, - } - - def __init__( - self, - *, - name: Optional[str] = None, - product: Optional[str] = None, - promotion_code: Optional[str] = None, - publisher: Optional[str] = None, - **kwargs - ): - """ - :keyword name: The plan ID. - :paramtype name: str - :keyword product: Specifies the product of the image from the marketplace. This is the same - value as Offer under the imageReference element. - :paramtype product: str - :keyword promotion_code: The promotion code. - :paramtype promotion_code: str - :keyword publisher: The plan ID. - :paramtype publisher: str - """ - super(PurchasePlan, self).__init__(**kwargs) - self.name = name - self.product = product - self.promotion_code = promotion_code - self.publisher = publisher - - -class TagsObject(msrest.serialization.Model): - """Tags object for patch operations. - - :ivar tags: A set of tags. Resource tags. - :vartype tags: dict[str, str] - """ - - _attribute_map = { - 'tags': {'key': 'tags', 'type': '{str}'}, - } - - def __init__( - self, - *, - tags: Optional[Dict[str, str]] = None, - **kwargs - ): - """ - :keyword tags: A set of tags. Resource tags. - :paramtype tags: dict[str, str] - """ - super(TagsObject, self).__init__(**kwargs) - self.tags = tags diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py deleted file mode 100644 index 0ad201a8c58..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/models/_patch.py +++ /dev/null @@ -1,19 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py deleted file mode 100644 index 211a8787980..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 ._open_shift_managed_clusters_operations import OpenShiftManagedClustersOperations - -from ._patch import __all__ as _patch_all -from ._patch import * # type: ignore # pylint: disable=unused-wildcard-import -from ._patch import patch_sdk as _patch_sdk -__all__ = [ - 'OpenShiftManagedClustersOperations', -] -__all__.extend([p for p in _patch_all if p not in __all__]) -_patch_sdk() \ No newline at end of file diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py deleted file mode 100644 index 97238bf9951..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_open_shift_managed_clusters_operations.py +++ /dev/null @@ -1,927 +0,0 @@ -# pylint: disable=too-many-lines -# coding=utf-8 -# -------------------------------------------------------------------------- -# 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 typing import Any, Callable, Dict, Iterable, Optional, TypeVar, Union, cast - -from msrest import Serializer - -from azure.core.exceptions import ClientAuthenticationError, HttpResponseError, ResourceExistsError, ResourceNotFoundError, map_error -from azure.core.paging import ItemPaged -from azure.core.pipeline import PipelineResponse -from azure.core.pipeline.transport import HttpResponse -from azure.core.polling import LROPoller, NoPolling, PollingMethod -from azure.core.rest import HttpRequest -from azure.core.tracing.decorator import distributed_trace -from azure.core.utils import case_insensitive_dict -from azure.mgmt.core.exceptions import ARMErrorFormat -from azure.mgmt.core.polling.arm_polling import ARMPolling - -from .. import models as _models -from .._vendor import _convert_request, _format_url_section -T = TypeVar('T') -ClsType = Optional[Callable[[PipelineResponse[HttpRequest, HttpResponse], T, Dict[str, Any]], Any]] - -_SERIALIZER = Serializer() -_SERIALIZER.client_side_validation = False - -def build_list_request( - subscription_id: str, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="GET", - url=_url, - params=_params, - headers=_headers, - **kwargs - ) - - -def build_list_by_resource_group_request( - subscription_id: str, - resource_group_name: str, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="GET", - url=_url, - params=_params, - headers=_headers, - **kwargs - ) - - -def build_get_request( - subscription_id: str, - resource_group_name: str, - resource_name: str, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), - "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="GET", - url=_url, - params=_params, - headers=_headers, - **kwargs - ) - - -def build_create_or_update_request_initial( - subscription_id: str, - resource_group_name: str, - resource_name: str, - *, - json: Optional[_models.OpenShiftManagedCluster] = None, - content: Any = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), - "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - if content_type is not None: - _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="PUT", - url=_url, - params=_params, - headers=_headers, - json=json, - content=content, - **kwargs - ) - - -def build_update_tags_request_initial( - subscription_id: str, - resource_group_name: str, - resource_name: str, - *, - json: Optional[_models.TagsObject] = None, - content: Any = None, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', None)) # type: Optional[str] - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), - "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - if content_type is not None: - _headers['Content-Type'] = _SERIALIZER.header("content_type", content_type, 'str') - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="PATCH", - url=_url, - params=_params, - headers=_headers, - json=json, - content=content, - **kwargs - ) - - -def build_delete_request_initial( - subscription_id: str, - resource_group_name: str, - resource_name: str, - **kwargs: Any -) -> HttpRequest: - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - accept = _headers.pop('Accept', "application/json") - - # Construct URL - _url = kwargs.pop("template_url", "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}") # pylint: disable=line-too-long - path_format_arguments = { - "subscriptionId": _SERIALIZER.url("subscription_id", subscription_id, 'str'), - "resourceGroupName": _SERIALIZER.url("resource_group_name", resource_group_name, 'str', min_length=1), - "resourceName": _SERIALIZER.url("resource_name", resource_name, 'str'), - } - - _url = _format_url_section(_url, **path_format_arguments) - - # Construct parameters - _params['api-version'] = _SERIALIZER.query("api_version", api_version, 'str') - - # Construct headers - _headers['Accept'] = _SERIALIZER.header("accept", accept, 'str') - - return HttpRequest( - method="DELETE", - url=_url, - params=_params, - headers=_headers, - **kwargs - ) - -class OpenShiftManagedClustersOperations: - """ - .. warning:: - **DO NOT** instantiate this class directly. - - Instead, you should access the following operations through - :class:`~azure.mgmt.containerservice.v2019_04_30.ContainerServiceClient`'s - :attr:`open_shift_managed_clusters` attribute. - """ - - models = _models - - def __init__(self, *args, **kwargs): - input_args = list(args) - self._client = input_args.pop(0) if input_args else kwargs.pop("client") - self._config = input_args.pop(0) if input_args else kwargs.pop("config") - self._serialize = input_args.pop(0) if input_args else kwargs.pop("serializer") - self._deserialize = input_args.pop(0) if input_args else kwargs.pop("deserializer") - - - @distributed_trace - def list( - self, - **kwargs: Any - ) -> Iterable[_models.OpenShiftManagedClusterListResult]: - """Gets a list of OpenShift managed clusters in the specified subscription. - - Gets a list of OpenShift managed clusters in the specified subscription. The operation returns - properties of each OpenShift managed cluster. - - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of - cls(response) - :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] - - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - def prepare_request(next_link=None): - if not next_link: - - request = build_list_request( - subscription_id=self._config.subscription_id, - api_version=api_version, - template_url=self.list.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - else: - - request = build_list_request( - subscription_id=self._config.subscription_id, - api_version=api_version, - template_url=next_link, - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request - - def extract_data(pipeline_response): - deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - list_of_elem = cls(list_of_elem) - return deserialized.next_link or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - - return ItemPaged( - get_next, extract_data - ) - list.metadata = {'url': "/subscriptions/{subscriptionId}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore - - @distributed_trace - def list_by_resource_group( - self, - resource_group_name: str, - **kwargs: Any - ) -> Iterable[_models.OpenShiftManagedClusterListResult]: - """Lists OpenShift managed clusters in the specified subscription and resource group. - - Lists OpenShift managed clusters in the specified subscription and resource group. The - operation returns properties of each OpenShift managed cluster. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: An iterator like instance of either OpenShiftManagedClusterListResult or the result of - cls(response) - :rtype: - ~azure.core.paging.ItemPaged[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedClusterListResult] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedClusterListResult] - - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - def prepare_request(next_link=None): - if not next_link: - - request = build_list_by_resource_group_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - api_version=api_version, - template_url=self.list_by_resource_group.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - else: - - request = build_list_by_resource_group_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - api_version=api_version, - template_url=next_link, - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - request.method = "GET" - return request - - def extract_data(pipeline_response): - deserialized = self._deserialize("OpenShiftManagedClusterListResult", pipeline_response) - list_of_elem = deserialized.value - if cls: - list_of_elem = cls(list_of_elem) - return deserialized.next_link or None, iter(list_of_elem) - - def get_next(next_link=None): - request = prepare_request(next_link) - - pipeline_response = self._client._pipeline.run( # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - return pipeline_response - - - return ItemPaged( - get_next, extract_data - ) - list_by_resource_group.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters"} # type: ignore - - @distributed_trace - def get( - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - """Gets a OpenShift managed cluster. - - Gets the details of the managed OpenShift cluster with a specified resource group and name. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :return: OpenShiftManagedCluster, or the result of cls(response) - :rtype: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster - :raises: ~azure.core.exceptions.HttpResponseError - """ - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - - request = build_get_request( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - template_url=self.get.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - get.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - def _create_or_update_initial( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.OpenShiftManagedCluster, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - _json = self._serialize.body(parameters, 'OpenShiftManagedCluster') - - request = build_create_or_update_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - content_type=content_type, - json=_json, - template_url=self._create_or_update_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200, 201]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if response.status_code == 200: - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if response.status_code == 201: - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - _create_or_update_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace - def begin_create_or_update( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.OpenShiftManagedCluster, - **kwargs: Any - ) -> LROPoller[_models.OpenShiftManagedCluster]: - """Creates or updates an OpenShift managed cluster. - - Creates or updates a OpenShift managed cluster with the specified configuration for agents and - OpenShift version. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :param parameters: Parameters supplied to the Create or Update an OpenShift Managed Cluster - operation. - :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this - operation to not poll, or pass in your own initialized polling object for a personal polling - strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns either OpenShiftManagedCluster or the result of - cls(response) - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = self._create_or_update_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - if cls: - return cls(pipeline_response, deserialized, {}) - return deserialized - - - if polling is True: - polling_method = cast(PollingMethod, ARMPolling( - lro_delay, - - - **kwargs - )) # type: PollingMethod - elif polling is False: polling_method = cast(PollingMethod, NoPolling()) - else: polling_method = polling - if cont_token: - return LROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_create_or_update.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - def _update_tags_initial( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.TagsObject, - **kwargs: Any - ) -> _models.OpenShiftManagedCluster: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - - _json = self._serialize.body(parameters, 'TagsObject') - - request = build_update_tags_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - content_type=content_type, - json=_json, - template_url=self._update_tags_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [200]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - - if cls: - return cls(pipeline_response, deserialized, {}) - - return deserialized - - _update_tags_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace - def begin_update_tags( - self, - resource_group_name: str, - resource_name: str, - parameters: _models.TagsObject, - **kwargs: Any - ) -> LROPoller[_models.OpenShiftManagedCluster]: - """Updates tags on an OpenShift managed cluster. - - Updates an OpenShift managed cluster with the specified tags. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :param parameters: Parameters supplied to the Update OpenShift Managed Cluster Tags operation. - :type parameters: ~azure.mgmt.containerservice.v2019_04_30.models.TagsObject - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this - operation to not poll, or pass in your own initialized polling object for a personal polling - strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns either OpenShiftManagedCluster or the result of - cls(response) - :rtype: - ~azure.core.polling.LROPoller[~azure.mgmt.containerservice.v2019_04_30.models.OpenShiftManagedCluster] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = case_insensitive_dict(kwargs.pop("headers", {}) or {}) - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - content_type = kwargs.pop('content_type', _headers.pop('Content-Type', "application/json")) # type: Optional[str] - cls = kwargs.pop('cls', None) # type: ClsType[_models.OpenShiftManagedCluster] - polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = self._update_tags_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - parameters=parameters, - api_version=api_version, - content_type=content_type, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - deserialized = self._deserialize('OpenShiftManagedCluster', pipeline_response) - if cls: - return cls(pipeline_response, deserialized, {}) - return deserialized - - - if polling is True: - polling_method = cast(PollingMethod, ARMPolling( - lro_delay, - - - **kwargs - )) # type: PollingMethod - elif polling is False: polling_method = cast(PollingMethod, NoPolling()) - else: polling_method = polling - if cont_token: - return LROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_update_tags.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - def _delete_initial( # pylint: disable=inconsistent-return-statements - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> None: - error_map = { - 401: ClientAuthenticationError, 404: ResourceNotFoundError, 409: ResourceExistsError - } - error_map.update(kwargs.pop('error_map', {}) or {}) - - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[None] - - - request = build_delete_request_initial( - subscription_id=self._config.subscription_id, - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - template_url=self._delete_initial.metadata['url'], - headers=_headers, - params=_params, - ) - request = _convert_request(request) - request.url = self._client.format_url(request.url) # type: ignore - - pipeline_response = self._client._pipeline.run( # type: ignore # pylint: disable=protected-access - request, - stream=False, - **kwargs - ) - response = pipeline_response.http_response - - if response.status_code not in [202, 204]: - map_error(status_code=response.status_code, response=response, error_map=error_map) - raise HttpResponseError(response=response, error_format=ARMErrorFormat) - - if cls: - return cls(pipeline_response, None, {}) - - _delete_initial.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore - - - @distributed_trace - def begin_delete( # pylint: disable=inconsistent-return-statements - self, - resource_group_name: str, - resource_name: str, - **kwargs: Any - ) -> LROPoller[None]: - """Deletes an OpenShift managed cluster. - - Deletes the OpenShift managed cluster with a specified resource group and name. - - :param resource_group_name: The name of the resource group. - :type resource_group_name: str - :param resource_name: The name of the OpenShift managed cluster resource. - :type resource_name: str - :keyword callable cls: A custom type or function that will be passed the direct response - :keyword str continuation_token: A continuation token to restart a poller from a saved state. - :keyword polling: By default, your polling method will be ARMPolling. Pass in False for this - operation to not poll, or pass in your own initialized polling object for a personal polling - strategy. - :paramtype polling: bool or ~azure.core.polling.PollingMethod - :keyword int polling_interval: Default waiting time between two polls for LRO operations if no - Retry-After header is present. - :return: An instance of LROPoller that returns either None or the result of cls(response) - :rtype: ~azure.core.polling.LROPoller[None] - :raises: ~azure.core.exceptions.HttpResponseError - """ - _headers = kwargs.pop("headers", {}) or {} - _params = case_insensitive_dict(kwargs.pop("params", {}) or {}) - - api_version = kwargs.pop('api_version', _params.pop('api-version', "2019-04-30")) # type: str - cls = kwargs.pop('cls', None) # type: ClsType[None] - polling = kwargs.pop('polling', True) # type: Union[bool, PollingMethod] - lro_delay = kwargs.pop( - 'polling_interval', - self._config.polling_interval - ) - cont_token = kwargs.pop('continuation_token', None) # type: Optional[str] - if cont_token is None: - raw_result = self._delete_initial( # type: ignore - resource_group_name=resource_group_name, - resource_name=resource_name, - api_version=api_version, - cls=lambda x,y,z: x, - headers=_headers, - params=_params, - **kwargs - ) - kwargs.pop('error_map', None) - - def get_long_running_output(pipeline_response): - if cls: - return cls(pipeline_response, None, {}) - - - if polling is True: - polling_method = cast(PollingMethod, ARMPolling( - lro_delay, - - - **kwargs - )) # type: PollingMethod - elif polling is False: polling_method = cast(PollingMethod, NoPolling()) - else: polling_method = polling - if cont_token: - return LROPoller.from_continuation_token( - polling_method=polling_method, - continuation_token=cont_token, - client=self._client, - deserialization_callback=get_long_running_output - ) - return LROPoller(self._client, raw_result, get_long_running_output, polling_method) - - begin_delete.metadata = {'url': "/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ContainerService/openShiftManagedClusters/{resourceName}"} # type: ignore diff --git a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py b/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py deleted file mode 100644 index 0ad201a8c58..00000000000 --- a/src/aks-preview/azext_aks_preview/vendored_sdks/azure_mgmt_preview_aks/v2019_04_30/operations/_patch.py +++ /dev/null @@ -1,19 +0,0 @@ -# ------------------------------------ -# Copyright (c) Microsoft Corporation. -# Licensed under the MIT License. -# ------------------------------------ -"""Customize generated code here. - -Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize -""" -from typing import List - -__all__: List[str] = [] # Add all objects you want publicly available to users at this package level - -def patch_sdk(): - """Do not remove from this file. - - `patch_sdk` is a last resort escape hatch that allows you to do customizations - you can't accomplish using the techniques described in - https://aka.ms/azsdk/python/dpcodegen/python/customize - """ diff --git a/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.94-py2.py3-none-any.whl deleted file mode 100644 index b16a191656d5531029e24e62929a07a019aed8e0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 578803 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%0Arz0uDET4f)TWPiy1Ns=9rKV;uK}? z@@BS(I|y(1VSo>3uQ*{W^&QjzOj;6y4XasP#ZpB*FMi!e51z0IcUDhIxboxM!MTxWe9oiQ>s&$Mc ziBnT@vLfwCaAnpG~6zM%T&R00#5>T zX=jGR>;qFNg;UgcWnht7KjcJ(=?ZtT6)8*kks;%eb{8Uj8%FiN*bN(_0PN5s{ksBr8BPCdxun`t-Pqy0GS; z66VS!(<v5P_tvK5eHC@r z0?@+7pwF%G6OpAAZt;B-+8Y@os%foyt&v%@Qv==-5aCjA-jGuU-#Vot(=`Pyaxs8E z7dm>gwMPD`{j|E?2Wl!TxpE5-V-o8%^%%sCIA1Ty+n>LLS67?@|8iTA;WkO>U<1X5F!Gyv|r8H}sa2^hJ@% zUx>D8%)v!@X>D&$qgTp9mqMF;c!~%uw%*(Y;RCFs<90EF3VW+?(uA&G_CbDRT=a4a z!qb?}KX?pwz_lDjiO>0F=2W+Jp!tVgu%0D_5pTSvP<=a;)^*gCoZBkvQo-C!Tw5f$ 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�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 A;e_)Li;bP3l%Vg`r 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

      B%<=XkkWUw0A)KOB9Ea=_?Jp# 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%0AaQC3u2?vin(XAJ#wptk z%)lA(Ev9Em{bDe3B4pZqNR4!E2NjHDJRw;;rc6Wng~QV?WOu~)x7+WC(y4jpEYo&q zdvwZz!f00GZ~jRigi9AdanSf6%sA5{ZE&0-0)%3)+;EJHX+dnFIW-55>WWKgHW5E? z!V6zW-mweF8q85**8YfW2(Avn1br5=FCSD%PME9MBzMT@xzJqdVN~_UHWC(Vvr%9c z;SuU4hB!?zWlYySp9lErk31P(;%IBKUZ*LJse9oKo@5kOA7KW9D2e`pmI z1i$Ob{&kzP@a$;$QwEy&d(C|mbjOw2J=R#vu6=e}3`n>+VQ?E`^ngK)+PRSaP#O`ySn&QeRz~?+(`wJ@ohA-Je=L)Qfc-UbcvW>@1_= z6DLEDkLE~n`C{kkZ}&%}>jLmFSz&4H6Z7!!ILzT=T&+dUt4MUAz`>p8MsrM=R2+p0 zBxmXChOf={8{uQ8WxQ%ziF3Hx|8z~47}VH1Q_$$C~_DYZLIkiT;0gTbUJTYgNi*h!d(W@ z`tPMk_iz#koQuOJ9ircHg~;q7 zl9v$LV$Z02!TnJToWDB23W+FTQdNQD{Y4{cM>jf($63|_T8gZj9L|^YL7f`Fw;|Ea z7sbh+GfjWuLNyWUdqhavQRYr|<+xGFyj}3YW_$K+(er)HU`cvP!&}kL+zM)<9K3Kr zKdXQK7QG!9Sw_0?FqGM0&{hk}O{d$XrLH^UhaO9{mI_8mT1^P)wKf;^sWGFAa#WVD zqg}3eZmFp63)&*o)atdq;LHnbGFERCQ+VmIfmY>k#zx@jlA0Y_exR7XI@ik<+Rt~i z)43YI&W(=@{5xB#*BIy?y;ObWVFJqs{z@_SDqGhC^5=_aO^iJ?diUP9(C*HV&Ko57 z?EZX~wu_m)luv&r-;d8GPtxo#=KHrc4&jc~D}ycU0Gq~qoaUz3yD{!+%t zqQTz%{TwLlp73P(!pAkanRALU;3JX8}wHFTb@1o2MA@6`PKw;N+bG#WBbG%;`+eRd)ei`5mmPnCiGFOeoT#%WHVX_B{oV{awm5d~XE@rBp1oUUJ>W7aYwSZ%8z8Z`#_XK@|kD{PR}3r+FTJ zQG@dj-JBU;PotgRAoeO}84p-jldbb!yizRnW+>+iZ!sjPs8KtTUDXVC>PQmwn2W?z zWk0{+ya#S)eK>_7$vzgoa5G9V3Aeo23^^i2tKWM62H#x{)D^igdHJeJ^nBdZInLCe zB)8?1&?HbYLsz{&RHv$kQfDvy=GU`icX|-nUdJX8;9hrnOSvatP&e{8W7iSKJwaU7as#`7N)j91i<2&?!OS>~utF_Y2Ywy$ z;f7b|rIt@zR`^gS*M~>lF{kYAAwMME$S`m_e`>1PAAlE&p(k9XAP~p?rEzbT{=GBSxvN6y;Sf z`oJ~&6K6NJs2A@UvBfHLGwgU7)lT|Lc7RbYQD?>R6)Y2Xv3h$1TCThb6enTK%4IUR zT?WsrZuSJOWu^)TH{{|~3>iIP1{1`N&%@b8lRp^${->;&V4F7?@E+NY0tDpuf2N~b zTi9CZJDNDzxi}h`{Ev2CtpOmF*-(8E;{GMGNq-6i+6Hsih|^QclZ{wei$tPq64}%t zRV1P6w2l9I!b|8-z`)Q|@0B=e|DAP%i~ou>5eqe`;%`Vk&Xo@{{K`tU?f|{1l9S6T zj1;TcqKj(D@~K)|%70bbynXvYx#n6Lhao%1jSfZsD%RgK)=n642U~bSDi|tBEJ%jt zg>6Llks`{P$SNj^t{kuwQ{ZNovdkt%Kvj+LD^ZA+g{OVbZ&8A%zg-B2Ucu1AAHH%4 zyLo09)y6`sAE~Z^j|<+Dfc&gO;R7^zg1M(9N=IWIZ@fjNAPHAd1iFy-K*)U1s)NJ} zJX8|B5Hx79no5d;(h%p+py-jwXJdowYrTFKGKbh@il{xj7|}YUrm-;ARwBWi^5yJX zWK!(4BOXG+i@C?txxPqNZt}p96A@*ou%ZmV=+f=D)T-=&c?qEqw|m_f*kduG&dZs6 zu_L55{8rOeAQ^**h`z6(()i2?oq8=tQQMZBB)-z;h8u|)=W<_lmb-opja4aG9WrU6 zSQ&IEk7@jcrM|}5R_bNSeJ)7LTT~uTAje^v*p>h(sg@TR%y21~Hb&fuLZg!O^#v8G z^e;$pk%hPbqjcklD+^5F9xdi`Hr3MKPM`bPKTm0bUbspz4Qu^Ke&p{#Vksw zAk?aA9^~%F+1mwsIy?AEW*l{m#rtD`qo*8`UrS7T7s2TKj6&+?o&m=!f`l^MSUn2W zyOxm6JmK{9sB@4|ABVERnPi5wx3l1o+Q8w#UEVIa`5Sk~F_w$rR700Seo3Gh9LcOb z8>|)zJc$#?4~rLv87Diwd7Cvw5O_u7X{^xrWZcK^zpV#b_>1Nxp1upIVM?xGy~enLmuj$ms-zcu>3#6eSrP@eZKM^dBG zc$3mX1NME0j6}5Gz!4mlUn zt-Te=R{t?{e+WvOZp{`Rr(sMKa6LK}?vM_GSc;4D1kX5@jEa!uM>7v5H>!OPt7c*e zoJG+cV>W;83_~dyzE~oZ&}`f{qzfGp0H>sfua-zVjo4{VumQRM~rxSiTU6s^_;R zj^YR)%5h8B_rv!X1*itmkbd~}5^u$l9U{3#P0?%(TXBYQBAZH0&}`n?-ov-^&S z{ViCmQ0()|&&nF#ndcb_=>MNeGN1{&V^!MqD;&RSV>Hkev7Ik?B&ZVSQ4 z&JWN6EQ*CI$OBRKD|K)1ATA==tvh;HOl&O$VS~D;jm`NsS!}<|HFRfAp9MD~-zJxx zz|e)YKD69qpEAi?%XZ1L+sv=KR|Q>Ubbi<8VqQCVlWmyNL}E*>yF^~v?c$Xq{2JU|aq+Dmdq3K~iJ{;nc_lhd z&q)lX>5$PZ3rVxJa7`OvQ!b^Lm7qn=sU8%nE#W`#eB1UdyV5#>7+=Ma?Q$2|xz&Is zQ^S5Tp(kC|F$QjzQZ`IOjhA6+H>Wt z3#CXs0FC?}FJ#_;oKTbkaaOmXRk+d~9RGb1lLJI81!7e2W;<91O{>dDN_#{-MNxvL zGk-mUs-YMHd2zrzHYCa1eVomCw4ZSrx#85lgN&pcNYvYeCrXiEba7=R=mzgS8CAOg zfs-`#mJUoivGQ^+(JG?^@>_1#Uj5U!Zp>X?x%@Q(=X>_VVxm%-FFh&Do&qgkK*jV$ zrTBvDn065{AMWFB4eU{!D&%3@PU{r01-DJJ{hPGnSlZ{?Pnv43%vPaZ)VKpjFX{X6 zeWTsztW($kZO*$E9rcwMX)vt?8LWJ2%wKWCHI+UFKie7B=}rm0SwCV4dcZosBcsEB z#)lU?Nufu`OZU(cP9rri|IJQT`3uNVmHO}?qx6G}8;v9ZKz0J2sR$-#mpj?Xa~R+b zF0#M{6&$RAgMUO*Bd?E!l5Nz}0)M1rDbhCJC2}QH0|6C|rPCRr0V)1O-I^lX1uh_g zd>@6Z#HwI8kX*V|^Gy9FpGX-tV9vUmSO-$T-a{ZSCtsr+f>Wn2=%Q%gUVldXWB+LU z=JW+v!8V}RKj}pS2?61lV1!bxTnRkQKB4uAuy!B!=8DNSq4N##eh~$vci!BXfUwSs zn#I4ri**0y@^Tojy}Og2JLoHqHAD+Ic@8Y^t-3zgXjTFNc%yd6)<1QAhyp?pu^CA; z0}*=^_NCshN+ctKSFHs_r8~Yr!w#Fw$>_(|ix~`EdI=(fCOP?zZB=49cfrynkjIRCQN48b4rn^>@Q*f&rL!ZAUvSSZsjx@|CV3}qf`6NYwBd8HGELm`%me2)jxZgCezX&nf*)xCm zxhDAwM`<{P8W@v_`$Q9K-#xNhuqOCKBl62Bf2I3GE@){yp;27&m%9!{|E4zR#l3Qn zXx>Ilj2OOd_W7MzOlucx4yQ0v7-hSj^&=m?4i?FY+CUw&;}op`q%@)uX4LIsF~>HB zx6c;G*hh2&7?;UvfZep8U2AVhbmk?&I;E_6WgtcU%!shp2uMvAVVd z)k!u`H(=TUg%d14wxtVSgs~XPT)_p2)1GE+1R8h5VTqXKiAg}QBGM>DzXIRu6&oK| z3d(=g5=u;Sx$|=+5}2`PpQ3XX(zwPFJKh=AH-- z+8FIy^o8Y(p>WinvaUGD;=UhEE`k*z_}S8lN52xO33aEr*iWm-8)115dr(5MY0oGs*cQ6$r4 zECH7gS=j)zE?$GEhep9RAcqr{eCmHs{NZx~>RCdpH!}ahZ<_ao|Kt}fu6(9)Lcbo+-Y4EQa62@G0#En_<4ZZtYZD>mz@vyLj??RM?f#9&Z5 zwC95FBvP-JMbbYxoJ^>hd+LyF)5}sw(Ue@(FQP{Yb}}Ug{)p9%D40 zv%350dDDJ+4CZMAp&%Z=Ocd*fgUJh*yrci`K@4@g*8>UgY>g`e0XhC>gZTf=tM%XN z)qlKNKwc~U2y*dyasf8VO?-dVt0e!eUKRZ>_3ClXHCwzM@!#PS4wetT^%)jqJ7N5C zEGTy&c_B7+AsIH-4Y|B@GWlE{k{(F+ri@Zc&Q}aR`Rhv|8wlbZsU9sF=HH`7c+bTW zLrQ|3Q6T{J>KGZrK%9AgutW-@#{>ul#Ger#bTV2(3sgqQrHpttI}DFTX~66WPg!lm zt;FPz(nr7df2mjV;{$x%H!urL9f1MrRi-pZ4bF8f6kH$NM2vD|0?mS`Jsc9sBCO7m z`3N#&;ntzj@|9~Cs`*6KO(I%I%NMoE=J2Z_Dcl$A5IAN#fg!c)eFs6>MPC}#kNG%O;L;eJ`;H3uxd$)92(Q993)q_hbAV41)NHQOP&UJEpYU8%H$?K4w7m#x(usyQ-OtfQfQmA z&7W2mNgS$`YiXNm%&RKZm_mq~?!TNT1~K-7o6oY`Q_8Ow7J3fhYdRdW8vVvh z*f@Gc3JwT*+0kyl?HTSUr(9sSOnYeace2?WJ(C~Xl0 zl*MswiL!u9e_Nsue|-rOr{7}ik1@NV7Ho>_FmPwGrB$0+j@_D{7PW0pyeCD)z5S&Q zUKD13(0&y{2`e3D4$KE7RiHdfWYnfYI%NpN zOA|Abe;Ks8#oCzdVM;ziOwfkSINU}Af0D}9<~uAgG?tRd*(YUUZMxdmq{NOt!@D1< zIZV$t!^k|NZ!YHZ80<~lR8x-I{K%8CPeRzihNhB%aO{J>sdCwivpY3T{CtvKAJn8>y&tk#T zVF5YU*tj3ukP4dvk*f38GHM`sD6no+&z~=VXhU-LYa|A%`8>a07u9g_>)^itDR^Jh zH?tXQZn6i+vsU}SyfFTeXCVRPS#o>a_KpER{*h;eis+wga5nzx$m0>~ONP$ZV%M8a zk@+jna{Nc0HF5A)p2hMnd6wwHKk}@mXyIVZa@gqqmS@cak*+A;H+jcGI0psZm)ziLhgD-}sc0Zxr~y}SVVrvIh{hI@U6)(saxp0)Lp z7THBdDRGkVSJm;MCm(wjWZ^m1aRs)b-W|Sh$vh-z`Bw&GiV(1nQU4HQ{mh=FBos#h z*7lUXG9^9THYan<6YGcGRBt`G8=UzVO}&xPA&j6v6tyhRXA9gcyFiDy*W$SYK%Q0m z^Zzc-^7t#yO2AdryAN3b$g?CrJs#ntj8+@}k!LXhlXJkyIE*q!{*g_cS$QX|}SVczjLIPV>A zlk3^?^qIJ3`&XQ`HU~L~Ji%=LgRr>Wy|uqLRpWH?SSOVxag%wsv$T_+PWb}seHzm% zq;&JKassdFCU`j}QX4Ti6Dde)WtK+%`*@{d7&&mru-*V0g8_VYl)=`?J`H1Vr%61! zSa{2T73hd-ojb6Cb>L8hxGf009T4md9_kJ#VONqb-2DSVOJYsLXa+8IP`rD`cQJ0X z3%PEdmbmh+O}WlqG`jrutM5CAbIc#-M5U<5d zEbPZ2!!F7FqW*UF#xyQ`2>L`mdli;}+u>G|?M;&hQ5u2>bVQlyIL8K5>(>!xp zH*oI458r`KaNhF%p?CE~iNB;thmTFw;EVHO^g0JZi=VSsTWU8Q{*@Y!qXX7oo70?_ zMHBI;L%CUwFw6@C4W=|k70hO#qsd$x;%f0#IPOIxY0~w;T3#y2D?4y;H(%5Mts|49 z<@mpI6QE0WocUR+4LD;U@nM?*2wjtM?-G&oZRkjtGJ5h%8DJeMw7H7`C){P>%P(%8)uF~U@8O#(l|O@v z!a@16s1_@mfcrXV!n@D6FJXarc7NX!*aj(0I;^i(`)h`O@1-QGanKfkjR0-HM!3UIP8 zNE9r7wzMaU(utBif}h*%Vku$#G99&WY}wvmh#zbJyFbrvbc*$pohWuG7>p<5v@pbr&ty#gb>5mEU8 zvE#TVCbDc2;y5ySt;QblJ;Ron;s8j37;vIUHKxb?8!>_FxLp()!>>eQo(0x=)Ls^S zB&uLy7$Qk?^B?#-D`MrEI(=gaqOj;7S|>PG0YT5gfVJ7X9I^?-9_C;n>>ae|6j~yy z4kA9;W@mkgpAo0lqO}~9C5i$yoR_vU5|jdn`e$fwl(C1lFjv>Yo4!QD8D+AtVbU+y zQPpFbO%7w44L?6tp_>BvIgYYI^F2Ige2(MXm@)uWwS8^q(ocoYCtNtOvrlWIigkiaf9};-@{jcp#*&%mzx~1k7$@@ zx{lcOx2g_PAm%QC??OK+`41WoS^=smLFVM&stWsC^dqDDbfbgwZ&fuX_j-O(%A7*x zr6OTZ@++#E<{{jI80-MP4{>eFf(g`+76&bQySIV|LcE6wSt701NdLlM-zrR4HXr%{`y~s z|29>30ZK#D1<3;d`VHnL;gd`DlR|W?i!+vSmP}7F4JNyk2bM>lIb0ZlHf02`Tu+^4 zjlVLSQ7B#VOPFY_O=tI8`bj+Nnf^nVd~Q}46nvjMzEvX+q*-GJ!VImvLx!F!lz}C& z8#u(pk6?X0Q@^e1VFoFXWDChH zEIhp#+jPSa7mvF_79~>aSBhI8OvO?K9)-oU)mh4E>;~5oBciYtkxEFG81zqToL{#m z8c@(NqOPA21Jvl$N~JLonl$ehox3&(#k!OsY0!i&FBfJ$&btwQ&qEZ3l*@=lt5nDR zoYUZ5ETKd@z6TU(K2<3>KI{8z1TYKdm$sDdDWj92#f7kG_dfKYptJpndvGWi40z50 z$MnA3!r0XpR?nc{ z2*x|OZY6~}AINY+rs%{*Hn47w{hNQ?Cm4OIfr{gYKIw+x>cBndyS#M9G=fsDhzp+F zD|I8yn0DaJh@Qx*wGbn{w!{XxQ&`#$piF}+oMalWl-JZvv}N~GAzuk$7Yj~QcWSw~ zsowh+;XmZxy-4~1R88(pkw<^Iw2NWax z{sw!6wntAZPn^pgm!}=#-`LIaxQ(}|hkpzOTIgr{EzK5`Pfe)6`%cYXxc@g{;+iBe z&K2j;iEH>uXM3}IQz?-&jS%))AZ$6EnfWL}G^YSwdS0T6+FYyYn_Nvp8g{ZWZ_}Ci z$Dz45^91b%4m^}c$#&gIyRXKk1%a3Vq@FOke5mTvIOkIh>+KUzU{DRtWYC@y*Ox&9 z+*59hJcVxBm-9!hq&AX*Wt)v=kd=M55A~;EgFbIs7M2s=8gi5#VXxp29~F?t{AfAb zN>K+xn=>&bH%!3>t8WHLx_O-viV%Fp(Tn7Q$ANTB_ts(mQcw5xM$saD0a>z~_K2&4 z`fH25Mh;JN4tE(*^bpa(txBk=n>m`>G-`-ZQ6pc}GXr;8V_o)%;l znq)`;>zn1sNWJ74LL?=XmX+gTZP+xL{v@EZw0L zKX@D_T>x!z!Bzo3D zE?6vHNAT#jp~zU_N?<1Xu9m2lygRP=l>#rGI?1_QGJLJ}&EsrjaL^5>XMNyhj?p76 zRI*ss@bty9-qfdCrPHoAPpnhl#`QVFT0J8Dnz(GdQ`=_s62t$_wF$;G$u*m7yY6b} zT48|K8fR}OZX3OgJ7d!|Uia_lk zRP9bk*5KL=3Bnx#dT=4ClcP1etoWAWSItFNCd%){VqvG8%cUKSnAHTs`OLg3B_~d0 zGJk3&npnsYOsMN8Rqhv`SM0p*a`k}JNZ)q8m*D4*HhhQG2zX5P-Bx{H{@yo!>RIch z^3#h2cVeQppz7n#@{f}+{Pz{@F_*Gy$B zW<|2>;+~+S+$hDTV@U^}{6zqh65(cDQFOpRU*=KJCq;}aJq%J3_0PS258@}d(%)wz zS2i06@)*{NRu!d42VGF7M&J-N#$^{%HHu_V&E>Vk1rL2l4aHeVXvCA{rD=kC`8a6O zgQ}{!1Utr6x?;of!hWBR4UXcOzX%|+fUv^k^b8B5JHMe>Nc@c; zj`+(0lGL&LDvx%6=|2cy)q@7LXoTI5=~fW5d)og(0Fwa-V08%7IEwRzme)(6Pp^vO z;1vDn9&^2*8IEhp)ySpHO~cCo00A6K%f4rIv6~gK9=WuUyWT%f)4g_liL4xrmD2n$ z$|oFR5gL;eOS(^H=t}DJ7*&r;^3;Q}>A18f2vRMiIk{I6FrC}A`ar6On|CTM!fxb` z9%q8&R1$6v&TUX&;^`H?^R&B*W@R7+Dbd-vs z!JWg+s9Ce4N14p=sL}&tumh#mWQi6?rRK4s+oaiQfpB0M!U{)YXOv|DJfNVbqJdBS z8p7iM%vc-F6wMTPDj`f%UmEiHuZj<%(IKkU3|+4K*{a8z@t4--tH#k-OunH0zV1Af zo3;tYsYb`hoWepgyY?)*{1z87!8~{;~&-bT*!iG2<`oBF2d7Pl<)Ou=c5-^Khv) z3IG>)vZNUpaER+nHen6m0?FnbUC9h(z~qO;U-0w4H~xZ_+w=SRv{rpf{lo7esg^p9 z4cUf!WZH~cS3Herf{$M}YX{4uK)Z#>uDMP0XJ%bu&QccRVC0gH2c+QHJouuh+%ouS zAaaAMl;&8=?;GuNGfs8yL%a**M%F`|ACBWQl%M9z_R3PzMrCQuJo`2~1J`mDU^G3I z_8N3!G_+#UTbTY0XxiwSGM8zeTT6+OF&^@!g-A7BbEs-;^;$t7%4JbJ)4>i-h+FJ`r6U<{vWXaHZ$SNU6h%k&NVM>|GgrmwT4u8bU)A3fVZM z+I&_wsrAF-)5a zy_h!OCPrgP7Ir4~#HqL=AKTm6>r338sZKS$ax&nZxy_Z6ZEBU3cPmDX*83HsESQ>w zue)`o0R?j-LF&|7AL5mH=!>NKnW4@AamI5t-Te%@ly>V8;Tr>;%vE{Dx(^O3{(L`- zxEiJokv7Sbsczx!Kb7yNXDWy=eOiw4n3$J1DgA(swS|-8%D7`iZBFj;(0klI|qG^Dw!3_rMrd0*f&4y5*1Jd6^!>aw041yOXw zf+sr!Co;I1usE45YcE6--u3`tpxfz>Z=;q=jk?pnud-uyt=_rKpjSEUM5m87puAX>m0M!#9yR+EsJDt-4E{T+RmdLC2n4!)R!8$k^$>!gdpJx0NZfU=dN zHqsaK>Y&qN9zcp6R$R9RInni=4}(|v8Ct?gqC#&UL$tqOTos88%Zn#Xdd!?vOr?k? zypHTxhk%EU!j&ZahMD=A=~nKUuv0(8zNpUyflthaOS`0 zp;q>Q3Y#^J{)KhfR+UOE-$x)BC@OGp)s}mjToUyawb-Du?no={oRtac=va*>?!y`u z=AWr^8=ZGp5wnd}2xjZs+ox_532=_vg^&^O!*$h{guXa6Y6e}rQ~hX6_f0JIltlQ5 z`fkzr+1II=!(S()TNr4RRo{ApDOIajvM_Xng@0QO{2a2yy5f)J1WF zg8pgVbj#TNC4*OZ(>Tqpacg(Rx_s~3p2iSDSu#7BQJkn=z3+6Nv$y5d!I9-xP`&pi zwNwe2;_Wg1N+!q?>z^l(~U+R)Z6-_uEe8h3!j$!wdV#TT^<1FE>)EIAx|8=KQ_(Bi>#_NI;?OLd<3G zE3n-#Ec3xplS1$Q3L`w!`25ku%jtMY)M@b5y9oK(i1k zWRgt2>K?BxT(=ATGpi7f1RNSsh=5bzPnZ8yh(8siesjR>T}Lo)uePV=+>-fZqVC*#{uoX1{D!-;*wZ%SlR_km7jZA z*>MZ*0lO^)J!9+`w69Wcv@NxJ0ohm^uJ;~ zSBQwz6&O8ClrTQ=i3EYQ^~INR4uU`MEj7+%LgYLk`wX~?gg`wtw_dj8kkYfqo*RZ! zm;7E$nE}C;5$d^S#UVLzqeq{bC;5vr_w-RA>dBIDKbCCm?cu`}wM=#^G$omJ=uJ(9 z+ac2!EYOyTE~Ws=@$OC-?2p!t`M2edoq8KN52MTrLoXu?p-daBz7C@@1^S~!YVto1 zh{v*|bn@S9=*z6X)R=+fYURa9>~;)f2e!LDo6>C>!GmVM>)V@DFcZxTD3Mn4_f!+4 zsz`_uFKt)Dq`ay-ldhM4SqGQDmDQ|-tyg3qs9^{fYBzgZX~C`#`%+n2&EYIxirg?g z;o)VQ;4HvfZ~GdJv!=#YaUgOT4 z6H3#aeNe?#f!iY>+dQ3(CdVT=q1j{2B35G@LC$2|N;%oG3Hh^(T48r^&QEl{R6>aV zE1b}cDQ2IA--HpuPlO6dYV%8JPH6Ap9%p<3?C!zomZNQJ-3zYas2bW+80-I;&PhaihTK`Q!+wsMOr@Ne`)YD%?I! zySg^F_z!IbeA}ngM(si7YTYVP%}u^K`KUs-F>)RH;*KaptlPa(k7 zG?yA>?;Gj@2Zqp>hTVg(iVit)wv*A+h6(=Us=Gb1PhR7a#H@&qD9L{xP)h5iA_?(u z7Aa&btr0nTz(x($F`w;vaQ}`mcYqrxkP?S-WH8Pqh@S#j9hgrw#vFC-ed(h$tHP8&X1 zvyQ}Xm=^{L(yy^TXRMZ%EAGs2*yO=S-6t+Qc6V`Hvbw$M6YN4r< zt(mmbL@B9*Z4Io$;3iJ=Iw3>sHwZWvkC1mKQ^bj_beP0dOP##IGZezG-D7nG8w>vb zMcX+pi2^K1cx>A?&e*nX+qP}nwr$(CZF}a7_uSb1b01*eprfKAx;iWC%ZG}0gQrDX z-uyY~xOpI2HX8$J*G&qF@)0oe&`tLQHJp~G2-`K5Q6;zBvD?GMDqFr!YZtBM`<0KB z8{_IO_=nIwmfS;Hs~Q_tJD!_G3pdO7F4r`w*G?}gb?9lss<4`%zljelvN5~t$}xFIwy}4pntf&eRKmICk1qWe&PRHN1@w% zUnar>09bSY0C4{Q>EZqn1DyXwZvQ7m@&6pwM%ET4|4;%Zwk|eK|3N76SU7EsH|(`p z{sK$ZCf`sgL{ey^wz=w|3JWqfbqmHjvg(;5U`U4Z`wtM-JYFr0!PH_}noLOac-kfD zXz|Or$;rv-Edlp5e33vLW$8tFFLnHV2xC({>-r8__nf$8fc-}+xXSt6#R~JyG@c*} zJG=NJ(Zel$NIVrw6y?uIjhZ2TCt@EQBvwFoC=H^D2u{@UsAUin2L1AP+%bg0Z`^OL zhMp{4C-Y0_Z$}E5gsn~DawG=W?vR`o+2l0nU?*Y&fT;iEN5klT*Spu$pGV_AjoE4;Z zds?r2KlKtxHKd1zRv}sluC^TaZtv@#Y6+3V`s(FrJaouH@rv0Y9`1Aqt~8GDh~IyM z@I5q4H~MXOr4r3yzWSyfpX256G_?Ro;`LtjJ${$s_|)&`1_lCb-W3u~>T|XJ4gpC( zPEFN_yWcAzL0{E;Le#a{Wn_muBlH6^oF1qei>;zYvO)-Ii_=xoQ7cIpP8Bt9;XqTR zloiC)F=-~S{JHq^vY$ZLC`64c*yxsZ)^%NWbVTsbR8+GFim>#W4&r*fV=`91niH*l zP4H8ljR^(y`*BJhRVIG~L{V0raj+^ibe^#Mh{g=mntM`4kBm^3!QuEg})NR_wKxMXTXx z79>Tz0q|{;$cx92{h8HeKe|e{3TVVf5k?o#XBN57KndX77L+4-CC(TRl3L3o_8flO zpC8S>kVbU`#A*~97^tCg>1wRGs7s}v7l?7`+41_t)rynrf?MhVSjGPOwT1A!9zq)O z8>wB`g*S^X<<*R})iXB~(d6j$3h{GAqn(|DLkqs7j*-by9HD*MrvDEJMt?xk3&;Rw za2oW?KN~<|thY6k;KP9fi{3}*D{QytWpG?GL@|vIXeSffqjr4~60Wa-ZwrdS(mH2p z2ORc96zgDPkg>zPaU-mcbXCYfaU$SI_H<&*m4c^l!D82W@>*0!(a6!53kdj-F<=fYUA_qIq80r@8546j`6lCg{cTRB@J(|S;R zU(~aKemm!WNQOclw_kHFME?)J4pXWANrX!N6rOFhG4^TyD&d6`0jnSf-IE=dL+78YI!M?PRS8{jO9f1Hee99F*w z^1dMWyn7FQgQr3Ia)^UsUM7FuCO}%fu`TdvW7iCfybS^Fsq~PuX}@!UfX=!6cd6+c z%gAkBGodtr4dwx{jwnn!P!ex0R==9QM_UAMdCaE2+7`>-@nL>9eBd2&40f9VOD_n# z3z%#yO!l3z{tIN7>=ykN9;i5HFzK#jz!;cpo`HUF+)r@g*QXU1EzPqkub}=}wOT-C zroqc$nPx3|FaX#%1+mwPab&E;mC{8PnPRJSr#1Eyw0J;%au3U54@)A?&ag@{f+Dy( zr2}&2_LBb2pUX?DzYx~^V zO>g#Zo$zmzzXz?j;a2wq_tqwc$IVS)DN8B6W(eEucG^Kfjx%_ZJ6DCdT#9I%^4s<}O#Psx|fEMxiXp(!kM*Sju0mKv~Cmb%M6qB}cwE4Vylj?oMWMv)OX zPSVHbw|fj8eq;Mz|2|o61hVvtd^fJI^#H^$vcTXN-=RfeG_efE4$_2CMsON9Ge(?b zVHX%*B}UF^aP6u^IJ0xF6M&)^9HEF_>8sz}M$b>N6LVaqe0S!)yA1ChW6j2+FP)a1 z_tY~1dO6u`1kK#vP$C;(i;nZuXzpsj%+>={$gl;mbs-XBi?WS%&m^CfR{IrJ#uv*V zo|d6DnVr-#i#j$M}z!# zgTl7+$|C`#kwIjs0kH)Y55O{8;4>kZ=Fm*$XfD+w07L{ zJrDUObl{zR!D7^~MhfN+?VHQfPh;heCH&5ZSg*<3R1+{4#xD6MN6#-f#jUZTiVgiP7IcJBMH6e zW8^!~&xSRTguGznrD?E`|KQz1NM9WV7!vnj`#kZS`EX;goiRz<&4AQg7QoF8uAv#2 zW-hyEeB2B9WId`_k?_*|ogBkuWI^Tmax(Lo1L@D5X0-jarqK5qR^a=@Hqi9h0ZRTX zO;iV4-HhD{8c775qGcudF2|EldXaH0pS)39bscD{wP zWni3Sx(YI+SeDQcm*JYc#K;+HthkBVbV9=W@A2EC>G~(m? zIG-QY6!a|4-g3fx0_k!d?TtnxY)u*y3Rdy~sGnFtzb0O3+3%EUud_E5 zuXKwF6!u1I!-L^J!N`%6nv610xOBxfEtelc>^fGcVTcS~Or@@HS*a3XBHR00p>5wi z?L4seTZiRv+#+`rHmU&nvxo*$2`=~bfdtw&!cn@g&1v=dNU#sdxr#f&_j+#rAcd{k zxI0NbCq;ts7(H6T+!8W_t_Fd#KMflq4hSbo)7w~!BW>G{-mq+|h%v>1N{=@Ysb3o_ zEglR=7NxLYbF_A;`vm;%|KTEFaKW>`fy*U7DGskcntxnHbQv)Isey#~2g>%gV?>@T6_++l3wa!OCYhT0;O(N#G z{-lW+cZUMXlleSmk>|%X{`FYwefi6A3B%?QDiN6q-TbFJqC*KDP+wEOIP853Cgv|$ zH|3({FNHiHB7l`IR;>YocvPzv02na{{1<9U709sj4pXeAfkf?)L)dl{d-s-M}f`#uQU;hhAHWwnlo;IUDFu6HWgn*o@* z{v3aKYTqQwt>t+6nB1#rAfX7?<$LdXL6Wp9(aun3*Yyid8C@0%GzMW{W8U2)UhLl) zRCDe3b~8E8Snq`={W;~jA4c3t)rme5gBlein)McM2Bck|7ekJ#Af{8cDV_b3uS&ws z-y^}RnH)tB6jqhRiy?%UN_e5iGw4|DM>gon?IEWGbc<=+4|6v=E)w=`zyQ;bn-ph+ z>z@tH8^r@9W3bc9-etq0gymng`wxKCIQjRk_S-TVIRAXfX51G)Q4W!}ZBg=`?F%pZIFkt=U0tFpN99R?8>-$8IXny+JjI|cz(7bAK+Iu@mo&CF=M~k-C z=VotDO)pPXUY;tRZ*|^p^|h9R+sUoag(Iuh6MNGgA?Jvl$?Xy;Ce@mi{b9VsXSg<+ zOJsm1x}89$c~W}qnOaH%yxCio+~~R4lO|6?n1xT4&{gD8{UOuYMzwdihzJ@9QGwGO z_uy%$aQRWt0EGM40Cig0&kq;XYC`1qj}$TpK1ZpywK}mDH)$j4?sVd4B!*on2|PwC zG5<*By@r4q@{u&$6~wIjaclZ%dU@+2p;2L)y=Bf>4^>SljRqTYZarN=w9u&mdTW%6;6kF2-Bf4iR$4TB{p$oJ}liZI#kKO^6!nM9#Q}~|-mOJDM4I>17lC?_X z`$M$TOH(|Z%OjZn$B_$BJGA?f4@j_WZrD$R9Kkh(P&Q?MBEMssd4v0rCdL<(pajcq z2bM4#1JugrCvSwB?MIs~wsV!%Tjlpz5T~rH>tr@oWY{9}ExX>OAQ-lUMt4qWp_q$SNA7vU&O(^CC@M#7gXkqWFJ&qqnKhGG1D^+}{fK87yr4v7J z|Cr*`z?{?RfKYjDlQVW_*_)GxaXE5b=Y_F4;C-4v1YD!Lop3%`)hdXmr%0_;Tt+3j z50s!6u!-+<9kM_x(GeRr%KvR`KoOr-T%PZ1MmM}GX@(GWU3ENma8)yo5h+K7B!HHI zn!Zto3W4x z;{aPtLHG2hi3%D8D`MuetPxCkt6DD)@j{k?kufplwUpam`iLle$^3j?-Q?x zZQ@G~Gwz|mxQsOFy0xcIXv;E|{c%?Q25)F5JY|ytVYWH6(PMeX7+n&{X-&;28gQ)m zlc!CE(FO6Fq%u{d3}Ip!iR+>0X3V$NJ|ClowK73;x3TIY?_Pm^1_U!zCMTB1`!(@s z$%c^9_@$XDLF2{R{Fj$nm~#M5alIQaY;qCzZ`0*^ek{V1Z){ThcAk00<(-SNHjV&z z1+iianwNMb%hTZIE$Em_ktupU#Xp%xbtdh-P1jTCEm?_~x4s?K;?L+Xy>%ovP!s+S zNrjGs&M$!2O0x)9OI?SfOzZlap)$(2x1`R%)j1=7jtD53)w%c4*jMVU&7@RL|BcpS zNZaQZ`^PSJB=^Zde*#PN)AAL6AxJ6&Fya?*4nJZQcJDFvVsU%NNHNe)pk_WC`fA+u zx)fEa5J}z*H=__mve_m5Fqz$>rMVfjPzh_A@ayt2x|7%8>~+V`8@QD^RmuF_ zWeR0c!Q|$14sIJQw`!&UN4%9o-nysFU&8ji~Aqt97bD2pHco>LbW?mu!G0V(8gnqIHw>qWWlqFco>L%~8|^8o#aq=^LuR63ECl)kmE)q z2!J#EW{>la^zJ8A!=pzZe6va{Wcw&8%JSE?igXlCq-L)hm|RX?!sHE>RItDR8Mjw` ze~74C|IQFS>OS)KeM}?x7#&|EyLbFK>;|YRc;(J4(L2YMP*q{N{&_z})P}L(^+y(1z+ty%T*Rq*uGw|sAbWJpU%vSj-g7wl?bYT3>#yLM4 zCNo!+TEQ@|d3=dX{pg}NJaAPyR>5*7CtXW;IrOK)^;+5meUr}wuT~kvP47b)Gx;mH zy&#-9LE0(e*P}Kt%yn5Fr(=$d=6TRkH6$VtJf-cZt=`wA>J-bvoF#kWvCeTcre0k% zwb3Y1_QIUXu1K@xyG8?tCL$EVa(5JZm9FX%>-b6Zdww8~bD~sfOi#j&x#hD;$}5-$ ztQqpEseHo~4JX&v>_lvX|4pcdTmluT+$FL}m%fiEG$tqhCt2)Tf7VSdJc_P z;f_g&ao}AJ0ZFS ztokk2r8Yu-Wqs>u2(moW%P4UYZ!$+uJ}7G7NNIc=gee=OAZI)KES;Q_h1CS zW4II`niL3;kE*L&RrUp<-)deb2^DX&*(SE^1Wo3$OsnUz$qnx)iMkFjN{TT9VjLxQ)+QYS1S_ut+;AW*FD>L_+d=t4hofGWH~| z79eLJi6$Wsd4#c()5OU$-X`$-+lIyIbf}?8A6pu@9=I1rLF=UB`d;PCsP5tCGln`f zYI*zE0YkLTK%4gc3E4BEyl8gimBWrxE&3s-HhuC8A->$RGrCLiX~poSVKH>kRV8OW z{@C=T)=u9(ZJ3_EN-ww{8=LFitMJR2GL?+0xAP})(xP}~Hv-K}g=cNrpq-jto62e3 zw2jp-%2|ca+}FO!e-AjWiKga zL}qnr$p`8HXFWTyQt9vPE$%zqy9?3%@15wA}dFbb=rIwk6x{Uf4);+O=SHI@j8F9 zXn1c59?v0XvL1oz*^PE{A-v_%JC7_G1>H1vuZ#%C6Q5!Q`r`1jIvCSqR8LOlpT$*5 z3lx1lDFr+hiCbKo1v4GmJ1}@N$De4L%u68M?&%)i*mo@8|v-J%(9zS^DLM~1xsp_yvCfdWbDZ8OEY74c`Qx8tX}W;n!l;2k9& zWG&+-8ytiew1tIqC3jbnO0!<9CwEVS`JPYjusa$H?q=Z~OzN@M9C`qx;~zl7yMMZ5 z9`9Tb7n>L(6qsPjv%L6lW9uzRK<8HEf?KwUN|LU*sy3WC4do`%;d5hZS8|poJ-v!b zsE>|Ki4|q+qfqidvVmuk#I-}6BX0XPq(*7VjUf%m0@NTax$aZe1bch-q$R@gN34iY z!Ce{DQG|!e))U&%6SSv*R(%5}DG9h3qjYpUH)^jE}z zx9%oxJrz>N%UP=u_UV3@A{vb+)k&uA-kv*wPx(3r@Sv}$o=)hl`@u#c>G5vT&WKK) zBYGoq%hc4IiTXA$>Z+9v-1ed?C*-e_!=r0ekfiys(lz-m5QBF%DnNJ)DsJm4iZ(Sw}3l@jO#C_6s0ZlD`b!ALrg9aXux(x5rN#cr`$17t_;+lGdTK7L$4 z*DE^~(W`r^#6jy4T#plQF3{zFOBsRTZ^XUr{AJ5xn}{85d6dA^kC9g)RmB(->p~{W z;g^&lrYfOTxai8}H1=043uM{1l_HWwqc)+s2nAygJohrXC4D zJipb<{-p;FPb^G~6~#4kom55V`EU;N(Z$Xl=bd@if&KhkoEKL-hcU+5O4s;u<(Nr$ zv<{{yai+BF0p31JK16?7DcPyn)qlr!F300bHghigmZp5~5r1UzQ)g8N>+bNj<8VCQ z0_OkqEv&JDmP~m-J8xA5py)`AL3Iy|yn)L^M2R0ui0fQ(TwlLiQMU6H!HA zgBRQuiMxZRTrI$)b}3<43C$1vi=8l)JDDhsD25UEgbu3QIjDRhO~^{E_+!H7z;Oi^ z#GH+oI6yLMH4(MV^Poz27H24beTv8>X=vW6wVTdZda#Z+UaBP0qq?okMt!9la}pt$ z$-)Zw0R|DF5^Cs7D96_63s~^hqgL|OZVM<(^A~$tnsTmq?#$B`5U`4~8b@yB$U)Jo zTb;AkyO%;(wde2QGxPRb${0mPT8c>2tiJMCeaw|o2`JWaUuc1v5Ws&@8 z7|$UUJ5G)DN?>rjAMk(AtZ(AARzxNM0Hz*50rdZWX4e1fKh(4LVEQ+ozV5kk#FnU~ z`0Gb>ic7Wq7JA)OXxz2K!?Rn(K`3P#*ZN&xw3*v(CadTAPx@FP)4)Nq(BN@<{pB6+ zUFV$u8jqV4CaQ`wOxffqip*$LPl*sFN)RXU7xqnwj*{T*V^^=61>gJranmCWn#But zRi>#;dmlNW>frN@@17i+Dx{fJyZ7y&NWGw`B5gMd)s}(O458|0|mwhqxQZ%SvnSD)Y7PSBDoEsV))HU+<*p`mK*k z53R}ArN{q4_Id2cyL%IqDD{4i4Z2vGb4O*UFs1&h=oBifYz z#v;PzU*V4|G*c(+eZa)gu1?sy=nh)mpsKj%%eTAS?rdChX`9~JrBp$qEdhhtr6*rD z6ooc~*41Byp!5N@7$wp)6sOD9CJNQ7%R&e2pCg9Sy71hN(VYk=zIvxm<@IBo7$pJ( zep*GZVg8oAmpNw~CzVAE@NsbLF753j!`O=EO|2}}Fvyv0EFI%A$NG_m7zzdPe2J@# z$6a~A-2f_9Nu^6!sQ8=rfCJ8tf`q;}f;|h5h#Iuzh@X>GQMwbV$ql^9&-9uiB z+=t+oPPc-?2eQz~NgG)a70Og{;S~saOLli7tE*zCU9HgBr#m;xpDI|Uh!fA)@q3{1 z4uIG>4CF?wdC4T${;lOF=AQJ zEn~IiA41+4QIj8Ng!7>)kYDjdISXEyxkroMPB8N+98bt?@JS#GDRTZw<5;ZVQYf0< zCr2OO+&CxW3kL=*e+b6pd0^n+9FrzPkDjb(^s5~btpMIu3Nn6v#ktu6nd?VK9=T>b zrk-7?UT{eP+G|{9&}JaYsH+pC=TPgyt@-dY_K5=gw0z)Xxwkii>&c#sg>rtQ^qZvH z`aEBnx8K%3summ+e6>>nml_ijCXhqyWfWrh$lk?qMNv&<6Iq1k3@2m8;mbh*-VZQd zK->oIUE0P+U)nPI)s^Sb+VKO%y9}0SlA9hNcuDmZZCAVw`6WL zaBfGyCZIZoC&PcWDkhtvFbz#fFlY$s@i#u7{~jET6@~d>@OX1;(lp6=xVDrrukeT* zxdF`M-o#xsS!dR4uf{T+@51C$b@Zf{8ucTsqk^cjYE{?9ImOeBIP(lmSSa*M#Bu>` zV-<_a_M1x7Sn`#-B1w^-qgb!}VGK~5=wTBgnd|!JwRZNvjTh_hM8>k9Ar;g?or+r` z%87Pn1Lmx7;A#V{;Rdx0<7B~kI6XfeCy4m|kd;tqHt*#R_c? z7QjM1BR)SePt@g;flF#?p6>Nw^sj*iNGCv|2&w(^^iZOrSDX5737QElz3rop_G&g_ zSy);&>Y7MN9I#5LsO>*x43kuqeu0~`Ajyn&O0F+p_-ewd=SM~~Wa!bT7}bgdZOX$U z7(e+-nkQEes|p-1Qvg4IxbA%7+naWCv)N0tPa0Wa;wdtH-ICxlJ8JbMDOiU?_cU?| zh|dubYYq6p3?3S~gZ~rsu?gvl1`+gu+HBSZ^hEi7|MAW>D4fz3u4)SY6%L&u3Q{lw zt(_UBd~}R)z)4?0sck1u=g&Zlg@~d(>y|V)Zk+g_(vcSs*a<1K>V{>(qfX%pTXqNB z8Oh(yc=x;W?ZNmy)~i6Rn{Nxb*RxkAAon%)W2oUhN#4Kuxmwxy#;J8Mz5bg_r*`FB z=_ly(8v>M1QHmADcW#nTTwkD142og^42lCi4QCuIH!)G6_<|}0sHX>Pm7G62RF7hL zLOhT^cFRj6mdU$bi<{?EO2YHEjDWTXx9FPYn_JLV$rJo*((Fouv2ByPBDI-iK@k&F*5LML;Bf!^rZvBQx~pmp z&5BE}7J$)wKrX2u_s}v1D982hkXOmTWexd~a7MX?NAUcPw;vev2-XYV%54DBa7wVx z*Zl&1&fEvBbt8XvJ3KS5Iv6r=G-73dF^iN{nOz75ftub=_Uqz|=#Q z_&K{(e$Y^s_?d-ahQUc z_GG1Go@QX#4;&a~`%S70)B3egP$DVUP?Bvo94vi6j4lw=UBw&Zr3n(XUZ^gUy4UFT zS#=4E7}Vope$opVT+S#HsJhWnjo0E+ z7*!erHu!&$)hr(%_4#*lNoM)zWKqtbk$t{tUvU~AOw&y9sP}pw&*Vf2pFeWz#6?Ba zM}U*JefbqjbYm^cGy+4E2wSQ~GeRK`CJLrbMu-5I^h}ZKx{tmL3RgXSuL%K48HNj~ z7f15>QDk}v8b>t1C=%6I?fk&tT={@j0|)Y36q=QqZ=NMe~0F0LE{Zt`P%Dr0%t+1i?dWY zXSd-R3j+tLGR4q96o%2nTk=6?H3fS{m~+ff#X+OX%`DGVr$eQ-k_0@SqcnC_gK&s$ zil8U++eo|e9~@|85X~K~;tLxa+qYg>8Icd7a|a9)=}I>M1j-}6Q}Fr(G<$@-5Z9Q8 zH%4Q2{=IA%?j-1=HW5z;L8U9GHcE4A?X(rGV?Pv-O6qqA1^3O43dVU#%;#hqd-^l{ zp;KyJEH_Z|pzWHP6}WKulu#&4k7k&$2~7(%(}yj?2eSwmkqW#+xSh0t)ux#XSc-xo zK;WVB83SuUyi`r7Q26V~FfV$OR{9+?k|iOIgdVV<@|~Khd({14ytT9XGR0Rl+As$X_i^VmzGY1_fHC_01P)$UE=%IjGF~_#|2Ej?jxB2izLu8 z7`KX#9vpK>^H~c-qq;IrL`1a+(XkGNa|OT~zO>z>-Npj&5;3P>*Nz-gWd~g zgr8S&WuYMThF|LXgZQAZu`;)!UN)HV;~qh!w+urodAxN_Ln4<1=tO&`pV6rDy8f{X zdK(>5t5TTRBL8j8)5~+*Xdr|BYe+>gXS5+&%Dh{u9ld5bt}%co zP%s^OL03kSb3B=4#i~fZDnL=ikruo3C+`v&ONWVT+mo2H489Uy;|s7g=Qw$(_fv?IA^fNdJHNG35;^!*{Or&Hcp38%;B5;57z8>A48 zmJzCBeXLuMx~C<&7Q0e)l56QbRMYosj2;E5qj9C2c-NUxf& zC7SOg#6R|d^3ok)Q(2fw_+xu!{;V!JcM#wGqK!bg`E|zYn>6bQ8wJOCy1hc2Usixo zFF{wv4`b3oJi3w)G@Yf1uz(K@7KceKc6cxEB_%a=D;90A638@RW1h^<|SCp~~ zC9Ks%oH#u?VWEU5a%K_inOLB=?~}&_T0jDkM8<-bzE6)BT)Jby#v`hXfJ8u^;m^vl zN9_e3wwEWwRj4c06=9Z94^6!&ry)-iI^prffeZ4VtG5OD@aQG50x`c2Lyp#X|2cMM zm&Yf^&Fba%^nZ+{%>=8g1D-)6=ylQB{>8m0yac%088PIUJgYy+iJPEw$dwbg?_>Az zE7Z%abW4cmrAY7Q^hm%!hyXjtS8c#W1M|iHxz}B00+=m=R%Y6d8#|4wo57cx#`kN7 zXol`U&Y?gfB;_6|jLpL~pjcZv7XRfA)nj3Z=TvoLmqR}xrMbp1a?}msVz)NF4%_r^ zs)N{ znFk`$(1wB{EZR)-00@R^(AS}=8v@?H8-vgDZp*qhcjN7LKUb+`3SfI9thZ!Sg|zAV zl?K;Fkzn{3s8QhPep_ZMV>Pe!wZZkmtEdBNv&u?aCj==D99Cg=q2;wrcA%|xlW~Rw zawOj8{Qzujq4#LE0y$2>@6m*2gc*tkSOMM34hr;!DY^9jSO{zwa1s2pEbstyMAVnX zF!OP9fzhr`x;Rt%+UzH4*zRWfgGq=VRwaq*=mru^BTe%fiwDQ#C~a#Ox#T6 zWG0kWBy|9R7ma(s(I($f&KBf!^KGh=z^HdChn2dKKp{Ku_}D65VYL7wMSfK49H`Pe zoVR2UbL`Whvixb22tjb6-sP_52<;r8)%fNpjhK zuj1^=Tpdd=jz4GHVfvo7fYHkx_}{vZ&R($Dbj(1AV4c285fL17;}@evhG-eSkE7); zZv1-~z4T%|2H9IGg(FmG|V}S>V%j zGOxbrKLUPkXR8o;qnR>FnT@%BRZhp8&BM@2UR3GCRE=Frehg$Cs(7>OilESw4iCvh zB?=&da3{hVk*Qe^XlNEOxDI=a=8#kf(%ALg|k;#BeJiFUKb1BE}O~SSryrCxG*F0awI4atDIJ3lliHr zNbhRHlE_1NUZ7s03eB5TtIeoTKigEjIXFaSl1UYd+tEzwvSGOaT?wJ6I)Z<_J`)nm ze1zep_AAujIQMV-9M6f0;Y+^|-r)VRGNfosTRZ6)7v6pPwmJnJQDV^) zcU|HH&K1Co+C}UGCuqvpaN(_Dj=?ikMcf38YAH7qOo4-AdR`q;-pBQV&o42!(e^-> z9N>tBYD(lq)?nl&LXYJuI!dGmStUaf(Wua8@vV44>4f8i!ZB%yVac|5TFAVu@$_Ih zomCRn>XweAZiaL2ki;PR9EKa}n8c;of4TOVij)UWA!lC(Ll`oZ$FK%=9Vz!4M16~P zak~xDQoYNYoCipG)driSbpv=!bO%eUz{o?Laop0~TRkO4|2Zn-!IGXP8CI{15>v?0 zx8e(N^3ToS#KrQ6UJsm);xWJOl@s%`c_1j};#*o0M6nzJn2zX`=3Ma~AeRdUzC zvY}&Hybj~B;ZlxV^IV(Uvj_!&(Gn&_2+X{%js=55ayLC2C4QIWFUY)JWd4VYe{K?r zxSt-Apuw`UXnE%O9_L#`+WYb?bp|5uhY9Oo$w`%% z*ZW~x6wl;S+96mjH zEQzGTI#Ey3MtQ1{n7K)_gT&jG;Ru;0zDe4#$NiqTb`tAE|1Jtsx$b~RwkB|BVr-aW zmyl+W)qyiLbBx#)ha$7R+GUYRCR)0i$nqY1PHTqD8{?7Xo~LDM_t-hl8-dK*=Sf8F zZJRn>k;843Hy?q>m%183=Iox(%mUcjE1HROJ`n(AXtw7p&+5J6*KkL}jXBxCmhiaT z1Wd=8ngS!pU*LWpyK+#FC?C>i$TCR5U5?y)to#tz8_&KAt-1-V5jePO7aIr1EJ*X5 zM+i!N2+1rzKy=CUMcB`FWb=D!A}tS^%HY?;D985&|-J7~qLWQo))Tx$rAR5O0k-Ucc8pq5<~NJ7DAJT@iJZRXeDSTKSg8AfNq zdmrP8O8)omq;ncgQ^gdYWD?3%xE%kJzcwL9LgNu}Q!p>f|b&hPP%T+IvdTu13OV3{V z>%m(eww%C9^;c9FS)|Ze2-V%3WHiBMP^%-t7nQ3Y{E>C(=@$V7b?ws3o=)^p|X@R_~{62V=jt)4BdGK@^_Y~J< z1~LoU6&6&>hnVxH=`2AgCF#X-8D9*MMoey%41r|_2Tn3uU~|^+nGjJIG4(YX>G~6& zim*{QaTZZ#<^_;zB<2|-H6O)4(9=09 zYAX&SWuGcpYc$qn(1l-GWISgp!FQp6uM2fY5jF&GHBHSWy9r^shVJBGx>~n?hRt%w_mr%MkSm$5fvHfD0UaoWM=_tfWF5t@as5G!VF+8Qh(H<>lA}*f_bHl$Q)vOcf~OCKvgUXH zOXqRP%5a@NB(h1e7GhHdXq@9Q#_`&YDZemDO#5rcV)6E|(tC5@)Yo$ZH+EHF5If$+ zi=nr}zc-ZNe#hu+)^_{P>61mZOwkyz_CnlNcky-$rlZ#&7KSL+fPM0! zAp#>+PNY`Zbzo|}elYywAi2Bx>Al|W8>{9RRHQ89wwpU^6!xNRkf(Y^2 zRIb>Pi9^%i6`f#2xm&@#J2`*q7(@Hq6rP{z_-Cy|6OD;h4XIAz+e%15L8KZH0k^FF z+P#EiooyrZt;1UJj!lPCL(X%Ka_NS1vi_`!@?qVku3XoROGjP9Zi}XFAX+~Qvrn%t z^5NUmG^3QAvTLp(fpt3$pA>(Te7Lt|J!fLNpDK`)I8OM}(hx7>b7OZzxAAFa7I>LPksFH*Y`lFoLk|A;Gu8xmGU+DyLFv5Q88P{? zm8!6Ys>(1$R%a_xa;oNf1chBY`%3gaMuC!ow>wbvmh3FKEtHY^B0Jq(zg&Ipf_tFQ zrLjw_VM!#pD*IeJDYjxq11rZ#q-^qil0;(#+{!!~43RjPDgLmxTlRdjvoPn)c8}ixVdA z$5rG-%cr{}$DCKuLXN^HPS#qIIJIVV%0pErRG%keJZ`Cici((dQd#lI#O0rLI84vC zZ**J4PfJMe0w+me1m}KbC*RF$;%RPzU#WHJN$B;e!Z!r;U$Akg;w$#8UQXVvLE%ge zc&i+n8!Ef8K!+0@H^|F`6rl2M72GRFNEnsJXRqv`FMH_`zKOmB`Zw$(dqLc&NV`>P zjbfzT>ZkQ2NXhIWPZ!y3Ko3jI4-+!m-8gJ)=-Ocn69+>4CB<%wsN_a(WLpZLeDW-A8!{Em#zN=oZYNTSUqE0>%x5dA{#!mk&>B`+#A zD53;4la%2_=Q=5Z_!;mk#XA?k(S78>9W}L1>9?gO!yc^uPe*{~Kps5~`$e2oJ%tOv z*(|{DSpkPvCsx(IDilfqPm~njhLd){1Lhdlo#lqrPLrSxap$cnSMeWGUIkVg^)~tm zshuBYrj0CABQob^J9j4#)WNm%2YHR zPkwkv)=P_$X$VmhB3F<90ewJ%zw4-)J_``jew1KWJnD?kefh+Rs=vWLI$!in%Vw%eEqR>Ou`#~$wcjx~H|Fn+Cq(N~CBWy`RSSq1 zy{ZQI^sgS!6l|p;u;C6Ag-;X zON)qbNr%dW=8}#T3Vb?HDxw1-s}}ggcCXG>v;Edp=bbb;T7uj(G^sJBg8mS`O6;S{ zOP`_;oc?;%o%inM`Uvk7c)nZ~%V)*py5-h-o@7`nYBxvzkMF7+otAh0iwDD za}Pim?{7ZGi^|ivO1H1xtg^Yz8+=Ar%#`byB{uBXFMt86+lZLHIX3q>xftohYnaj5 zT=xp?k3rcqm$ndIyS(jkov&;FD9EeDG`&_=OJGKSYa(1_%kwm}pxRcs5fyJIS(!x1 z__r~n0&hdNFyFf&6uP)=2ILhp-B$N-n2DxpaeJw5kD;O0T_lPng|Wrv1QSQa)yN(idk-m1n&FY?BwufufnEA;1Ci{CR1PRcqsNNeIyCQa0}&- zhhC532p?B$FvJ4E zO| zdkkh{WIwzLa}fB@w=^d5VfgUM8HjLkjQab0thPTSD8Ms`1ZEC~?#fo%l}-``uyL){ zn!1+nZL#9?!bwbE$^6taPsIdSqfls{j=<}dO8z`?(TIy8Iy-h_A*8OFz*}bWUrz+3 z6U=&yYqyH6@K55=*W4UOGo{>n`)ntIEQt&-4~-}M}imC9CR!e;+ zVllV<@!Cbe9gDhQd3ogGwSlzrsUS%^kV^}YZ%_bUEO-9bUk?ZWnGSyW@vj5*$HT!N zM?e1Ce`9X^@^X90Dd46hCw+NuKGen&XhcjL0sO2Hw49KgWIGJ`%=t=e78So7pKT;? z*As~e-{^Gmkm!0=F(jP1)&KkoNG(f#R|dD1`93u-Wj_YkGxDx0{G29I`=ugyHgPJZJ% zx2);?kz{eF%2J|4Iw;^LHL^gmZ_mWh!CFe-(l-doVo(& zZ^9bijy`eBzAeLdK}8YwkRCB|JPw+89Jczk)W+9g)vu+x0V*-NK9O1pY5OErJ!txg z!X^Y7lK-0s&~HPi-$ucH7nJ=jq{r|P{~f-FaO5yLEryRC2QPv?4!t=cfe%pqdLV)M zdJvAvFglNh(TOzVGYMXZpq~uBivkzRM;i=Bei)@TFDQ^AHmio5l2PJBX~Rh)^s`>b z428Z%*!+1YeV!ZX699f5%=_ozw158fFKE(nz8!Hj$!n~=}HeIg(7I^{yd!P-#=nMzvaKB9Ozzy=>*`BneSO2F?~@M0-IhxbdrAOrlJ59cNEo%`bJ#}XsHWSsDljohn8 zkH3S7G!x!_%T+^sD=LThffc1$%j?se4PS2ZC)RJ%Zi2~LcL?{fErw~H;9ka1bpB{8JoQRz^V9w)8@ms!RFL%hU@dD*zc%k-?u$h1HtmfiUtf~?<;2t*nlr68#Rpc6dG6%rUUF~i6 zon*Y2gWpB4%pI#jw}M4K%?M?i(m}|a>i0DF zH}U=zh)zY~s`O^ZH!EXP zV_sM-v)bg3btfN{pQWGk*?I7I?&5HFN#YU>%2w@)s#3kpp&kxL?A+V@vIhWU+8!Uz$+usYSE|>4=%j( zh={6pFZq+mb2WLKUyq^T34;p$?*0@Dv%C870BW_CPMy>&zW09gV&}*n%}%huh7J{&& zP`*Aq7>*O|>)k%Q7}N(h60l=mhDW2`TpFwwqGQ9uq*wn2F^Th~Yaa)L->IL2!S2-8 z!C-gl@9<&wDC+v@5P^QaH123&(1_^&wMB$k{TVT*Qgc{jl=^UlfzkIG-#rBf-(h@msvAMEU7KtpHpvbdH>> z%Y1xEcea#eelf>-P@+^vg7maSs?b8tdQ-K*qdgSbH$s3p$`BdQE?0EeNRtYOv7q_2 zFnQRowJv9Y2hl1%PCUH~tYW4BDno~aWjdKGDa#jOrZh1&FVLA~bLnX;k;M=#n^}U@ zF+DWk6)_y9v_v=pT%}VyE~>mI#rR{k94Y>58UWt0W2&5}%GI1dF@&eywW5Af1UHe1 z-41#upwI8rUa!vZ7M_vG@2+nlqGNCR4kFM*4gZi=5qnLy{-Bas34-w@;-K!IwA#IN zQ4ik6ll+uj5aI@b#JNzhE=6H=KaT=1FaWUrpMDyNTIsY%C(qJpIv;0F{39MjJjS~U zvdLS30#XWvjmr8rd42fq1$5*JR-Ii{^iYql^M$X?2C~;)5ccMiyc4Q}2{|H@>6uN2*MSFQH;$x{wTicwe?28*Fo6+T4dWOBj|a>7&aC zHie4@KFQC|Gm!dY7`Zc;Fd2wV1ect-n21AcxkQ$6__K5E*su15rXNo8`b<2 zI$>5>%v3ecK*WA}qU1TI75xmW#!BmMC5VG*HUPF7e>B1yUhO6Ct_rGA?t+li7M^r` zsk;C&`#hcHAUy9Q?0xvpw-0s$=#zCi4Pi$#0+VA6V|!wXL6`l}UBO;$*B_KM*YY}N zwA~GLjTkBN#fZ?%@s?+UbFL$SjNNB~2d!sldh>|kqpvx*q>NV@OSia6eq}pvLx_+% zDoa)cOe(8TqHzL&Wx3|lx4|_oZkJ4_x0hBYi|=VXg;aad@KeKx6yE3M(YXKDhl4-< z`1ePwi?g@Bi1n`ue~B`e^X@NA>5|@XzBPA3XSXo@&DxrR98V;%KWaNPW`CkVC5& zXKn6kh~|wjmjOdxpV7xgY&=cXi+py}%~}Y7&gDXx`ij#AfP_fpX{fxo02?(Oen(KC zr1)0`t$Y%zalDfGA*}g_$9s?dfOT1$Y@1w5DR=v;IYiv@!z1hhYeBQ!oj4GYZJvc| zfi+5@dlJV;`>rO~f!L8CyPF{|Z7&XvP@Zo%+SKvXSigouZlj(8ojW*J(5Kr5pKV zIPM;i2;F#n9E6SkXJgM#gfjgwNQ5cm;ZIu>;q`CaSNbF|s`Z0J4W-L3N>d0p<_mE?3+IhAhaPQvGQTuS)#=T;)< zl52?#S)GGv8^IVlnY{7u-q+M_;I{BL;nRoDi491T=V_Zk5xq|}<8l)xRBd;d4`-Xc zv~)*#z1z+!#d=obo9eD#5&x9et3KRRPDi$P?bK>4p_j(%TpxZbr*p<5*N5+lX&5)u zhZ^Y9gEPy)`+G*zUL0EZI8H4_iw4)$HdBqcxA18Z*6T-*wvOxdH>$}2+qu@3rd>-= zh2F;Msm`D*I#rCa_?}ZeTsV;U;oHaTNHfJV;tR!9U0Ns{1TuUVpa`D!mM_ zGxUIf@l*?Rh$=JajI_-Eb3_bxx{=}JR&y^yN^o4ZU#UvTX*++Qv; z?Z&~rIW*AezH+>-z4(-uKs|eQ6iRX-U_qZ1#nf%noB~`gb7eDp|MtY#Zp_)&R3B^w zf-Ey{9FVYBDpb8ZxSI(cjca2XO{a`HjgVf$LhzBTrUzc2~SJSkl>6?G?dwshxPjl1liKtWa(h5*GS8SaUVJ@&u-d z{$*aX`LC~$ckYwduAE#Q=RbV=Dmgi}vs1w;&VJ6ut7ry7O#ySoFcl8ws?e@DW$PwT z2*jHY^zyC#crxi>R!F^Q$m_Z3gz0gBVuQqHRP9j3=9a_Pt*27h5Sl-Nmu&t}hKY0v z9+b4r; zj+aSKTn{j_+<<-)WJ*^c&aPKkx?HB$8!VpAEu7+NNQDUg_G>1;RkQIj&8l6KgPC5q z3#{q#jU__6DJ@SEkA2&lqSXzHuRT|YO7%bneQ~Annrf*HTYJWrGG8#3Msahw9mBhT zIx*BS0&ilRb8y*yif~|N_v^g&taBXiUw<03*S?%i2|WLNK3Np`e07{HfUAH@S{i>2 zlSwgyaaSUFg}HeSe;8_YbPk0Thc7cq?F78anN(FDRkGcMr$zk4A{CzFc4{+8pXn}* zCK+(%v{c|vi{+}MIR(4dRWUB6rK=+r^Es^UIy;nt{u+RX8#V^Ji)m4f0m2j}MI9?U zl<-frm@d?ce%>E{qvfLI&j^NcCu!{6A#KnQ!y)$LsI6_=$Fq~n>^EXug5ZXbN$l%2 z(*qYXBx1bW4?jobS}1>73pR&{yAfgEYJ=AfDBx#Qo$KlW>n=kvJ@+b^ceMu_t3GZ`yH{ezVvx*rfB`4>a614|0N0y&*NaQoz~C(C8A1a8U|!=Atr z(SBcPEtM)*dWNe=h5#{8T|=Z*=XQ6PCZ0XxXwVlfifz!fx5Pnd5k#(NvRsRL%UDB=hj%H9OgHhrGUtEoy9XXw-=pJ)n){)W9_sb2sR9 zrI_HOH@gncguAAF`Jn6 z^}hKdYPrBJA)_K9=1@#Jk1f+H1s+!FMKaAkWz!0hO4)FkmZ%zDlsmMaOEJ-z>hsQT zH^vkLhQ41<0nfj!L3C5<1>5hFV|!Pv4N(K(pA7VX?U(B_YkDg8|L*=gnfznlRC=*2 z)(iOV{YIPSKlUkl5F?nYuc!JI7AP0#7)sf1$dArXf)UtlCV|+OXSNe|=KvEONbf9;H zxq(ko3eDES0NG2$oK2ox6DPuKq0xV4PBA(zr654iZSkg}W=KGeDM;KQbBeJehm@fL zX$(L2s_xLw!2WEjb*I}+xk?8AK;lsLpuG=_MxPRL@jDm(SfeidY)1(M_-A~Ru6m^la{qCOx>V+N~K|n zMtfs)N|8?Z5Bp+KKCo!Gn$7pqEL-trnOZ|-xJoiMC*fx6=_-evl^15GGY%x6x8y4* zlg-Z5QK36syjh(3p(fmM)-uzHv4vnsETl}UeIpP6HMCa_mu zH%Xs&O037>d!TMQDy(@IReLB2n1}Ab%WN=$eNR_S+Svhuc!ek1vc<}^#nxO5He5sL z47R?QbLxAt;o@IMn4H4=txo{q-^cLM{QZ70QSXIVqyXZ zS@s31{hk~ST_cPjUARa7X*LeF$?ca#)?j~&V=ydg!$W0*Z4OfW0ROXVNpLW=R^F)7 z2x`b4S*Kf2!1=|>g%eG1-V(}pCk*dS82*M&7>YdH<1s_Ay}Pr99iKH6sr*|xa3~}H zg-ngEjvlh5vHb*SSlG|WM5mVZTbv2iP4!PH8@s;3K1?l;eE%QEudS8rdk0%@Lb&kQ zN`tq+YaItc>E$X4Nfl=>KHAASf_|5zSiSReqU-mK@Fh^2`DGBp#>FdaX8U9g+xX^UT=KPR#1NQ59=0vH}@s_t2nP0U7I#VmTPsIPCWIs`<($(u%fPlV^=B;F4 z`@@Z4Lomw1TUM{Vt4kqNcD<3;V85X4ypB@DpujY_$UgxT#ixC3@D&NR+U7fgGwmmAjSrF3}eEr*u#*Z-}al_4`;w!#FL(nu^sf%V>UUNnFl>RVG#;~r! zQifUWn1i?7-Lk6w0P7FD`rd7&Rk{*yzr9$GlrFNg_kdF}M(1u-ym8*#tLhlMj!xgZ z>6EB;Za0e-^~$WjmlxEL{Z(25+UaBlv__R;pjC@~z-CZ^92k)MUqwDZ2X%AOrL21x zv|n8L*9ofL&>D}I#;)>lxYHJB!p#&=WPDzZ{eS#DRd}CAz?*q7 z2}k15!-unSZwIs))MuSurNEq^k)VYVCd?!o=d;wDp`WkSBA~C81m#F)i8)`Ul(tNt z|6Bv(!@M{@&p)f%8MDtR9&ZQ9@in%KqU7=AlW%6o3+n}D`m$FLU|mCBD!8Wqs!Hn5 z9i>?9T#ED#`_A)R&G2f2i}C0(zqlN&E@6UQ7E`2A0W-ct-Ah_QR^(LV=}^sV)(+Kcg@;nh1+$wSWA z@59V}9IbY8y=SG+xr}*WyqZc@v$yz)fc$ zUI*FvxlRd*(sr3+hCjn)`W{l?{geb_z;sc{FuqF_7NhmNOwY4Xd0mcInBB=>XH+fq zJ<;FsP9yIPstG^_*s9)Fn+R*2O@8|6-+ub(zmf+*!lp>e?1EPv$^f!`R9>Zv5k?K1 zoEwfuQIzB>wV#=#A2WMlJFHezi;gL+pv@$QS^$BrvDH_N;K44n&%QL-gqBg z&r{Pbn;>CHY^wC}Qxa6hs`QmX;Ka;kk)#v)RUO6e8kjjZ_W%7q|8MfR8Gnrx&k|cq z=<6b%L{WxK`8X>}Kole^)(G>@x{kHA^=c-3IvcZi>r1JBeK!k zTj(O~he8%-E=*nGJrx-0@9xeXg&vC?a>S1pLj>=K@cPZXVRU1H!W&{!=w)&7D*Zf! z60e@s60mMs$UwiR@3q;DooVVBgo_E(KgG9^>f4xq1y#7g`pXnuTN;VqRNN|m4Q)hK zvxXeWF|DbgT2xnPKr^<2`v#%NrrBRv8_5`7@ftc8U2B^1O?%5mL*b2G0)1^u@ww%# zDGlcK+f$;C;|!?Vqz1HXwO18d5O=I`=-qBy@wtu7D?T^bz}C?#+{SuT>t#3VbO$$$ zc1O$bY~I((sCKlyb+B|eq}t-fu#IhWJ!E^?@7`EuwBPgM)9b#MQMGyZ>yfqVO|a8z zy&V=d!VKk>+hGsyes;wU_WFiUXJ^c?j_r?q8QQ}(*%bz>aI4H^SBnjE1IiuloAKFn z@7&lSzJvC(6h7zd6^IT_Kby0cAgiAF3qP)G7BmDIqpi)!rg5762%! zc_#T~Ixj(7K+B`cHE=Y>UX1Kr(t(D&lTNSFYo&swlTUe>nYDhNeaem-N(?Ga;4Os!NoeCWc#z(KJ^Z} zwTFeia=s4iCsc#DHNKuGJce5=4V_rE-OYx%gLvcPp68?J7&=nw?w7WD3y9uLPpS0K$zU9Cd5CMVet zv|W!{(6xhQiROEsOA|g{HtBj4z>j@@F2sUvhETD zWueg{ZPF0niLtW0>FLWVl=HgfEr;GoMVi|5qB;+`%%-Wiuz7{J$I$9CfoeX>U}BH1 zvg{*S8&_9ADNM$cz~otC3~{;0#`(Es4y5h`KI$>TYP!teJ5T+6bFQeqo|}v! z&?p6XpB1Z1(@sEB53{WTyx#$+llfl&kblOYSdEN{1Y3hqg8wGvw7~2NbDiLMy|`GW zlMFk7ZUbE*;2aK16Jl$;hl_N+N$R36@!;RT?g2fQi6bZCR+c%vxDkhESB0cc{YPU7mlX&N~;Qguc=H4;w58aRk~CudK35`FmGT>KG+j$-NJ=rqu+IP}QU zfmCFjh{?uII^xL3V5pTg8&lXeQEZJQh}@9qj1p>}&QDg7lLBvFVz1ihnjM}&bX8K1 zZNI1!iBTlwGl^X+zA@TwdQ4Ft2#R(==WzV3o?MKQ=}SJw7(=?ZGmTCB%Os}9#eH+~ zhGO#;4?e!~4xHEA&Y}yNPr{;DZWUCZjP#ICGw%WRc}fL zYR*XrrB8*?MK{G<%Yh^Pldda=)drR$V+i$jwQ6<^=jo!ngpC}mF}c?RJ!H)9u&?)j z69B5##!^EFj)nPX-L%hccidiM@DDjBM~kAER&j7n44m>^(r3GV&H{zOLpp%U&ag>Y zkN<+Y!gaB>TjLZJDHXJxP+XCjD^B$8EC)ryBwIEP6DL6VW4>6RghWk4!*$e)Y>8_E zfLHP8n5G*v2heL~>CY8dO$zd^=@xXL`ECXCEL*{Lb)G!hd-P-vREj_0U*EuA07w6& z-hB&yQ4qY^vhF6A@DH?9)zoe1vdloBjy|YniE-vGZFJRkt`Uv9iCm6ES9#-Fo2^<; zBPA(Du^ib>Vr*v|k*ACjs>Kt0OFqLv z)suF^EaM~4A14KFUAk|Y!*7-3e3lYyoRY25oG+H}5A170X!=W3N_!Rg;c8^S5zgy$ z>VQ_7-YLB{n*tzNwnPyJ(zqzg!JB1%0Y9w%G`xiU2~2|fM{nK^&8F!RHte{GP%;}M zjB)o+7PHEPQ|@XjoWp^Krzb<&$t05^E9W~a7=!r)L#wZiv)$}9X)tLK091)2T2Pe< zBC@L{D>0-jrG87sU-2VZG?<)KOYS6q_`^Mz4(hN zut7gK$WGNgjgHV04GOB~^KrgNr&XU$0{3`oiYK;srQI6!z+aAl>DQ&A3Fr+u?dfrL zsF?v1FAT(uV$>-~^a!7tRs`CllL_cv{wyICJv2xFb9jE)ri zQ4>8v-(5qCv&e{1^dfkEe=9{Ljh1KWm^A;@rLyg*_wKs9Z#H^>94UVKnEU zwxM)GO#zRW!Aw|Yv*Hs-OPB<2#;XE%SC76~UG63@s1Ns&msz@;tLc)O@Urw{x;HCn zqNTq;bbAWWak{upPIIma5 zNN-wwR`g61 z`^ehpcDb}$3+(KWT9W#@$VbXKG*Y31Y|xZ6cQt0NO@V5t-Ah3qqp-UjOtUFeOOMb= zkb)ma*?hdbCN~ivwbH4qL3ZY)k$$K}_kY)ba?v14&n-s7Yy}`P_qTl4K&&S`CtsjQ zYSjtjebTZlU{{Q$4NBfnW62HSbfp!)hcbs{nP1E^tJeAYur^Pi*VL8or`oDP-cPseH&Ap6y$Q_2jF)xwqj+B_xael3$wH~YP+(ZTZ1Qs z*V?6qS(+1@sr|GuVTSjE<|;X`Md=-69}&u5}@+HEX2+J9hZP z(7%y}?xHcl2Kp=}-Z68m#TEWd%z$2h%*#hQRe1A^j8-R?&zur$t#&J&!7~}c+i3w> zv#19CMSo3Ds~TuUj}LW~R70a<_FfT-VqJ^fniq9T^(rBmwr3y>f$1Fucv;MF*S#*4 zsjRuzvHr>pbgL60kXNb&uZzFg;{{aK#6;+VDzro@xY^x8s!HXxZ!F7P$BpIVzQD$+ zt!~bBeOZl#1J}*nsSfc}$3~YHgzTxS*>|-Fe_VTr!cV7o5Prn&hvE@KE~tz}|G02@ zWDv{Vs&^&+$m(}d?95)K@0+8ja}Jk6c!;| zC}q8o_4!uoZ<%&Lw!Uz>jf@f~p(^~aQ7iI&+z!{h(r_yp zlf4pGQxWvS*JmOYC36Um$|+}kGtAJD9)rr9;Uzl)Q0q8ng3$GKN1B^DE^BWh)ws6( zR+uL`($1CVQjSY5-}TJobIjEnX|t4lwlzXMQo$ce&qEs_50z4SktW z`O2M=@jiwQOut#d-xz5XOL~sOc%y-jk)N{++%`;ORbsT@DCsgh0_ z`KR*oFzAAhCe}>gY^iB3EE_iK?~rR+^|rV*6Ep5AVXem;8ZjIex!{?o>AmR5U8Mkf{VuQ~NGb4y!%QJ0Za0tsRVRy@Ffl?>g2K*~grMAAw*){6zHdmy z=LXC-6y*W#O}B1H5z*1Z%XQl=@dz`ER~Cp>v$K+j7X%MC4W++@l0eo(@iua-yhV~) z;i0U;+=&s|*%gUImcvw=a1XaW653)6XA|gPgCju}qa7Q#)eBW@y5*%Vy02wjF`BKZ zZV=tp%=P}BL1Z5{?yQOa)doQXC5D4F!VGo+QP|u+*T{)+U0-Y?9v;=$2~nAs8i@t< zG~KlnpN7Ibm-KRZhDQQ#B7#~_zeTXIh>a!=7a};CD9`j~Sq}5KiDvQZ>B%Bc9?8%M z(^H5=HG)SMG-?x`<|~1WxYjM;_n5(nF^}Lf7YDiCciy;s#`IcoX3Adb##tHat`hVw z<6>+JzKeVUtYsmqfY)S;$CHWXKIhEd*j~2$#sT{cz)f(p{HZ)43Fqxb`O^u9eQRh)f|1sr~l*6UXQvt1U1y4HL^+Ur{9=cI)tsr6ZDMxDkJ)7{aj_SCdLWw$sy z&1Y`I5$f)`Cmf^pI(4(t)cD-WiE4amPE|9q)}5{Hj-;{k)gE2DJ7&%LSaaCAyDml! zTzft2=iD{xZT;zM51;N1VKW>eN3o^GdpMDePp_x4@u@wTEt8|+e6~cLUXE$w)9X=f zPuBHvTw5k^!=Y_|F5dL)HlJ?t3GQtKOPf>NUSGC3%+0zZ9O>>(M)G6bekX2zx|{c* z=8SiTor#?D4m;J)ac`;9^7)?b`ds7TkUHP}`ETCorc>Y@4tLE-aIe=lI1rA{mvtzd z(Yf(xxJQ94Pl&U&o6m`FGsrb(#l1dteq@~Wvi{&WK0O^C=e*nX8FHrwYSY`xIdZ2J zqenEKCC8_~^W@yLCs-Rn=EN7eD!{J1(JQJX{S+t4d| zaNQ$QkLTC%sb!KjC)vB>n1<8r9##4})XoS{d$hf~o=1&28n)mqpS+b-7^iLZOD-pvORH+aM;VG>6Re;JA9-JW^B(rof5XSFvY+9=Rlj&S z!A6A@gx69{fB7>N{kObc%vOT6W8b)-5bXdcG{g@PLF_c#z@hT47`a>g5MnEAxfHg- z2Ua`S3qi%;T`>Fotp-hc{}r#{tMXXEf5U0$tI9}1{|%?0q&Fe~rT1L+)o5HO2x~rz z0-dQY$am8F_yuN_{kYw&jXcYovI&?i2^ta#6$P}h6+mtCRYT?;75XUo(VPauds1|* zNSa|(vEvCiw45{v#tb=RKDvZS2IO|d%=~?2Q zFEp>(oV>3X-OJuXA886TX9|e$r3;UWkTL!Z6@ba$oh3%*Wm#cd7IZQikRDKok*0QEAC!WQQ_t=w#R0LqnhO;w^Y$UmhLIU&mAO2auD zCM(*PHuJurhBNCLN^W{8VWahqYF3sEVb$|s_ptae3~HA^50_q7LK>nb*HGIv(L?(N zOCxJGwm^E#++dw#&BRvASTmb0n(^j>rPFJ&*A=vyn(bCm)(L4X4Q8rjovRe+)>jXk z$$VgDt-Q^yW>U4guHFR(4w0kD(jk7~_AQq+(ah%l77Q|$zqAp?{*ISb%;A?;?^qo> z7I<&H`MYKd<3u=Hmhn zuQ{raAIRuLF?u(8T0m#lt1MkE)9Y}5_RpEn_$~$SZKU9Jcr2152up;it1LTyNhyH5 z2~+JQ4XSqszJ(^Yl~$~|I++!aRn&uBEvzG#wS$!Q(OMrtR2g(m8nv@%AA0*-Ixgjf z6{JGI&2Lmw)G>Z8ms%shWo9~`m!=?w>CD6H(=8Zo;x_#ALv}q-rzjR_zEtr%h7t8a zVfj)|10b#nROj&B0ig8rLnf zRL)C#zEx6uw?)sM+h7q67ol;m>If^}&GNNNRPACV^H|z7J@Q4VaV^_)W!i2|5-4ti zi(3J2Izd@8b<;HHskm4;!`RwvVhCW2A>7np7Yfmj?1U_-xR+`LkpkA+tsTeO32Kff z%R-1rVH?n43}NnOU2jUGfC!9{TplF0o6!awW~tn?1qTX)Z%j!VzBSTr2H%0Qu?x%T zy(>h_>y!FDh3#4BC2FW?advB}m+_ig$R=-;8(a>~cr}!CDBrOgV{86q(njWTugR^L zoi!)1yw})PoX;AQ_&=bmlAw~5YArh*8o~fOzhpD8YXT0+Se!Ak&HUX?Be&93>Wm{- zx6$qHMD3lZy%V)}qLw$dfv9a3V1eLuD0krey<7G1!2Y#c;c{UA@~j|HS;{gXRfmV$ z>8n-wniCU#?x)-IjTtM#dcJy^yrw*7IMRerncV;Is(gT^jmx53C6i+OF%TU6`{@$NuvtkK6JzlJLlWaA9fT8Y~-0tFXm7GJH z*yZJV4iJ`@_+WY+UN?+!pU8nr*b~~VnMSq*|6%zWlb+JmzLHTiA4ph$q7mg(i zUnt8FMNQ+!(Zv~v+hKAHFOnfr4+iqZvzjc2SXI#(xd3zFVG=&_`RVRxR+yzY7x$}q zLZrvkfd<^e-6Yq6Di}qf;cGT1%46FS21+k!HmnNW2p0V`BaCgtL$H?fjxx?M-z$%& zX&kt3=lS9?n`O&%x}(!L(m1JHhb1D8Y=234LdMX4MH!9V6eJXxCQ>~u)D#A4z8PY- z5bqby_L4Vf!MMsx*xu`=DKmpH=j`l(WV=pu&b#p?PA3(;RoE3OlwP zfyQ;^c45aR9fW5c|0*-!21SX{$nl$UbuaL^p~WHa^!kI)$z8aL#^^zJM;i^}(`@Co zc8sRt8G5T}lor!;oKYkU2(WCnSY03IAYY2F=%m-?aOGPC)$KJ5afzoNit`claWqM<(Gzy&yNpn9gA}^D z%*U5@*}huls}-!+Fmd-`S=gTytBIPP8rw+*wV|F)J3xs+%VZ3btC(pW#3n#eSlHmK z^x8?tsB&*%rX^aml~^$AsS$!+rbAZajMBBL)CsyP_w&7MZ`bw(Pl%zITBcXT%w8MW z=WM*juO#$T0L+8nV1YnKwg7#a14EbVv$;;@adNIUr#f+}6Ty}yA6`FyN0_Mc7ExGL zU~UmIm`AFtveQr;94^g6s)1Q}OBbfv2UFr361GGmf`ZFAXq`qTlZ>y*{R|Y;O=z;# zBv$Dur;0u%ZDMWoPpI#|PyiIgRO54QgIba zQA%FB%_!8$M}k3*-F;Y&G<~pLJ3c%U*Molw(lXjH%Hknh@}&D z6v(TkDiT!5+3+Zj0Tt>um1=`q8kNvftKRr&k83?7XvBqzzT7jr@OxUq+}nf2!O`1o zL1CG9SFbJBcD`HzWJ=OL)KgroQJ~Wfe|Ya0zuX<06fC>)2%)?A{tOn1HR^w=-2)|v zD+&Af;iEq~pY>bVWTAW6foKHsn;~MQg_v$c>vbq&EY!!3wSwohQ)09(Y%M6Eu{1~u z-)fYOp1php8z8gVR^ZV;n* z-3Idc%^Ik{um((su{nAOm8C-hX_bj0b_&jez=H&+>IlYXPFFrWHL61iEu5dj?y~gK z?l>9S&a%t&Q(i13CeK$^C8>5B$EXO(+Nt_PxkEBkTafbtUI|d`L{+2Q7smh;turoV z!uV9O_avt@v4u{2@B&i_E@mOCX33#rFn}-dVAO4llLIh|1bIfECV0H*M2Y>W{a zO6&B&YHb;4vyLzrsu##n=-dcM?K05zq~@$sEMcDxz*9W*Ym?wV1C1|Pq$^PAO|pvr zLDvfG(Y*zG^yyDTBKQ5Dut!GwHdi3*sS6VPa$Nt+5;O&tE9d3}zj@45c3G5}No|3% zduCLuz2rS*P1T9FoDsDN-%5=A_Hm#@`S~iyi?3Ut6$ym}u*3zLE1w0;zxz_1N_iW-Eo{MqAfa;TN-7s|Ptm z+DF&kZJ=AZpz(2RND*jpyN`3_MAhC#1|Xc#Ggv0_#WWir2sN?4GIvm<)ypdVT%|*Z zvyFQNb;cOEFm5=U4<9tGu4n^#PNzAljjumS!W7nfKPWt{jPBXz6iu~BhQ~sX;quj9 zO}heg0j`!-YVQJQiUP%q{8@%$M!LFu-s;)5~@Ju zQt4o4C%_9f&Ng9_zB30UTeWf%yDUMDXfceU8F#$%TwiVTc0HeKlTqeWG+PFhX}eq% zcxeu9a5Oz#P6S>assei$)2+)oNZ>0nM8S7k;;W#v<=*86*X z=T0$Zn_jUrS8|1SwhYs1Xh(?z^imf1K;__AT86a}2Z#zvuk94XUnA71f0}1yZE#&l zcKexYPRg5y)=qR%>i_Lz`?cudm^8D67TBq=#xb!ZnSnEeugr~EmgQ1NF0wa9Rgss5 z9)by)ZT>%{R2L=d7%*eS;ID=H>V`UVt>a!8;Vbobq#jwyLJsr{)1tP0_A(aQWx{_? zQ)cTpB1?83p?n2WyN`tCmURZy2gw?YmGFI#ZIZ(-Ql%EaDzad{arEFoy2(IR;CW=U z+4r(4swU-s&0mhH$q4SmV=#>U@uL^!ETDWX1dfh2M2w}w#kA}x%)tx8!A4(#;Z1li z#>bgeb!JA^TeG9)qJ3m(4B$t8x4a|sRq)UHvkj-$ZGawF=*?8a0-*Fo@srLWN9zIZ z)g(f*e`FzYWx3w86sIq9u419H6BiT($w7d=apsmWZy^5&N_aX;Cp7t;wKl3g)oX&G zB=EKNQj}-~PEATv#TnWHBA-~auSY+6MC$vua_LA{5w0-iCU*#3FF+y|Hlujdk0`obP*P!(qkOcJEC3Vt9tD%?6x#J%Jq*vZSdc`R|`8uU=y zAnm_E4(F4H`M;vy!3gjVxp zmiLHE5upA`3>5j~73$^iq4?x2$fvpST@i7!f+Z^Al=53f)bW=4Q{tWszXCg|f#I+q z!G4#I#u;yRD;Fj{#AAKY)?DgUXoi9HI|9U(F z(qw^C(#@{KbkdB^RR3A?3E_4_hko&wFO>Gi>+;mw?cyVppZYt$y%n1ezB2o0Dp2;+9Un$OX34G#UVyi`49Z*NCyv4fLnvt?(7! z((UC3qincv89wFd^&)X|8%(zyQPMIJeNna<+`)!{Hxpcp%|+J9)?J>+Xbw-o3sDaL z3QHLTRbRS{W5gEIpxY?2A~akU>>$F~$G^JT>+v0SyWATpE46>GU6wVIvfwIU`nFn` z(;TPmM7H#A#+3*q(WNnuRo@Q3o`fpBd zYnifkaKKKEuZQjt8Vb#RP*No3ACz>u@&_gDAqz-?C;Sge8emR2E&DSER1;&$^4};a zyfGyvYRe7~unR2HRYmJNxKTFHTS$UItLK6;q=2-$b!exWeZ3(qR3|c_NqfU7Ps_)`?NQAhPWFNeY5cZY1SlS}aLX zMkT1Eu;ncwOB4?v+BHkIY-RHI>tn8Wu#xZwEX|@fdwsDl!*rqS$e9{$kh4JwzCuH5 zW6PL2m+VBp878^uUD>L840>rKd4K5x53MYY&2UP)7Ht&uT@)>`bGzJTzzi*^EfKPH zVlP;(ro_IWK^8eehfX(cJ`F5n^JGThS>a1Z@30?V*3)37bRTu3{=e2%M$03Z^YAmmK^7p|t7c zyCmX4;{yOYrG%96)oX7}dX+(RVaQErRdX5Bt9canVWZHMCNzq^sack6fWk6Oe%P{Z zq?75jaf)`J?wVu(_Qu6F+~l?`*@*e|G1V?4#CD;Gd5^;-%Y!_PmVJhwWHM=e>(=GW z%*|3z0lT&d=cGg*j@78_ZvB$%Z}fodTScT1YgOPAmF4XjgLSl6%`{+THYw7mPQUB= zcWm^`9bO5*-gSblUPg@Sr;4Au8ZNhom#pRPbVoA=$ID~dQ3zzqvj)e@hG++luO;pQ zJa=QvGjQhWu)D8x=ac>QF%2YC<}>7zcKdUSdJ5W-J;e$v*9W=AP5X=pDq`VRrc+U_ zFlCK6aQUh&6Kcj_HF7~6(lr@v1bdjbiC8{aaR)3_6dUb*ksI$7k9Nd@lw{Vt+&Jot zkm#7A$4^nr%#=c@6}_`<4j))<1}b%wD>h2Gc-Dd(A6f=!*NIXeMT)9OiHwX3S}X^< zWJACVMv__Z-#n3av{=w=Q|-Gf=;RZ?#^mp+h3Gfc+cP!@sh}{tQiHw|^!a)YW}1Wq zGRfQbK^pB@ZOQ3<#hw;i+Mf?wDOhffW7F+kq^Z>%<%a1#x>v;^Eo@&(OS5b4m`Fm2 z^P85SlZW_4fL!Jx9rArVC_Vmm_K~|jWaH%X{@%RuJVppK$cFY~KT=1$XEMI0xc%SKq5@S?VHS(~y(i*94)MiNd1LZOZ5S)I)tfYDuX$T0afX5EDJ5W- zLfAIl?AClzbl_u?i6VL>__^Ht_HAilVb>9W%6fIE{=vc;^;&Pl%94*`n-Z;avi@#h zd!KP&y!A@|Q9@F`SNR?3ZOS<2mfiA?Tp@?cXBTX+Awgi10u^Dqo{NVMx#Cu}N)*!r z!nr>+i(01$19`-=Ptwy~QhxPg>TYgMBrN!wxkyih#~++pP}n=<59q5&=haSURCrM@ z)3L3JC}e=&{LeD>*dcU&yyuYQ6>YTl@=6$I(op1iA-5@0K^aLTZdV@dquKh`Mfe_Nv_|H~T9uuKG89{(b@}OH_xg=Eh@a97yDN^BcRlS*AYF{-1`WniU-Amc{sBJx6)$H$8{FJa|aq2|KeB% zh5kz@adX}I-12^KeVN+XVz13??Xdm6?tY^+bNZjp`~J@j0{E5xJz(dAv#aCd_~tsZ zr^B{;0O0z+Ug!U@|Npt+Wv24qNBQ3)|8vOyb0ahMYio=BKZ8?!b~;sj6r$2SD@mqb ztUmoaJcQz@KR+~?E{Y8!Btv!f(aGga=F=_DK2>|xbea;TrHMo=wIMy4#8vrateo2( zdcHG$cq*iS4|caB1pmJ6UgipYKU;2@q}0S!Cq7}*?1M}YbCddpb`FL$dz>L#H6_4g z*tg8_qtac6x}bG!+GVsmcXWR7ADC9+n2TT%e622N@bkni20I>!1upOK;{Oz@v&UD~ z+D;2#@XB7)GCT`icjns%>|@hS<%}X`m5mJJoH80sUI@Lvq3W_mS#ab<8|DRse@f<= zvlw7*JLUS=bf0a9T)VM8xI4-aF;H~Qz94qPKaH$=daJ8R+ub#VTbGl8ls;F4FL#!! zE5gXQuEF@szJG*f8Z{&7RBUF#^@$a=JLWz^`B;HObP#LvTkd3@_J_OU2Eud{7ZAdo$xwbZUx{uRYOy~IbxgxEE7(pCIE)zmJSl71!{ zB%!u*dX3>*35dcP;vC5GczyyO!_vqP48L0S)C@2PQH3h7<*g3ANQdUtyFEe+bN9IM zBQzvN;VJ(^bm|((eVwcwllWTfu~E?7kbL)kv$)}rQw8v>A1fVK=hn!a829c-$%_d} zUH2rXA;4zlZQCuWVH^WHQBNOSL(wqmhkD#h;nezSGs_U#1V`y-Ud~jpo1H}p;CGbq zb{>n^?f1W#M3wImZPT=~{p-NCL!cVbk_1Zim z?_ag`V|8lSU0P*BGV|=Jz$D;lCDsaI$m;wABZ7ZF!6>HjCm2l^|93FL+Ey@zr(yB) zvksN+IOi7tX_y}K`^iOFz6*G>0u0^{tUtYHiCn6{^t<9n)48V7+!$Ag5jn%^{X_fn z25zs<(*)_Z46lOYgY&45)GKJfbeh`Pc#%^U?(c62ql(LQc(9B7*A>Dbeev*>9IoGtB_$ zCn>do=W34W2>m3bK$)MU^mB`JN}d@0NlJ?A9GHsztuYJh3>mCsEo&im1_3y+9$!ao zMBC=$&I4w1ad##-3SsKDJPMC#pCM{z=*YXfjyMu_x8+hn10hXpcronY*``DGh$RET z-p0fB>u>6CQi?9PUfs7WbXJ&!?hc(qm$cgOe40g*Z&!2NDLf;o8k#4wdx@-*MF*^_ zhJtur>*P!NYA^8`p{^Y*u-vbkk|}sz?-Pwe11;vw*>xMMpOfUt?{Yf|Jta*(48anfvYMz$^ z$5bWtSGr_}ftA@;N!MG2d`UnU#u?;W=$}oP*S5eE%|wSX=*)4+p%^|RGmbi=P>nhv zDy(AUJ&Ei)G2t|9PHktO!3mU;xyBskj>a+~oj#+8hm}d#P8{1sk)kA7C?T(o63fCd zPVGB^8D|)voF$%#5(}7Km~xX19)DP~9>-cf8y;kSb;|T27aWXnoZWSVaW~7tLLU=B zA#?K<&7eD_GcLX>-_dly_Ij6-50smcuz0;4Qe1LNx?(nj<5OP74$eJxAasUdK5 z!nYHW4&AlS8rtA`u}#GW&OCEEV5(~xkH?oaNc7{j$uL^SEH0X?Io`HS!E(I{H=K@s z9k)4k(z#|SjIbN5N>Ol2R~~>Bwn4e5ooE)Vt(nk`C|tP>UXdKYw>;ToIETiUw`_9r z{T#9{P|gq=fBPh5%&n8Iab_%VrZy)PA~*Bs*qmZ!{p3V{FxL3&E^N!V0e_iKYE8&t zF!~DOZ!#?o-P%^MV=lt;rN6wx5W%dks|?SJ|F>&uC=)^5PKQp>rT>Q^J1itG?k~2=hRz9}^;PR$aD!@H4pbrnPgAv<+4*jLuji*9f0meB*uW!X z^|)?DulPT_*j$C2=3O7qZS>;4{&9V~-u3(1j=pGvn4|CTFYxHqy=>>&`q{0f>;_ky z-t~+1-_Pl5_Hf`Y`fNP~fB3&xuHe^r>_TdGV&aiGIPeFw9b-Q(Bob+}`EcL|ZZf6j z&q%^Pu7YSer2V6|^FSCNDw%#dsfZ|zn?|*}Fo(E(XL58YZ)L0emmp&&J6ldIUm_>F z^y@cXm&RN5@lTKEyA5I576uJZ49~H`+JAK~r%0dw_F6o5yj%Xg#wve%Jn{fN*)uK+ zOu02cdH82y&pWXMa9N;uo0l#ZJ3xo^EYC-xRT;2GVZYMQ<}XXZuKT9Q#uKGD<3B_Y z!b4T~Snggu^PUkCP^tw&qrY3C(hw!*NA+K8PQ{R(+6W3tk**{kuXj=;i-jX*^5OL9A&$RV&GncZ%*~Js z)c32uI8g8%vCw9q{`)$Ks{qCtiQAEqKx+-@Iqk?YNy2ow^r1)QIEScr^`T;w;mYIl z`%jGSLefecOS8#-q9NC)_d*WbPaCUYs2%xY`858kGO`$h2PY(%&JI=La z>m1=-z`r;0Hz1(znZrALN?k5U8rG8POXjejCU#{7CD`29q=^{B7h6_2&gzt8`bWmd zfE_v6or>COg>c4e7yxK?1+YhO)eOeqNoMYMc(?y#udr!Tn_~urC`yLKTfe$`Y+dgo zo!Qshm4{E!pXRaVL3dVRbgZjED*4=5`EibNog8ToaVk>!$V}2rNR@(;L7@CB8xFx8 zQ71N5YUs|CH+Vt&#WcMV=kFYu1(3&bo_)vP(4>4_)bX!QRpRrM9DBOfixRen@3Yh! zFU&RS4Kb`2sXDdq^32)OM58`RGAofsrqgAr>{x9UNz>?szK&Z94-u5(;n=#BbJ6Dc zItW~Qi^|JwtM;=dp3P>`P*v-UfzhP0 z`t?aVfD9%vA?-Ji%BfQN#e-UnrjzMBvke;}aAiFoAd=4H`n^fD{NA3rcbCrmkgtwm zqh=j6E+$`Q$2IK2<|iz)6|)ov02Uzm>))04m*eJe{qBvb^FNTB`wFwtMp81)8Xn~& z4^(4r8t*g;NtdM~1xq^&Qlx9(%pp3e?xY*rp0k{r90XYOUP*dW6$4to^ql{G*qB3v zN);>DyW!8lHd=N!DcpaAHCX>DO@tHL9zq229l_2>FLpc*}?2pY~v7$DJN;Clh z0qMCtM)>S4bdPG8%B5!a&k_m~Xy^#5=V2{RXcr^HbO-i?sUx}6z_kz_h*;}-3_-o9 z2tk-k4dKB+6x)?4M2gKEwD}AdwyyN)r(wKy?WXC5omr&Fh1aJK$w-85cFJ zW4#RN-Mo~}wF#QNusTDC8$vVV=@IQI zcg|`v9G$X>I!PX=S3kU%^h+E&4I{yOf2nlV;5cX$Vrkk@y1#0FUyR+T-X}s4PV6dg{dEPU zG<}7)V5tk`t^&O)Wvh|?9Kpg0WfDy6X|r|>hJ}TF1_g@Ar&Nf$YcJhLfu$1obP^X> zCz3%*TPqF*5a?p7g)g9h>nW!$i3$_g--F@+ne7`h9Q@tI$j)c~b*pUMpW+v!LmnX1 zhxN@m=&iA`ae=elnCPO`ch@0oP}g-2uQg=cmk8_dENds7bUa#C8}ElTL4sww%sIHp z&Zy8aR;guN;&%7?iqr#u z@o+|CnytyNv4>k>TuR~gG#AA~5}199_;{?x1(hvRwl&Yy5k?@)L{?foo}pOHV|q!O zz?wrY^FUO+*|^gDo;MHA_2e~e>BA*nEa>B%3M!2dn(Q9m!#gFm`jXL~Pump6xu7|2 zVIq6K%(P~=OZ!l>kK&KH(&{C+Xl}-?er`UVT&AMQ3-;TbfzrK-4FZiH6r>i@VR*4L zC=QHI{bBZCOilWan|(UI0RD_UQZa^9oDvw!Wj6;cXPnL8hbz+XF9qetU~ z{)0$c7AdC`xCPc8 z!rr_{N^x_#Qzx!`a=+vvVzpb?Zi39V$Gn=i~UO)2#CwNAlsX+C}SE(bEb2X2)`DiZ~pVE z=d(JH$$WY=4Ldw|Dd?=$j_c|i2l&%_wR$TsLTTmJSX1U(KsDgRtmeHJQnQA3d#*0Q z#ua~9H*}Witugk!@3jQ5fJ8+mtX86F zgs0Yc@cE8B#7*SV9(ThG-U01livGIj3`M6d$4=(NZ zY~kkIb?qUixwy8LxZmBHbzHfWWWO77(m_cFNL-@!oY5Win~e_8TBlW@4FJX!HNI5{ z%O7Vz3v161w3;JV%YfPKf@1Z0M;0&+Tbjm7Z7xiPSzRcc7sh z3kZFTi3WC0q=upCTmT(_KQLSyIC4+*v=b$y$d#Y?09S0g-1B+r(os8l#-!UHsMbKb zkpgSYxM)O+iizXCW-zpj;JFn50a=GN+gS_I&^yvXdD&lF8#7-i)YE-fj^3*HC1{px z0(w!6UAv4^qN4$4WpOp>DxBAty%5tE6fz6!a@ijS`ho7UDWIaBU|7ejOps%jJ@UXs zv)`LG1KFc(HBY(@aqZL;5O>3)#SIJ0AMXcHbSF?PTH1Kwto*t9$=wKt|Bg6OROBsr zrIF2W-B(7)Wu6sO*>I{5?DYH!=?=+zN5qZyPL5ABcgtmkj}EN;Rkxv^Td}%x7{J1O zMCz-b^HXvZm&gT!=B_lN)9vp%5UIvE{LHArAB!_+5;q+x3=};aEm0sP6=Wna1XA3y z8<1#M%VBA%`if#|hXsU|_ z*N!hKf6sjEUAz)a&GN_@$>9V6G zyS}65gC^17wZkSFuy(SYy)^;^A*w=QQB+{-9!ZKHlJvZf%fozIwgEI+7N<76|{d#Eb$JINDhxo{s_Pj zEZ2!XjP)$L)ryWJKJY@1b!O#(N;E22di>mb+h*5(qNO0-$wer8{t^V56cDgq1pQdRX^w-&~d6ZK0pHX=Du>o*ILnF}-$ zMU~GVh0xir^7!37qDMZ>yK?`ave=4Z5EEdaSh_ z%idzyqVbNRqzAmg7CP3&-E#Y0-piB|7%?JRz1txCo0r>##vSTHIJ3C+A-O-knQ1jF zosO>|-@m8J)`Er_wzGxt9gRZDs+O5rS@0tpNEv+n8Pv0f-XzSiPy8d#h0SaYsc(m} zgShgA#3p9f_7M*Glgu_@6o}L+nMNbJ-7ugh-&Lll=gO19(;%uYm`Q9Zj3)_kt7gIk z`g`3vwI)xzC-6#hb@#gQhPV78@w=+x#<`B%mUdZ^zqR*Q{6Cm-f(#r)VEWr|en>kU z5X9Gg-gyf=S3I?vY9k8EhD!dTwN%e?`I28Civ2-Fw`*@(>}+P~SW?X}7&G!T??RI6 zv!j&Hb>vN(h!-;`mVs3p7UeFRQ@e$XNE;U4 z#LcP{Wob`(y+Y2Omu+DG=CpsNB!#0ytR_~RXIO88*i`1fZd->=xw2aM`Yk?Q! zCk~#Ip)q@iqdC~ev^Wg$4T{?v+sxEcHE%0-R`HnsJ;ycidAu-9IVZRBLS#*@+}6di zJ$6WfxQ-WhY;$)70WD5X;F0mimhae37YdB9KUV|1E}7437BX?KM%}w+ptg2KyDy|= z@rQdiw^H4!cZ#m~G~cGT-JoaW#1t|6y{Rp5qem2DD~2T6^HfJrf}kxtcF0#3G+b*t zZf3imY-fj8&7(Usv7Im)7wm8zIBPatu^fnhh{=p)PW%k>4vXV_tgq|C0fZ=pm$!kq zoH)I$o?|`DFG5wWmrpw2em0pkIL!z8<%TleNg@TaQ)wnxcN^5Rhm(iQj|9BI?zOEy zG!kaMs;1Z*#5WJ2_S7jfq5)^F)YV zQUxx($-jmdYal9q7y+o3n#usK+`hm=5Goq}2DVc}2c!`mYV7*l06Qd=Y&-?XS)j;0 zGewaE$U}$y8p^!d=%kj?fYSAR-b|2LFhphhqQ65@b9ftW`T5?L5HH_6>we<15r65q z+++(7Mg_CsZW+fnZ6}++=e78jr^?A3$mjIcsf=SQchSmGW98kd9GF6r(;n2h=bAQA-<-PA)AhK01H(( z{-WGAxv$2$LRs&xk&1Dnf|e={WxHk*u!~b$pc7QXmpc@RZ(P~>Cqc=5;_MiR&#NW| zjd)wGe;L!|A9k3f0l4yjvoD;w!SZ>Dk>MCGKueY?QVrgz#XLH^xl!LyhhiTsj@%%$ z#|RAA-84fI8i$Yov!Bfwxn+fpiaf!xEE~XvUN|O9@DfDpZ(Gt(aNxHTaAnXeB;|U% z>^ZO8p3r=`#f`48{@Y(Rq&r-pfTb^pxI=eXiisOJI6g_ZjfLi|_(f<8t28Ly|M|D- zGw|RS*e4d-wQ!mTEHFGcF)Gf3bfF1V ztPPxrmb72Y_uDvv)<8*RDnqxQoKR6MrWG%YeSZhD?wvRn*BY8IlEotmNJ@P2(yUO_ z7_EwBAsw7A^tsqR0`2Qwi6o$95&N8Trr$i+(A4RNS!U zoQn2Gp4T?PFfX)@;cT>4|Ci*ovmjV@2LVC;6xWFE+`ywdI=fK^tzMXhZ;F#kZgh7? z`x}cioOy$?QpR2ecvB>*zd0S&aoV{7?xL6dW#MNM$fP5?27TkAAw!Uu^*MrZvsn-Y zOmjx(!F4u7t#Yo0d`A6vLon@haF=z+ssns+8B7r~r0HMnf)UO+u6%>3Du7W$vQ}7jjVas}2#1jjDr96SK0t6876lRm_ z9S!cMJT&$e*O0>@8)BqH4-Yi7zZ; zKw|TlcOzt+5bID;G!v4_a`J`unmddHN2y(}Km0Mk)wM+e#_Yy=e;RZ21Pf#kMmJfy zKG9Uuiv^&lA}pHR4sw%c5!jC83!tjte4%b1?3A2xDKBEQe94IZa|(+|J>Ip?>RP=! zQDBZ)ynCMi3YD5_VpU_%tQo#yxb6a=Wp}&xzXKXKX&UWAO**2~0uz-t^-k`n+ZpE=vq%A42}%r8)aMcXb-7^G0R47brUJHip?XE);{)@ zF0oG4LZuW^i(F0S7u|~RTx&aM#(nMYc3_Xixg0uG$KV{SG>Z@?ZC01+3|B^0VzC@k zmB`fn;~&x{z(KDe_lj27l9U*=svym1vNC0^XOFGtjICTGGKfvAuVa`6F+(hxY=0|u zgxfcj?1Jt=0?qpxX$BSZ3b;Kd0h16CM(^MGKFS{$&|X6JTiOe`=vE+x`4VbX+0vfU+slihQpy`c&fe`buy4ooicp zA8e%vzFFXeZAVPZHxN_YqXx81-~&*g=c`#wV5jHW`J>?Q9wPy+)!vM&;4)$ckrIv6 z70_D%sKHG7Y4lwv_ODhMDqQY)iRmA=CToiE(02#0DUcZ9>#j#<$Sbgi0~{;_%V4Sm zpO`cAk$bMSmB==mo!DT~e467*cZn+7T4uw#Peg0yf$Od1zqYF5C+~;TxU0ixDW4f* zB#OkC!3fW`8=jwuj@LW~ut-ITX%s7CUy|2iof#X<(E96ueO_r=a9>`k z_D~iXRZkdevdwL#7OAX0$VG7sQl9jTx=JW=m>~b@IQ1Y8cG)NzA|yAnDm*tgCgB`* zvASg$J+5taY2`1BJY<Twp&Tme^`?tG%q7#@|&fy(*uYwRDF*0isyZ=x-E)d0$pe57Jc<+o8RI+&%21A?{x zIiPB7p(2O6oYJsU!PH#}3egXs^Ug{DEegIHuzbISAEIX)w9KIJ)ygbnqFmhg z;8Q(+=UaHI1E$$_s9Y66mPDe~l&b169 zjU!9hx*T5bh2dO(Zw_!d+>}G1Vekh=`I`r4B<@@sXWSP4*9Q1#9s8Ct0hMiD7A;*b zo~@3^JFb7&0p+iaK~f}svD*{ogL4&r8TllGcq^d-{tga1IyKI>!L|L(8 zT3uCeGn}wq7saibSU&2_IjEFO-XeUj_BC9u-0uEsLh5V?P5NqB6EIls1k+U~t{O~$ z9jBoa@CC{{(QEsqaB4IgD$0|}?<&IS$B><{{s0v9Iw_P8uUOXJ$b2*s(C*NDRts*6 z`c@0eaOzX;xTI#p8wtJM*12OZY*rOgrRNMV@@7P=X+1dK z4;GDqozW0W!R`3Tm1Q@lMgtVs4XZU-MeejlUKw)C=IoTvW?LMsxgGiaGsDgKD<@mG zz?QkbQF&6#URte@x%H3+1WyhOj)C>TG00|(;p%#vaemo2GuA{+@hC%D z3d&%sW7NbxnUmpJ1OtEPk0l#nxiceQO|H*qLpiw%N3Uw^`Lm}q|2X_)y+d{h1|1*&u$&m#8mfz?VL#yFvD!ckok5U zKmCdd_V2LP0z7OX<>1wXa9WxBGD`Q)!iy>66*Pc>s=*jT7H&r0^Yxn-2VZ;iyueKm zy-@oHvr5BEVe_8mZj`DQ=YbvSmRZ@&o;8a>c`UI!R!%2}|yOI!P_KvF#0Frpc{h2bcxVPYv6?wK0@G-o0D4h5zb-@P>q8)6xr z)fu0_i%_uKAcYurbBUAXb^;8NMw4Nl8&a%tGcm{$Wz87q2Id^!6j%sUNB}{0XR^NH zUOQ>Gp)$K28Q`xx&U_XQkre+$+p;hf$sBWs|CKaWB%mqOTCcQ4D$D_d9hhBuHvIf-X&d zE8q&IKl0N(8Ue||5)loSC}Z! zf+}@ToS&sKMNk#ih4$IH&VVwuAaJqwv!w&ki^9qY^)D&avvu;hJPW+fEAj2P0Cw!) zE=l~)rgaj?JR_+f)CtUsL}=L@w>~uHINLsNsdG-pxFv_}crNrmLgG*l=^D(VyS-Ed z?#Wi`ah9S6ELmIVB90$`vf5JE{Gox8ELKHA7?YRGah`!Fe#F>_KSrjtMz34!PtGpH z7seI%vB5-;gC3eQk~~&@EUa|xp?b!ZUXdNLPavhdmuD3;=!h@EL-tA0N{&}1@%ips z{HE26vCU+FPoC*j#2x$EKR>@P158()Hj;(8J>p100?n1I_!ceMRCJEO;s4#k1$EJK zDE7JK(4AjxVi`19M%f~J)7}iAlj-&-Pq}O`k;|`bHr4G%(EFwYlY!(mZNAz|7~y$x z@Sb%VJBKq4K2wGxZOBr3MYSE+Ok5oyX8JRVENu@ieG8+bX^Kl#D>$L(Eb~WE3=lg+ zi( zxqFC7L$}9XCVxG!k}JkbAMg(kYn#STSa{EOlijzq;m90VS&nqkr95fR8Esg=K#aC7 zn7K8RIdyqV`e1-bk6b|qeOnK&K&gq?L<~VMcr3zBdcoMTXL=1sSTTw~yz(A}uIcWM z!?f}{Z{Z1pub+b?UQyK23$}#^hF2FW?xWJD%S#Q?q`q+s@dA0c2wS8kkL;L4p?0|p zq&Vw%y}|e}_|+kJX3r(DRq%W;)Bu^CM6w{|RV#NeK$(+_Qg=Y&p!oMSNUmcB4E1@$ z(?o^sk;~x!y;zNN2`aYAhl4n{Y?Y3eUtht(u-=DgT_qp7wkM_R^f{o5z zpm^S;A{O+@GHzmp4@9EDWs^cR)Jadsv6g$rQ@9@6so^w@c7J+}4fFH-V&pwS{~d+Z zLK=0sc)?leSTGtD-F9#^#qVC2(>a;xa4fv1Vy@UI_M{iHd!w`s6Q9~54MY3DyOA={ z%d~-}1Kr_90wPhSXv`tTrzNR~E}AMZ7<<2Q9HyGd5{c^tt7L>3e>p3a`_P$H`N$g! z1QDv%337mVA*Aj`Y9Wp6BD)QGnu&Jn?zSg(kN?)6*PM6AXTI_;D4m_ZCa5sp=m&wZL0^UzTIC<2_CuFfTUs zj6Ba)C~h9}ZO)f7<;$Cp?9&VLA@;8^N8jYjgS6{2s`g|b4V9nyzV;o5^oR)`Da6px znblqOUCkSs_Ha2OQhf*r6yexWWX!?MJMHWtZ(zZr%^-4WPP=WJVZ3|Fl-=r?CH4`P z8Cv%?az<<)_;C#OW|IB7f=V${eFN3!ApHv6;ViFQHjNX&Y~M!;h8l+v>DOgq_xg8I zm+y99+asp%pF%rUdj8Jo^pKUkDv`ZEzYZfNdisN?))DFZ0x&XgQ=52WL^T&EF4l|X% zDGus69_IJAG;{wozWj{|jDjT8TOfuU6G*+W9hr?6g*6_r*CiAql4ODZn{@HojY#OH zeQELokBL!V02RxPuiQ4o3GWxW#gVzH_ux!<4$PXD0wF#O zI}^BN&!RhIXmfqRhrR`Z{Q~}eP_ti!c{{L2ZzRnOgj+WHxm6{}Nc!ood663{g4%d4 zLd*dj2AC*jz-hGSXP{};TRZlBmCeFnGD)HUoXIoIj1sH|^zG>T3PCY|$6?~{xr*w! zKFD-b<$ZdkmlG(LWoxPVtV<#r+K)zky#9fM!Y(w$!`~{8@1_ZaM&~cUfjG1*a4FaK zz=svFumXMet8M(l&O?e;HYzA8K=n4@ncRl69YDV5!6m353z;5VFav%Rf78$V0t@uwf4eagwIS4wc+r zy>i_@aIsO!-B5?)Whq_g0;EXnY&n1@q$?C7f4UsTY8Mzpf#vWfJSv)o{ExVOBzW=s zJnw?)%tB8Yud*^HdFlLo7KY}`+9(~bawNZa`TRNWH{F?|-WFbEPfpWH`rtON9~c?0 zQ!uYGQ9$rlND{^8^mrmW(M04i=E67ALliZ_KU+mS!S4-Q1$Gj2-US!(4yM?05K-JI z?_Fz0qMf8Z87pzVmrRU5+1CRosgrNn*`EVd>=A*!ZdjMSXWUh9+8o(_2(Tgafo`|g z#b{UR!{61l?TxN4gNzbf`MD$Ak!MiWbh>c1Hc~lJ<@$Z0IgQzGq}J0GfE_<+p^RrS zxEo5^sx$7@EonR~&ENsqMDmo9HGz!FJQde?a!{{7=Jy*7Yq8Dd%ykDmb(prF$_rb% zq#3oY8%kvN?GW#_ReZ3OH^S?GIkt?u7+1dz&ONecI`k<4qn?LHNEvL+*-IY&ygqnZL+l3W3 z%&L_-SPor4F4=QEvr$>V9;%L~O&yy8W~%g>(t(A>moxD^qvB94HM<^JiQhSPsp>Z7 zdfFU5C+u>c;5{pSt3so`=;?g*uj};3-8!Y+*BmL&$Do#m@gO7yoim3LfUdPtU_PSV z+#KQ}H+>|~IMD3l8MGO?kO_~~_J6&!@TCrhCbzePL9Hcpt~Ty{VJ7z6ve&>iLo$|7 zl5fR88oh3W%DZ6pmwv3VCbIH&Qq6SPR=w=|6rM!h+CO^TIY73`zHcYC<1-0?TE1AT zp?v+<#OHzp3NL$SpzzmaX$#z`YhDWCNHr3g$fPL47L!%maY_1{pw`3D*^UgFya|Ka z3C^yOkEfi&-2>Le`GfAaQ``3g{jn{%Q z){br4Hg@c9v}4=0Z5un*j&0kvZJhZd?ui@sJm2%w5f#->SzR5KnU(47^g^kj?)UY1 zt)DDM@8IkxVdQr|(g(>KbqoIC=QHY?+Y<{fBGlzZtze0uEAn^UZr`dn?co z9W*Xo-Umf*tETEtr*qV>ehK5l#BOCFk|&UH>}sdU<>}Oke)7@TCFFJf9s#Pi%;vL` z3G?xY=#+!OH58pYZ|eK8@9T9R`k}!w!^>K4Tah?z+|nH{@O5*-$gX9JEtk4}Xso2N zoQX^LfC}vE($8rNfe>7G_DWHBHgBXmzQ_lSh?1S_n-VXagF2*wEb75ry1prZL)p?$ zvZ+7BK-Hwl*UH&W$uCq(#MD640LA>&0Jn!)=i^NRt>5sARFD5pVzyi$oC9ej4V3yi zcp_!3do#|9%$6~u!4i>E9*_~K^KWd*5WhPsJ-t-iZOD$-I0m?_mosmBT`$7|E0*@r zuQy+xoUhCCCnYG^oAFiO2yC~n-0!dJ=izg%@5vB+Uzwp{jwo#7-7NHKcY~e8?*ZEn zScVtdqrk^Qs;MjorEPS?$EWSA^|T}!=z01T6dkr;`*h)sU2OnKOcK$T*a4VN`6~lr zs%5jZkMTUQr>4rF>c9ABBdIAgo~XWv@Rj;D{axu6YB3_B|}zlDLD-be<+at zQ*cc2DKdk~%0L|%?|z{FqRW2s!d3V9V^5;{-p;thD^W9B6Gbto$kZhzTw?a$%+w5u z!bd8BR(8{&sN)whk0=X-M(BO5*c9lVU*kkBbvebWuN5YM@!1MG$^utZc;KB*yj}S= zcI9?HXk7-eR3DL65`=0!l80LrtF7U>MXRD^eidsgGb?9YTx`w5kZ%8Xz%=>$iJ`RmDj4;n&ntl zD=Znv0g_F6ZZegF`{3zyMUA61aq`1%q-3X*)UF_(5etmw)6$u-$n7;@&ffK#3z!XF z{rP=I6Y!j?f^-<-~`t3|1&Ma#j*RaaN5&x|}%_uxxG7TGPY%eRM- zhe*xpS!5L$ycwfRKG(c(H1Ej_=5|lWW3Q?nC)MfFe$2 zH5ZPRIzFbjm5ujZ$D0pUY5rk}WeM!PhVz1Mk$pX8xH^tQ-ffp{T4}Ux42A*L_LhU< z9;EhhCDTrx`#S4RK>EFJ4RcR{&^TU;k`2QLc5nd8)K)MT7^i!5h=Ea+t7W`0x9WRY ze|D9(zKaH~0owf1aQ^Drt=g|IM%7mZ3zpdPGU(5MG#89JTEG1ok>#0Z2 zLL^>V*{kkufnoVSECZ|iK&<^CUxlbgdxw!F1=#uQp#^TwfGgbam5II%p|2I;UHsS54cGLwx=EbjD(dEj5>1bZ zQ7T4xPkVjZ|Bufi*2fGb+9B#1*rJ3ATj9!c+ezGEc)|P zx19ny5jmK*^(bz-(7dH!(!$l>7pW2&>Lk!KN_Cx=B|2+0Z!L~0lbE$h^zYot=ME{DBk{rKgq*v-+teKT1z z6JEQ)@k-q3bW-`u+!KqyxgGS%5NEQ-e3FcZ^&b=F9*6hlD;5~q`rCR>9GAD&TGe<8wH$_UD;^1>Z*0M#EYZh%eiO%|H+YZ4gBxOi{zKIXs# z%jRCr)>A7&qPMdw9dPDl6&0b6IR0{4*Ngv53k={gbn118Gg?_&O^X>Ql~tQ6d#2X zLX9#*Bonqpgk@loxqR92(p6|9`U?!LL1&Cwv~2^=vsAuAQ+T3w8{LP){p#6{>xz}p zo8_$R-l~ES=Q8fG61WD8=b1;F?Vp({=g#33$aeJKbcpH`0|1QoF={FQi2%h8At)7d z1T#H$nv#PeVAeB~vbzmZIF(-)nsmmm7EL|t>TK4sfuz=xu*p?Atfl&mF1;19KsBNu zjtHtmwE8rq9fWr9d6`NXh|i2ny=V@9$xI-%VR2Y3>1d>8^xv>Wk@pljuvyL0c)<@jzZ%K`s*cnDQ{%LQS`&-&rt& zpZ23YOe*5BEk+bpg#bbOoR>G^lc8;d3`8 z@txJPuk*$QeY*@f8TgL$Mi@>3@)XQlFn;-$VPu=bG^6v7wfw+Yg+EOVcuTcls0O^S z2ZSFI8Bq@T^E?uUy908|3%Krex*x>bzlT|TE!_|_+Xtiwm!s;-A^)r4`Qu8Ur( zsj3Cw_wANyW&SHd8d4rOxgA|dy_S_Y0Y@yS`sfYtVVKAQzR&@d?Rtyw$!sj->DA|t zfj9c73bpj7YImzqY?aB5?VZD#_HJ~cu*-SjD*O~1A&9?BDn2Tbw7l!mxoqrU5GA6Z zSvf;+DktT-!ksqJ0Vq>QV`X?P>Vq&F9+l||zoNrQSM|rC<+~zb$z~C?u|`u%#1DlW z;uzN~%CrI^u|+UPI7U`Uz^q81+FqKrIBR1jIkAyTdTvd0T9gQ*aF`PkJZh!Lwa@hqt zkw2QjDB|T@ur~GHFJr7^jEe_5JOMjbAj+<#_wJ-$GOim5n7m6{j;$olbq2qUQX8bJ zvJITg;~qlA`vhH9Lk;~?4ObtU>)n%p~eHQ_E4i z9AYijIb}sEICYcb#aoa8@B!MwZs;n&lmEyNX%^z+_?tA4TW47!RS*=|q@Q=L>iJ^q z)yc2q$@;>`qV-OVNIY-aSEa|@gJR{;Nl1@moIOl#=6t**H~JenEesH%vn!naRvkJ@ zI{A2;)oXUq6_knoB9Zhr0#gw`<*z^Du)tw&vwU17$6#tVi_jef$II-Z)!YOOOsvec zQ~r1k?;UnE@4dp{9Hxm!qL0NRDFv+C0DsHzP=)o`9jrmd{28qTyhZ{FSkd!JGQvr@ z6tIla$Np&QE}j?LLA3?F4DfPQs)d7%rBH5fU~)Q&a*noHG|RN|j2)%%W+28B$80k` z_{#;fB9(`(VQn#7LoFSCeBstJTs*MNh&}H(iya%oYIsI~`)jcbgGrGm6L=+A?^}ob zn++5zx&ev^rR_vW!}t6Bws=f&)SB`mV+ zP;Fv&{^g`e%YfbQP&;?@oziU;cm>i+1x#MN)R~JcDyghYe{VBP7zQ(tK@&O1OJlN9 zvWMCVxM8HWGkd)HFDF;H7+Yw4O& z4dz6fsjjntBFNOzF7J@q^C+ng>q0;zn_+=IICZ1-7W8kywWU(qcCfiW5l+I2hqu}{ zK`|~({DYLt>{~8>y+Gx%A&b1cOYhi4w4c@Tmn=cn&Ixtu2 z$TBz8V|y;yJyR0(@=qV~0k7=#A1Hc@oTw-3g+xcyGw(^3Ey;uV%qUD1!C+RX-X~9B zk8d|MF7T`)IcYpL^-71(_+NCZt$*tqOU{MDYpTa8L_O_R(!jTWQZuVAIW#;+;J7&H zV({2!J01E9R(ed2Np2lYbI21W##j3tTf`!O)3P4=ei(NE=iEHQW&$`R1^#|?h|{8@ z|B4&4*x#h>>&Qw&U6oVvw5BQ`p1qE}>hfy3A@&p<>(vmh_u&-aKb{v{?!WTqhs-rc#5mr}$5u2Qn;<1Ex0{7xG7m9HqJE2pFRebI1t{=% zlVD1>=AaY`sqV^N?{Y(B8X|r#-_+{ZLnr9e2EZ z^K#zWjKGfdn;Tw!xtgm#xtZu!u)WrSiHYji3aXh*@fSl?&3R5N63|ia+h;7mRL|01 z)HuEwi9^*x`h)#yxZcgw_lS~1N;*7jpqe#NFzoQh>(!n zGFEtRvKVVBfHBTS^tj=zqTOXAUjb~LL+-PTYax!kw$Wr2_P?|Zv|gbx zlU`^ezr`+DJu`H|J_=;nSrQBM`Oj=2^Ls_dSjL;>GhTTAW%CW0TaWX- zc0Y9lrk2dvt~H$noT8;>o|h$&d>tPFSM&j~sq#iJ#J0jHAL1}_3|t7T7#e3?V?up7 zh407H%czi3qYj{66o!>8haT$#O+Z??|6&P)K)`i_zRl+GNn83+=(pGYcNJIP_a>H! zFECcNq8npg$1$l88S-oGlxfSLj?HeU=k^|tq`a+>IqB-V*PnvB(% zvyUzw+sAg|YSornj#arHV&aiMRmnJ&w&neCUvvIk@hvO=dDN{G0{Fxvh{A7n-&en^ z)~aL9H-^JQhyKTTrML+US2h|w!Z>xf5V0e?2h0ilP}V=Op=~@blI8(yM~7DZ@B<5x zCQ8$yLCT(vF8|SF;Ey)jY6~;y$9SH%8X?5tVTdcU2*=9Zg06ZOj2s9)FBY;P{~;%AOym#8c@O*L zG}wsM7mW}DHk;?C-I+1V`Vb_36dH#L63k%4vyIHeJ+(vcTxPB<%FGrwpoEi!8#E<- z6Y46BdtNhnBz}4^je&UGoH3gu5xy|uJo1g6zSogXx)aVWs>(}>>r-%_SyOv~)Wwc2 zTV9c2*r5QI$A4pQ`{2LGAg}{}^jjyI!Nm&#hWf~5f>#~1@wyzZ&{ga>7m^Z6)Q~ig z3BsV0qhT5H?3OsF#Flpu9>|x-F9ANEJAxt8+ow3|o+Av=TmNLxsvu@U3O;givH1Kv ze(#J!b-RBn7NrI^SbT(>Vc!8v!^^D#&v%pBC1s3reN`*~%~*xpw~+A>q#2_|4cE!u zHf{OLyKXR-CbGTLY~tW%6(;~D*FY_`rKJI$yezCpsA=WtNX%)Gz9Ufp+9M@2(8S*0GT1ND zF|qVs0Rx>{#T&S>V!=l+r$*t)=BK4JtFE_rt3OkuPUqWn3_C`KW}|WF&@z4>_$0MO z#nYKzU9IJcrJ^-eo59y^qf1?zG!f*_Z#E<-;Ou9whSVj*-I+@TJeeVl=hkOSu$I_* zt-bJR;67pASmvt@xIg!ios~;MHoKWf%3_-N8n}6v=;6~#mgS@4NSgHnyLX?g5V{@D zO&QzK?CxP-ri}*m7!G2GHE$Yc@$@+9SaZw$=P!6#anh%Ys@ieDucEleWf+Yc%@)7o zkF)Q*egbU)vx~oZ4Rtoj6q03SlXd@|lTFD_=#UAqs~x3urU3%WD-RfB68=fMaH4%8 zBE7zR!H3nK2k6fY3Hk}AWI|YqfA97IUvbRj7W82vFEZ@R(Z}Ph#qtf9YUFU&BaT@k zcr-&@UYFWpKXlGO+GPXa`^8uG-ox4aWda#Z7@a)0bQ&`5Z7ffH zrMS`Z&RMm~8zDmDQW4vrIs_q-hpB*iXJWWo$$DY!oG@*PeB<88(`H|(N3?|N)EAo5*EQ7dw_dxlp}^46uny8E(n6F!-n<70h|afD zRa3qhFK_Yr^ZODPyf9iD$cSzmV~{#D8VMto!zMMlS)sQizlZ%eRcst;W-i=Jat2w{ z$w2MICO!fJBgSC2CmK1>exeQFIqY^`uhMvrlhn+Uh%vs1=0X^GTA^oKV#$dC#c@G} zXSEHRmLoper>dm4EeXxpnIp%+VfESRjv@|ji6`A#VF`8%&4G*)B^X_r9q+M*UjCoQ z5_Y+%ZoJ2lSj6Xdg^u67g>x{GJNwQdijIKFt%%k}s63n-H$77weh&rl<~k0Mn=YHx z)NnMTBgG`XB9mX&Q&<|9;5X|}F{9`&f9VL916Y96*f5Rt zmR6jao`6mCfscwD0;m%z=yxn88$#vVooS?$Yuvj2-8O>-ak3Sz@hd^Sj0ZH{~+I zU#Vi7bh)est^#gJDkUPITm+mYGrIa3U3YPmUhD_IVcY{pTWRnzZX4vcyq2aGNTQfI zD(?Zm<#=O|Paxc26##3%b+U3k+jsa}MJ#(`)#SGC6mvl0OA71_qiGQ7<^u5<4f0Q@ z!R-x-By(2-|Kf*w>;IHdBF3)I&wKCn(N`lFcs9;!Ub+l@*Gd6CY4etO*ytXP%_kAW&5@{i^yAa+^cOy^n((AW;p?`ZSK@>32rMvs z`eJ-193xXAEpj4nzH3yc`RVp{Us{va;3AdlNCe;3%^owPx+AMTC1Xt>Mj?*KTJ2MH z9Fk!g5U6Jsh$N=VD+VzQe9P&yCh;pSSzS~Z%UJYjv8iNmVs5`{e~hgp?lNvaOMwpX z{p=BFehjcsT|x$;WwyOvr1CNIFL2I*CevXT_gWh=dT)$xJvIk#`#VZp5o zgc!-$hX!CYJeMprMK@<#Nkj21hVDw=nEE=!74s`_2>a*%S!gu+%eU21a1DwMRvJ$0>% z%or@S@YiH$3Wa5qa=r74Bic7@YXDcf>oV``dvr~0_=N9Ei3<&~V8%h#QQ2m1xQ~A& zvk}=v%wGIjb{g)fOrb)1G);>h=_PVz)vQrdy9cwU1w`l|<%LN8x^lrqH)qUkXUmI= z{PmcY$aV?kC4U4Y*lFNMlrN{7;|gyj&NK4!At)N9y~HZ@n?3N$MH8X&D$Dhj4$oTP z$WH-VB2@xUX_8O|D`@u{ubs}YiDPWfR(8Mo%L7D42Br-@DdBzaaE0l26`N5*+H)se z25wHPv95d+*OB{8nc$3IzUfPw@iz?RoW!f1k!`pG=q#sdkN<)FZB*8cPzdeUZQ+|n zW(eNCEn2qj_uP`vmg0YM-fa)<#<<}(?J24|k*ZxhsfO$;>K&J!mU*&hU!@L3!H*7I7f)3%*&x#pHh}6AqPPfoYqT3SQKh z+qLHW3K{5@03d^>3li%aaY~V;?h$W?o_RR^Mh!Z4g!(P%&)OS2<`neG3Vbvl!Y15-nhyWyZUxUKc z-{^WuivhKjP^2pEY_8li;Pff4Z=gxyY3AVp#4K7o|8-4Sfa(tgwl*r9muF?bhS=>* zy(E^JW%r3?|7-T|nagCORq*cdtp))ee+t@~$_ef190Rs`Zy5S0n8h>RSh&ZlBZ?)zyRemo- z2%KAH#fdZQ>ypUj36A*rIF#mLx?%=&0tH$lu%@!(NldT2)m4tF0Op`IF^|7kz480& zMb0A81k3c`U60R5Cm+VW7;xu`S{0V`s@B(A4}WB?0Oq|k?@07xXy&Ds&zFyGgg)l$ zpZ1V#d5^x2d{;9?!ima{-irfx+)49>vfZBR_N+;=5i|s$zq_D`wE#JTaqx3;h3;PK zc9=CN30CP;rD)y2i4D#BwKcXcoCv|pwT9+QE{leo1F zcmx6h{8MRAzFBEI|u`{1FzH0WuwLZBisWqKG>j zelyrMbLnsOOrO6g@R2Qka`h^gNv8VvCI|9=QXV~x<+*uDF;IUf5eD)e3kE>YsOKi< zdlkV+fMeZQW#i$|J5D_l)1|W#@1MdJgD72-DE%DSm~Te+w@^d{zq||IZ(R6^qfpxc z$a+x&Zbal2Y@a)gAjyRggTu+rg+Gh5)bX7#DB1(N2D4ouOrm2+z8_+hTottqcjzwS zT|}2W0an?xsFE2<*4XAo3P;MYkQ(rfEFi%6CZQuv!O#n2;TInLjw98lYNb6%PGTlx zUmvw0j2ZVohcmN`=SN~TT#lNQLk$M)hKL?+zs)UBVuxf;>gRStnrc;h13o*4wY9`; z*n!OP!|aiLkZhlchPEWR=D*S*c<+$R+Xu`E=W7GRRIB42?Le;89K;9s{AVhhRZ>6M zA!|kjAgSq~wDxh~t%GG49|ehm#>Da!JK$IbxAzJhnUfXnK2AlT-uNkxvmH5X64V5> zxAqA&V})Mr|H_vGXvphbC*viRIDx?^Toqz`C^CYdzCOkmMz=z;(ZU`gFi&o-Jt5W# zQz7~#-ypsKab<5_01wDgIATgnuy}9{Qz{&G){d)?vR?hPwH9Bbr(E@kUJ_j!k1#wa z*GvXb{TCHy5(#dNPFkhBa=57w9dB^vB%yx?Vo5kjmQn%cJVFQ`DKF?Q@X;k@wcmjPtj08N4fQ7MeWR)5cbA73@sx>ruhj<& zdbX3m{H>Zly&;8B&a%i4qsn!Q69eB4KD90NM8FIxFnXn8Bj9quA7 z-H(e!ssMv0Bf%FruM%5G;cqSHtdK?$n8x(6H$X}B=LnaJ-=vUD;2LAnLnXlOaI#C7}Tj z6o=1DBOZnvzEHPfZLEXuA~73&pVZ?d1NMpys71-H~PROI%gL$ zhMzcVT6n>X*{hbx4x3NPG4*fWZn~jXLmwxU^wm&lyP@r6Ej_-2cJ_la%S%)b8 zPySyCX1fm3P_nP|SaC{KlHw*) ze>g=+xpnjc--imR=K|k`UsLoE za%whCK1+uG)_9E%Ri6}X8!|tt8ReLYuxFFoBYIoAsd^pe$~J1LM=Q@N&4^}<8jND- zI<{nw9}}qZm3>x>pYgg(KX?Rc9o`r+Y)bp8KQZA+6^RynTN3r;ILL#+=U1kbKU7&k zI>ufL}JQPC2)`;%rnoX@e)wFebE` zR~<*jQ#;=uLF|{UeaAZ^6w%=l9@$AI#~^}0rS?Roy;;_6MJf;#jq0z~F|xy4Fm@JV zByPLhWw_IgMQS~%fULklN}6@D>VC`p-v0(xlmP`p0|Ekq0x~K`Rt>9_ny>=~0%`;S z0@D5&HSjQTbJ91kbkw(VFmW+Aab<8Zu`#xFFfrD5G`4hPFz|48FwwU*wRZaN3ICbQ z;KIzv%&gDIq0h+t-{TC{w#Ft_jtu&C22Mt1^mgvqN<6mfj7VGHCjwrzq2wZkn}VUl zLjE9=OLS0Z8Qj`cRQUZoT&h0av1*%KC(+L@dM$&;h$`z=_S5cEyPVWEA9VPE476T~ z=cyBe<~vU6&pu!ZQf56_5Y#jAH!q*ZP2QTXSciWa{^g3f!(0cEkTIhKKJp@oQ=?Z{ zciBgMK;*#c9q%XH3dZ0^aJ4rJa>;&0(P-&>8b8I zVta?duP%h0-X#@>XjQ=E>HZRqOyzFGBc00Dp};%Umc0F#W;j~foBfkVJprU@Xc;fE z8pUcsB4L)i&ewNZAXx<$97G<0+=Pb=rwL7I~G1%Iu8Q;W~P>G=H)^Qu$Zg zo~^hbu_wjg%lUOiW2ri(NU@^wgF5->iyohRw{Mpn*FXLT&>Mwwa+W_J>p}g1{Qnnd zTRRg611ED^n;)?C&27w`^!0z>{+rxugTsUraxK}>FNp`Dx~n6$C#a|`24eyCPb}W# zVs$Wjx!H;V-d5ie9+vb^Kapp{ai;H31IrUo+L3Vb{2Jyy!RHpxkp7cc(?50|nz86m zBHUhK#>#AZuay>Y?XzGt)HEq*_=BDTk#;fu@F~QAe20;IwV(84_`bcb(^@`%bi?)= zTl^pkETcz#WBjTmd>CsXa`Kh_3TYu_2fTdIV4`>=lTIEfyH>p3swa=|DT*6ckS4h< z+zM$Y#o1qsS{!Gx+PI)K_989BU?ma#0?6_$;&I$i;RT~{VtmL7>*Bdy&X@0DomuZmBLAn_@iS@Hy=@x zP@%13sD(`vRFegdOgJpnLlM?x3_^p^2*^f;)E`B#ntbFR$2mC!y9m})3pCK#m6qeR zB9BCNANfINw|k-o5_jMee=aTJ|BnINw1lYx$iaDcHj1Hzv+BO0eM%=Fh-PZ zI&g8Osq6JEGt88AE}X>w+|qu@AV>S50s%Qq0|D9n@2zwLQxlt?P0-fX%2EISegQuV z|B}zrcAc|%8}>l}DF@sN(TZ#mqun*?eDKfulvQ0eyCjRJKfHsgW{I`6u@sH86rUqc z_h(LjsHjxZ1?kjy3O{LzBz{8Z@#yfbE2-A2UR>13g3;7K={_l3s0@V${4R?LgT9x< zhTR$Xy?w?+$anB{|6e|+OF68+hPGXjlGB%oxqKW5nw&B_o_N7^iEajfc%y9!UQ`k$ z6V|Q*Wms6>8yy@*ZZdPmVkRk!q>qm;S?}f%Q|X4(154o!zvJ+|A0a?a5-$WgJ(%fM z3|}&|rMOIm)kb_8 z25VU3Hi$lp29eq&fa>2#Npo?%! z;G$oLy%&L$f#8;h4Kv|2su_^)HyY6&JYT^nHRR7yRKyVmU@vSzNX@&u;GloTOnahz zAF@W%x1IXtStfQqaz+-w%w=NTZAl^~)Ze({BF(PFb*HS3JZ6qUd zhZJt`^DD*IT^_Us#jyna2g68`B0hTD@p8AOP1x})%QHZHdO4hq+-$}VKm1mHea?vM zV$~ap8VV2aez37-Cr^k&{1lC9DE~ElCrW_cp01K7466!dLl#3~ zTb%&^XL{^nY!<9#gw%kBd`F{%Omh(bG4eUg}v6)oG_69kNu%Ykp`_ z?;tNSjN4p^4kQyZr?SorHZOk`kg*RlMY-Is}q^O-(l)yxfq1v z34Re!T^&YJWyedMy(+J#3r<@TfWgaLFct{kQNumxbrIgwI`wU=?0YwKo`wPLMSs(3 zPUQ?6;H>&L6b&6XfY@QPGQo&+Cp>&Ur!LF$nvz_+j$?W=e?-a;ki?JcDMA_x1lnMm z*HHKYEsA!=Osr$aZFfCFM{#~60*EPGQZj{*HDv^iU5OFHsQ!RVYvos`%>61mt1mLh zS>WR4<;KDPa(8oMjWYB&oIRKCRv2-mtOO4*)}^mUR4G&>%=>je4K)%@tPe92=-a?} zVmv82i2;;{<}}MtN0QB59W^>V%SCfDw!lSzNDOd zXyfz9MqFZ41Di;TAqOzGNOc`w0r?x-rvoBZ>Dt}ysKz^fX=AA`Q{l&0a3P5pmAwG(I9D5+G`kP0-9X7C= zE-4yye$x;i7(uV)y?(Z?w%z>JEVb>?P(XQy1>F}ko~#rzu0w-)ppb2|L?qn)u-svQ zSbeGB^AFKF7R52jx6!t~-{{rXaUCd$&f5^fp98TkO&H%Sdw5SpML?=_$JFxe&u=ya zEz~^cAnm~o>LWEKT=a&8F1foVdECm7uzC?no{4b;vDLN|wna!eYw3{Y!ZcqCy^nQQ zg01XM&#dqx){J4r35ased#^Ql-j=r~&C_*IsUC^|pH<+vmc+Nqm<%<<>qvYb>57Y4 z4B2d&;r(|tYwIAg3XS&l5>?&Uk~TDhKQc()Nh+%qWt(bBf0^B5#zeV9g`j*p$ZDH~ z=jPKEt6f6B)w1IEgTlnXcl`Ron&w3tz4N3lSt5-Nn!%Ori zm_H38ND<4k+X26ym4tkKLVbNXy?DQd9{C!87Q7@&B881b2KGGLy#@H1P{Hlo^`S4Qn!g>pI42i_8*73;#HD@t65R&Nio{V1y&nNvRWhO%TOQQn& zw3~a`PoiBB9I=5m?AYy;4uP9Si|;*pn&nOO5>9~I#JUicdxv+#DG)-{RX7W9wCrj2 zjCx}sbjR}-V#n}?PuD{#&Vofk$pJpS#dC)U0<7-Aks6QQJ2pA494B6KA(=tZoscQj zD+gmiu-N+0gmoCB6Dw12+Jdsu;Hd*EoMsDJ4(`V^ULd{b!-obe0%c6cKgnhw$My$) z_P=}q_nwLDz|=x2R-wNaFdgC0)W!`atpMQ9ycp<&r#{TkQ4(#VXfg@k`O*m72PZdd(85i*f}+qGGg!uwP$XPpB2h=^ zWUv&w#KfVUc3A0(IFkM{rMw{isA2Zw!pM0`I(Noc#!Y9e3PN7OgFmm|Yi%H1a450? zeC+aBWxSC92Lq*m0~7%`1}U8KT3B^_YLp8G0&|oIJ4komI*QaJVc@(<8OdpypJ0Z8 zQl{IyedcBmW1oF6`p44+;$eVVW~LvBJ!s)pMGvnu~b_SAtfvo*w*v`&2i#-=w!FHhy@W&*)jyjt-4U_8{jRiuDA##H15*4Oy zBGd5MVUyC*Bp!m|x+?&h<0%VhLCqg4%^es{!GS4vOa~VRX#h@?mzPC$V3+yASe=l^ zoiAGh*$3AqT$96gb?M<8rKDBMjFd!hY+Z61b$??65DP&1VJr{M1(R|ZtcWZdAsAB$ z-vK$kNYq_QHv2FQ5`l^g{Z}!}UcICrS0U~X=^?e zS@bCQBAj^&&`d56HaOFW*?Z`%+sOfhb3Vi?(5=j6#bb=J9gW38CW1V^(v6u`$~Slc zr5hZ)Ej?Bthx73A7h~FjYL5G!R;pEd@IohTyQhU#Z_f35PM};d(U8E|wjzh8;lp1A z_^uXk#*WICs);1s>cW|tnz9Y|xC+2*ice3``%Cp!^|YBqQCrcb=Z0l{l(WF@eurMD zCW74o754$-OvCb0_5ti-?}Xzj(nF1#WC!`jIkEcB)3F#%x-USqBh&L;jKYwQ{WL`V+s#cJ3^$Bd4asBt`w-|b-_ zd`$AX{562sv%T54E%&&7QJL|=WzdVc$5HsIy%^nhyx!uyUVP&7@TZkeL>E2Ot4g71 z7?Xh!n%&Rq*-EBL2{7~#)%OitF%z%Bf1f#+2gSLXF77@Q1`L96xIITtxo)=YT*_RP zLw1XdD`PWldPSd2U41-xznGqTH_s!rWQDBQHC5t7D)4!BH-eX$FV{WU{Hiqk|ln*QB^xC!})-7^d+zZ`JI*_8K%w%`hC9mK1_jdM8oj$0Zmo=%~2iCj4FN2wq%) zK=C222?ny=U~pe3rA7_feEXzff|Gkr+Jfk*>$`+nIBnk%F3w%=~6fgcc_r^y0W#R zw-JtszBk~6^4H%%3YTi@(U){YEspYkqvVzASK;leKCPLPHg>;9lfE@Fv6uz7+)_77 z8i;snriZ#3vSfeVIoINRa0mD<>fl=SYqx{jUa}XqK`YDuF4@$=k{?V7ExlxvD_~vi zyJ~6bDn|J0g1R2fCo8gBAFH{Od$DFY6f9K^9nsLh7wpF4SwpA=kzsGV5}6T>+plPI zH^`_|I2w!t3UQ-yg3Ylgp7}`Lj?%e&eU20jM6ISNM4WC4%Y5G}Y_wP%ApnXIi5?qS z!&apY#yyq!!-Hle>%Hlmc==6&<(P|Be)+pAI*F!qPaZ~1#8d=>} z_0msfg~g{KI~NC5cjQO_qSp04{H8+;*jy}`YBsr?QVVaRQ*(`ZYxOO4~o#n^QRk+D`hQOR<-4#p~5FYZ(JPvk3Ew1H;n zZ#IrW6j(IbblX_udw7Py!F#1=GU9e=zmwt_X9f~Q82Oq1JrRmT*lz-T6Qa!^^8=?o zT0^9MME5tbmNwotO=&|_T!AVFz*6}mSHHi}BrS;0-t#1K2`P7^A z1slV}5e84E|LC)=#?gyxsJ<_#)<)kpYvPC*M7geikYvwr?pWGZa5xm`>$_IgZ3`$%cd_=3-G6b6L9ugl zriIWqq^#Dq@80=o|ACw$;~DXTXZZQ;em8V`)w!>yP{NlArsJErnWCKWGc;>sV|Q^B zUX4APpF8nJC@AKSO4z|tTbuC(F0r&$nko`i;BrE8{8QEAQ&?4P4ZPhBi&#Q8)Aj%5 z3Qlc!Q0@+z$#kOp0I$-|qCFV(1Y;;Q>AChp^Yqh^?m zi~85A!4-f;?~SWtk|s4T2*eDB$Z0B)x|io~q1G|CRZh}nc(8e8)`KPaJD(t*&S4uV z*lU|%zO%Z=gQ~8{euq&q$U2cg+xla^@gu3*y@5Qmdgz7-TsGLmQV_Ilm`);E{7}(F zxf&$_@3#qC9Z0dBXXVNry|>^q819CVTLFGlDQP!DKau!k5RyboX@=K);J>3VMPfd* z3Yg~-2o;m2pjbLs{?SJjbuV$41k&~9$LX$yjxwI2g?t6GLk||Qp1fn|#4swJPy75+ zK30tF&so!fji#Iy({@$%zaMEcWkFf}eU|tu5v*x?JK=IFfmLwND*5OeOovU*oM*45 zM?M7pUxB09Ws4#R2?*%c9SF$be~%6PV`XCEq;G9vZD``~Kl#94x{m9uw|p#Lh*-L& zq$Z@|_VaoQELP{_@)_p*yfHP1kF9W|Ld>WU#zJ#338SA+S0IE?ad~7s&5kjHkTL_q z^tCIx7xWl+3Z%MX23fJAv=b+!hCVr@{bbSVB9wntrvh_FSkr@V`xx$CZx~+qJDMT$ z`Q+x%5iv`-PUYSYoH-ArQYIWJkInnc@yY8Xo(jUk#Ibj2jea<2-ir_Fta?r(mfr&` zLsC9tBj>3SCUp{9OeOkv3S7`ev*d@PknEGt3JF;gsPe?C5I@Fls`#TGtf{Pq7@ldfHTY{gDvpRBr|I4gj|19D4ekuwX8E7ReqoPq8TxVaaV&Rw!dT zG>H<3U*A8hU9{a`PVMN;cAK?n_j=M->fk}LU6iow#7;LhLIra)A{w}n2D=Qzk#Rf- z!maHRNo*YWky&b!?-DOTpXhvJAk>MwY)F_R=6y+2@cUo;MA3cIQRfg3j=kxS0|5MY zRud2lwPs(OVA?7F`qCR@`9Z@A#~h$~-y?UJ1NnS5WwDzKG_SEIfnd#?MVM{U*LyGx z5p)J~9LA3|JaK7E2yDR6IA|MyMWUb4gc93i9`sQUp|UeH)e*ZK42Ok}lh}ZQHtK+qP}nwr$(SE!(zj z&Fy)5)8DLnHu)1WPsE9Mlk<2@9U-elPN28=4j1?yoFavs`~vtCwR@A_yW{oZ*zW}% zP=!>lr&r}vCWHi3gTrV5lO+REBam*^A{eLbQGfKrSTT5>CfyNCl1$uPzL@!|^aRcd z@>0BLX9gHZPF1>*5`N?=(4LKqLqKCBWeyZN7sUc$k(9aW6w$~->O7H_Jer*fzj78{ z11XL=v2yt_*JyXO@Dft`LI#O>8E}Q(ti1wo;wsY~ub)d+4%XiPws@W*v<+61&-?8@ z`$3e9;hN_xXBb*JN&$5|0-W1cUq9MR{|^-}`-oyg&J_puaeI@z_+} zco7Q$GPIQNj(e7b8Y8DuOvX*Va8YHbva*SLV;eWt7cbT|jMB`Eko)%OGx#fbGeTR) ziZD=HG9+TETFBaRr}3ep8V7GevbY^`R}+!7it+-f-vD?6d4$6_vov8t29HqKg+

T4pr^?T?L=@UPSJeet_NQ^S0aVuZ@3yVTZpzcE~#Zy)r{}l0F41 zyx61|lKX`fijyYv=zR!De7Equr@Y-%#BOX;h?i-W(>q3Bc=?9cyc!F$7QrCw5d1i_X7|a)3Ecw*cxz1t>@65@ji@%%Q<|e-T24j z>FDC*934QXZ*SkpDj#+3Xm-ALGI)uaM@|XPh^&fa=1YuGO{eJK*jDrSu{*9uov-i!xFrp`+o@(71FdAMTD*i zu&Gtf{BhL=Eaji0M>DMjKL8zgj?637w`d=m_n|F7Y$149kcQQw)pC6Xm%zY*_1HPE zr7i}_+pe*wPvEMe?v|#-A!iFFzVMNg{+9tKk_W;nZCWIAw<1TQxrTKr#omfm-rWn8 z`r_Gt!C@@Bc?&OA1SsIEfXFPu;DaI+NI#lPUx(*FrnARA6pRHN%6sHo4jB8O6C?5n zeG1k=a$JWrD^U}^!Gr@l6L5U8t^0;WIeqS#2z=2Vl0mgTkimUy@gyUBamFmP%9ibl zQIms?NrMLvGMyVJv3t-;)sIT<2b6mf?ea%|IT;2YKuJ?j7t5(+EoH54;SYQ0o(JQ; zigy>zci>yYwR>nR6SY#0=YZT*lb54aKib4PI@tXfNsr#!vJU3X+uAD+i%h~+XgSRB zw!EvpUu*1|Wr{(94Y z2Dg@09^JJ@T)11rMER{z zi~MP)8Oyu6E~~^8>+}9mCjNXNnEX^dDwhra=D?k*QibkvRH13U4pS)D&9vV zezc)KoE$O7tUydE4R^Z8hzad8v7T_r6|5EKQSPqh)!2xMW&B7$>F@D~u&(OV4M$G5HWYS(^DAE?%a|*%dBC z(#Tt^>6i@y1e(ZIfF0t8^W3>*$|Av_YTehPC-E*hA`K`6vIb(XIFa#)M#jYyqq{bF z!b3p5a!)`#;*CEUKU5A*$Re-c!PqM32PI;eM0X-d8}~^YmmM2{pHwb?mI5;c|B92lrC^ehba-A$7cZCGS4l`V%Uru|_t9QHA05Tb51jf0A^*jF zgzNiA(z@{fN0*=ZF(+HG&byYl)#VbifYn|-d2~b(eFSYDVVihw^pWHOZ6V~!62_4|!I3euz_ke47we_!ZGz7enJJXS_l3#bb5rYNpT-sTG`XV<&*Jn@vtq{1Y<^a99) zT~LEp5E5Frl!pRHXy9Tzo%+M`^A~R( z0Zv!@3aGS-#RHIk5((M8n4cI4GdA3WIm3Q^axuFco{}_^>OlS?nsyIKA!mDsRMn)V zP_TsE5${0fv9v}yWeiT0^nj_EYGxwKZGB3QlbyY3-jC2WS%V&K(nQ?FOZtFw-k}tn zY-yHb{EhdL6Zc9Zd9tR!Vwr(=nx#wT`aj_zCYt~HRDgsvF%3DQc9?uJY!xY(2=&fNxOxoq0lN_m5Ogkw%)=Vh06K zS`!pho|lFSpxPEo@`RCZ=0;n8>xFi+g^pe7Ev*y)%&1pQ)SHP0``U~K%}q#D*tOkE zFr_LNy)z zp<7#NXa8nbmPKFLRq^^W5*VOd{sax;MW5_mQ+mN4=pN+aH&S4kV{Q+82Yc^rl#nZ; z^7v{~vc+!p0!<|W+K3jLbWXQ9%rR0>Mgpycn1fD#f}* z94rN_a}^f_a~9>7Lz3yD2a>~=Q}5!uXZ8aV3zXF^$zFgKjcb53AtGwbL*G3~6v(TB z0&i$93q`xJY5qO@TxK1+g&7%jT9quALH5^*O^^qiC$gW=;+l z<0A-Pyg>JXsHlsS(5}d;*mNvVima$tKp2?gqbJ_f-PP_{t<%c0o9jDf&|1*_rDDle z9?J9V-}W`)9&W9y*naKfFzmrKg)BDW-KC{}-MFS~Ee4v~murm6b-1+}oNFssjnLK_ z{M>ktDtmh|Ic?Gon%2*v8?%sCnkYm3PR_;Ee(soWcePIy16~FGgi18~gRfWoTn6wa zx*D$67tH(W(9vkEeA@W@C-m+#7H+ay1xGxtB;-yCIxSKm6yBjj9E%hx)(Pxt?Vfah zacb&1hsx=Pk2NYfhZ6P3D41W{fm#SZFnBM0zz|A{-vueOM_e6=+d&rRaW^}WgDS|G z)=#FBA8_`h$C-Qu5^op7B{dKnPKucYNGAMah z5RIlN%wNp-D2$1@X^3m=>7_OR9&LdnxVPX{VJQYc_G>(u1f`p-HJ9W;v?x1 z7tv8kc2gJwDoX+9`$c6Y45GAu+O{ndkYvkY8YJ5?o);rbw|_>Bgq2oKC(zQ_@bu@| z$!O}onOwY_o)1T3|6)9yTwcJBlVc0dSm=mzI3n}MOz?_{s4IseirUW^9ioRU7sFwv z|37K{b%6Y7&oXuyxZ0lcJe;TRG(R308#d_X3|a?AOYeh)&_A}C_Hzi=P>eOrros&h znWSJI9|5M)XkH5O0&l~JVPsr!!0>(2EfGAd(CxRHEOa@&{NZdoqg$Ig$d7ddUVofFKP%|@8T%+J`m)8Vj4FkwHoQm-aD6n$(Yjyy%O-lNBeS; z7R?>%QUx@fgB$dBetvo~8j@=&UkqpCH^ZOl2|r4nqQ@G5H0$X@LdKTZ=;Zi90;Bb| z8!EKYekz!-uNsJUYPt8Gwv%HCld0g^kn^w*G1RC)h<<8dF|67T3DKM3Z1fW$W}+`h zxQsq`v+T+F_{^VwjxS!HfVKh6{q*Q;J6lKT5p$b60ywWf4ePFU`zY+Y+ReW>3%3y! z{QKi*^6Jq^31OO}3&5u!Al})dkPUDAUyN8NISfZ5fBNDd{(oIgW@G=S@#*>a!XKXv ze>fc7Wx~vc2oB7zb`L;#{SFk&##A$~e%KvuCQ$YjSJwu~7y98WUPmzO_`{o~>ErynN6 zi{pBJSqJpq%Zv<3J1D4@b3|$2)7X|nE_$Sc{_v3#6glQgpljo(%si~Hj#e6Ry7{*U}-$bon2cH85US?xS$9QF~dN@Qgl3v$O-8p z!HmmF#{J#5%yQ%{fp_QIy(-D*zWut|W1hsLF4%@usE>8i(mQ6b9?d-+fjt8?4Z5#? zVy5S53zCkeh7dOE+9lO=F*Tf?CJSiS(rHAf%_y@WDK?>^9b~hEPUtKgw8mZA#~yUH zH_4Eoz3Z%Cx4d{tZ5fpxz-9%1*dXqDlWJ~8gWO((fpI!YE(BmvaVx#IB5e59a zI1RJAqB4tY25=r5hvyiG=*b~FC|VzJPa9iL0@o9 zUPi-HmSeC_11vSYtVuM>f~wR%S;9l{u3^r|D?l5@O%_o?Tq5?p%IUx;iSsOfJYkUT z;g_$}`jjCCm!MV;Ni1R13~F12PkdATVYkAu0sG9)&Lm~rr+Biiu%pEE(Q4@D%YrT= zSrOA2k&Ah)U-evT@``X99UIVbB#5FEO$F~V!cy;7LS4zA`9t!MgK@+#Vo8wF*&f00~_5NMm#kX%ZYk} z|A?$xt{S3%QIYN#H5H|uOsm_~mOo6h$t4}O7Zv~gN}WNa85@1^i+$9#1Syh~0l}}) zdumr&=h1B(-SrK2;D?y+EFf^wWCFle&S_blCSDQN#Z8gq{u(bx5}HAOkbI*Fd9Jny zrI_d{wJ|1$@dveC8L1UL2k-0lEse9)uZGcT97<_hE^m9@Gacmv{ZD(jtxwZRqA_rA zz#>)aD?QMm4V=T>Be$a?xuZI9)C#Q`!XD{vO-G_fZJg@$nGYf#c}+y5`uc~8H^0e- z`=~n;F%PR7ikd&?&_)@5a2lhexm^bOT#*o$N-^rtK6J+Qj`7gNR& zjwHAO0;*)XzrWr*=Hog{ffm*O0E(%Db=-TyR2y@s0eW}$?1OfH0e{yicVc2qEl-lE z)a#rCJCHxSwMgW9B)s{uH9qdvc$oCnU<-A;|FSh28^~iQEDg4i->XjYDR?c(JOT{y zFy+M2D1#Ed3FU-O2@SnxAA~xhP1u8LB460;7k2wcWVem)hJ09d`$cO1Jf!wTwn;<3 z1jI(Ap7fa#M(BTkUXt)1dy6w>t9m(84d(c!rp#-z%>H|9k}RKq3TEY+b%*15TVs}@ z8}Gx%uReT~t+u(-xj{<&&+eBE`^$#?FTG(OWJLT;EQArw0|!&F&R{n$nu5;lp7#lU z*pyd<38hhqo}#eKky%CQ9EeduRC_U&I+P*}*2Q%u{MH+PxW-X8I9p=jUM2moTbyz_ z%?YO3G@CGac6{cuUhB@pgEV$|F_nSa1&%+CD2=)i*e)~G+2@o^)*jLyukx4@pCBUB z^=ZT|ognw-)WNJ4{Is%ZzV!LDv#ZvWHyzFE$DO7N!&G=9)l`{E`%2p!fVqw%6%z`E zSkJ2eizI1(V@QRh5<4xJ0z+3R8G4&-Jk(sj7oxqs?sjk#)C{&PTPOaOz;*ymbap3c3PqnoC9T?! zVW0tjUB$@_B)^%!B%Ym1PdxjrLGg$oHmx9#Q|~R#pQdt_c$x@Y;@MyFQpRBs!5Rr& zk0NG$5vzU!u}Yz3w_N3tq+BcK;Y6z6R8Z1~*H~hz^3H~$lh)rO$xwP94TP!cXdX_g z63^$z31bFXe|A!tNuu?C)cD7i)5;uoq%fGz(LzTqa;qXl&F^ur zDNf|{*bM=X+&Iup@*XfYF@ZJ&9y#cqhpC>{fNHR@m-}l78k1y}61U|&0U!erK_&`S0UKs1>oEWT zhKd0IE|X!F6_=1~2poUyeQR^%Hj?1?iSU2mR!3Y*8>O+_{_-l= zFXj(rdUag~Tk&@AE{)5gDlTjIzML0jRHsEg3HGuqV2!GvOsapRyiKMP?EFg_CwY}j zgGD|~%AmeZf_Fz}^6N=(nk3C1^?e(qzc5hr|{n_c^}P^Y97T&+a%4eWSfIDuE#LN3jY6i zj(A7eI5=BCNBDmaK>HY#GMfo(G71KqQRFf#KCShFU zRox)5_03-b_#7lLE=ExvMrHPJc%RmX_i@4o92+g(71IR1+wM2ob&}1K(i|?nPU4#| zt-@KAhHZBCo@C6FzQ3-^BufrVv8`ecwFl^YLqG^8>T_#~x+_Anr@wtt%bc)k3 zQA+OXGK%Yv^$M#55vY@CSk)!0NACgPi|7iviAjZ1Nj77+y|<_Dc+-8}a=*xHz+vqA zxl90^W)WP?aB;HA_3H@|m9dng!TEe@j6%)2Oyp$te%t3XsD3FTkWjMmB>D~hnUtkX zgz{=JOY(pEyaF5!v4KGBC}-;=fBzU|3+?xJi+T}d$f!u?^fr+#)kYtZ|6HVH(m;8a zRuwFz+T=XH$&0&Oenn4Ku5+c#I!ndG=^mhfF4L?P^$$r^EXp`RiKTli>NJzBuaY{% z?%_Wx6l>P}CXeEqNmg8`jo{C#hUmNnj64HDX*GWc{~~+{RRsZz7DhK!I4_giG`Vvq zh5h6Ar)S~b-_JiBhHnr5_Hpn0m$UHw;n}C-4{yW0{r$t!)9~cO(Z{{B!|{L~=Rf{( zw69UyLdVb=I9Dl9RUXZ&>!J=X9@>AWQ#Y&(IP)UPqC8F-{)?G3v7bWuTPPN77$iZe z1rvW98ekArLFjAXr^UROrc+?ww0OQ)62v#J=S7kE^xX+>yoYU1pzYptO6W7Q6{(WG`3q+s?s-R?*MV9p+#_nm4b(CMhcA=6ynOyA6=O2m% zGk;D-@pS5xmxJUoVLOq&aw0p7m`*~iG=Ip_ynYi*(+c&{Ze0{Rm&x7Ed~pH0lpXMS zuZt;Yt2m3QN>PZEpSR`k|F++7bvl0lyTj=4k+HT!Gt-Z4d~@3Uo1$a9-q7q;y>b5r-b6RWL=TeFjQ&8eBZ!ZjL!V zAu8iZgBAY=Sgs%p(>$%iaH~qP%W)9Trf)2-a;$@Sqq$RZu53fF0Iy+dd(wXZ1#m{^ z?Y8x+;JV0gF>!|orY>mAY?)-}`wNmO@Bv2vu31q**4^NJktdRR{|`(rpi)1y6D2ya zId2C$|Hs@4DpLYt{WYn5=rv0wmrY<4!Mazt`h2;~F@oX(_sBr6=2?1^w8Q*^n9YC0*lQGxaS*cb4-L~dWl}H7{EfX0R;J$mkzV?!4}6E@ zSLlWxdYyj%qqEiLQP*5XzXBwNP*=-U25a`H~UN)*$`Xzy2%HPLUYCWFDAY z$@x{6*y!52OZ*@OTGI}?4367BrNU@7WXf-4bl1iasyE&HVf^rkyy<_?yh?}0<7G5> zV+BgEO%Eld;W`#*j1B0T_F|eGlrIx*Cl$JUVvSFbH5Ay_2Zwp@8}*Tu?iDwoH09`a%bd+h)# zs6r!xT!}8CcWHec-YkDEl02z}xt+!1fNucxy&mdvlms9&L2-Ii!AoNYsH0XvGANMs;MC+Q4mOdJ>y zeI(qnJ29&5?C{}sV7MJQ+zt-6qpVaZATz&@bwDpxV@MYM2u6-!?yiCH7KlyoR)7_> z3pnkFj@xq8Q9^%F+3*MpkGr)h6^+s7ss@)A{_odLAuBF0Uco(cgcRkq@bE9hBy>r7 zU({fsj`C}8{88YTD1g3!EsER}?1-2Sf-jSKhOQzu18Bh5uv0;KUL+LUv+J}Hq5w@B zVMe*f-G;Ttz)vFpQ<%9!0QvXUBghry=_?e82bZP#sjIJvvsx zz*x(&O?UY`;$tzx!T;%M=sw1m?eE)zAF4L=)mDr)sXMTX> zjS`KS@-dk0xaBOi-nfX?VD6Q~gR1hOW8eVf&!hKV0Rf^ZL!l^B5Gybn9G7{d?o(nJ ziI*KMJR5&E$Jv6%+vibzEgkK~Aw#y<8d*I?nlC0TE(%`>k~Ck`ngaI>XzNpypQ4)J zkCU{*hFhNgrb1?%!&IpA6vd@KfB!>@FY6ev=rOJmlW4X*MD;ouP53FD15O8p=}z0E z&h&y5Zd-Fy;-wNv7iYL0vv@!y*J* zZa9QsTY)9krZFV^fE>O;Urz)u>`jNhWkNSb+mcQ8KOF9z9ok~YI&;@b{(EBcoDdLV z2Sb07P^uFOmQJb~t!F#eX_4@e@&r`f^dXOCX^grKb{6_JzoV;AO1s{#)DQ z_FHWp+Ar#SERU@PX4qI0F{dTnKRWmT+9Q9zN`#jtBahYM0z62EXVie-l)Y>w=CFOu z@4C&)QJ-Y#ZwU>_f1zTlX*v#Wl4Ks{FtOdUa*<%ngPmxG4Ef#9ziOjCh6XW|0I{!f z{WfVS;8qkCy?t<=TuE4%NO{o3XdNYH_%oj zUiwQ{Wt8J2`1t@;%!I5slsz5HykzwcO>d60EIK?sYr)@>BxC}eFhA;;Z@syEl|BYM z@Wao#96d&8y&|=f=Yj)@aT8@jbhs8w}X753H?P|yMKun%F^sUBD*+8jg^4r6FIdUeBRn* zBN31BDvc1CU$3 z#6ye2NkbyO(9PBRC#eGRGbal-T8(V?&zA>0mkcD^hd9Nkl8&OPCbwOm0*T1L7ZEN&V< z-0hJNo*}RnZ&vOQ0Cx88ur}xMsG$2@H8SCmt)bD8gJg8NOWYlLp4_z)FU6zomKH+e z>Bbf+ugF$d{1mc$uy-|;Y50za?B0-1{T)Xcec0px z)3kxti4|@%BLjP{34N)eLG&2*(Y_Vuz|Rq#1FuR)DpcyZch)wjq%leh2h-Fb95!@7~=i!1~$3q)iq#0y@ZqRBT*Mi)PJ=O>&9_Zug81{d)X9n6R?Q-CJw+w@GH) z-XU%jEUcl`a759Y5?im%b_-zL;>|28Z*$BEMC5)@ErlOl@STUO!>o$t1_N z(BfbYg271-H4oc0Uip~xfp#4$wR}!>Q+qi(rIsEuAfxdBQaM~|)X!CitiuCMcY83M z{}ir*1KnrRDnpY97_(t}`Bej{R1tVMt>Z(zaF+Ow-^8wuKZPB0o^OuPh$EALwV;HC zY>~za@Y-6(vti6O?vvCrFyN1`NaE}q5vR>FHw{11agV--Zw{gB0PS{jo*;LB7nm8M zuinG}{$bM2qAe&tLa>%*8)iE(JJi}BZ@IRzeA20N^@EL=OS}^oz+2XIgd~7d;yM2f zhvC7lkJCIliOfxY!4`@;G(joSkQR3AOvSiLVV0AK!kv35kj#j@o7DcNg@D(j?>iU; zy|#J`pX7UX|1*_O`()SjDHiEfKz8%b10UNAuu|xj&dz)HC{1YI<^J4#EBNBy+&9wgjr()^=V1PNOrOyFPD>2H3c8g z_Evn{H)cdO*M{VE5oJS;iO0+sZM<}m%x@kp!xXYi$kiWALoZnr(oVdBeu}Zp>g zBHds{4hMw^*74()>wouAOLQ2+KLa29fe;8wIx`~r2QEppfxd zj!0PaGqZ^0*`4Fa|E*R=QE^LFN>+`m9?%`4xiFVgc|l+QX-GEvW)z)=z>B;ct=Oj0G%+lOyqIoKrxeldD;^~wQUn>K2t44?_0#ckt^2f@@m<0`@TC7&*C3o=ROc>YL3cw&7#*YG(AV!kyEEP1xpSg%pDL>VV@>N~!?j z7l^X=s!-cBcr{l*7&rk4O3xOWw9zc`QA1@|AdY zvv$9R_$ATAB;Ub(IE6FgTslO*Yu@>#TMuoKceNT&*9F!8Z|#rOWuDSaNH)P9)d!g0 z;2;0c`}W+K-J&$IfP;TS17K1if6r8)cxOZk+d-wlal&#Qgp$?W;((r4acNQGaw(^U z85^r3mY*L&@b!6-ueXzZz>OlFGDb1mV{4C!Bj`;h@zgNrtLfdvHghw1QmYUy*A_?2=ak-hsgv!mi^Ipn7cJ_Eu*Ny>R=fV)CZQi&GrkTXq}a9Idu`G~BO zULSJnXX=+nuc1#(3!vbHw?+-Qt^GJ+`jvG+X(z!jeQPc~XZf|>C&E;!*_Oj5#vJX< zmatkN&m9JK=r>78+{ds{KI(2t5`qtMCg8F0gI^Py*jrj+Ey=6M+ zob=${3r^G}0p24s!YS*?OlMc0pC1FpFHbj)M9Mb3DkpiSls7Ubn|OU2$SA3@^EY{3b|d(=#%331Exn@$cJQPy^l}A&r0e zB5g>hy6gz+5ES(+!24SfM6yTdkz>J3+*jJQ+2tTYXDv1rDP^Q}-|9f_;VF!FBtzxx z49BybTdreBUw650$)!uaf%4lA8R^ktk}>71Rt~?$)$l37&fP#lbL=e*mQ7p9)qwnC z38n@Ga26`XGU_iTgvs?eXniRBY9qPg{=Q8u{ET4<^U?N`u=>8^=lQh>wvO#f&)C53 z;XG2OkY=F|bb6ls1qv{b37Bw_PetGdF&J#>3>&>pB&*X z6HEgssZwYqAv-)H!zo3mL<+|okWSgcUzh|*(K>ikRVE{o*b4EtSv5&t-IOO6+V)d; zM4MIN_H9@i{Tua$ycGrSuvz*RHXB>RfLrXC8$^r)3?gxQQ4OgxvIMF#z$T$tX3^yq z$dk#GuHQX%au}08!6gZhP?-fFDO;rA z)u;_9N!9ol2-^)05_{B~=qU}T?CN;iWhQA&jUWy?Ietj3o!P4Ejr?k}T7WA9k}4~U zvhH4}-!(=@lBLI&)x-ZREo-^Z`1dPk6&&^*8~<*$gD&C$H5C!FTU<~wogY@aCI4A+ zam8^5Hqq`^Ep6!{1VtoR?M+GPXj;zsWN#p!$ivw3<^B$RMJng#u+qNC^w4A$N_FVB z%KzZijRl5sr!G@M!igAk=z$OetWhf9`V6lczKK5_jF!`+{51a3*z@0~Y5zHrVPj{* zUpZfy*DiCM1Py|M`?~-pOOh&`wf8aBkS@ez($;KI=?q%UGG<1C{Byp!7|I-%V$U#s zB$MydyoTS@#5*&6LZ`MNCcY4zdX`urL5d97O6HQsKIR9avlA5t+LP%r03xCMTZ^=P zkro>FV$Kp=2r~Q8HkT#i3R24+COzgv;)rAN->)`wlXLNK(V{a51(GY?Cu@hCq;-xk zC~-bsHLWqoIs?z*+=wPn{=rUMLMxMRUYZhXceI}q4;l+h&nXGP{v;nXvheuAGoSN? zU`s7h)HQounW{XTE_%f#z=H@z5q~(h6@{qIxZ7v>k*wHaSG+a%rc-zdB=Kt#DGZ{p zgSdOU2lrfTFbK+r z=GmT2HJ{4mBu$4#@kr!@kPddX^%X;m_oTJ+pPN=l4)a_3&^cQvprQI~Tb_OiU&ku~ z6@ILeGqFlI4edAe;98~UvIemGonUArEbgJ+{t9fn&ev3AZaZY;sj%4foZt}^ z>igDk{HOy5NMftp~i*K7mSQB{!i<4 zQMe=h>5pFhC`@F|a5ScXZJz9x&_VergpQ>9ZQH(z?o?LRqH3$H?)A} z?3CSs`-uesN{@p^$@%h>te7m9=KzULd*o+D@4+XZ`a4QbZ9RNlW(p%i_1=E3>wpff z)LCtD(^6b{F<|e5pcHGnJR89NA)5@raw{&dy_+fxdVsEOS>mmJ4+kddJ6=&`m~eN& zELW-Il%~yE{vJ%P;+hssrECsD&#}NdhPL|&*^7DX#C@9e8A;l2Go|WWVoTpYtKoo6wpU0hAEst zd8FCDXqol0CU{oX-wp+YF7vm(G6(bxym!_FE8l!uXCro+;NT78O+B`!*c&9w&Nh7u zhcy23*4|2Kr5|xRlvZaQAr~T0p8?^#)d<~M?w{t*P`frNJ1$=LP$Ww!eNqF97FRSa zEq_vL0eZw0{>`Bt(=a&`Z5{0`?P2t^y|oT4W?NP9sjsmm1psvfkEI3h zzlN;c-=?!HbuUNHJ%iPi>p2#GxH_JV04HM5c>T1t()gYgLl8!7^ILO7kh#bY3YY<& ziA#n*wpOnpFbTj-eg)(5`&Jstwl=PdkAwAH0wF{M7Y4iLO5Tv}`>BRD{_tEu_<~U5 z8~+hx1dZ1iB1POH8hhk2jx&zw0Y!u7;{0;PKTj$Ini_XLtN$#cZW~pCa6XKtO$wJC z(lzGW{%l&?%Bk!(`h#8{#j;ry+wT0@bJ+9UO^c!Y(D(bM{w*L4vd}6ST=Lj-=g?3y z2naB1`uN&((UXlFtpW;;4zzwqSYEKe*o=>+cB8>m7o48f?Od`J0+(ScVLqmuNgH1_ zySsqZ&T~kL*NPENoQ0Fh8Qh)4($i6}Z?Uf?C8^ofZ4~mVbk&R|Wnjlkc^s*3b~gHd zqBf4dIn{>pe`b|E)*W8U+C~6G&E>sFAV(r{V`9Ovm1!%8!%Q}U?W9Kuq%LVef}f`k zRXy&#-UmW#eflKXFU@uKOET&Dv}@|rS~&}^{7{yE)~p%NL(TQ>?9@O#yAwI5qFr_Q zZbJ0uPs@4r;SI_T^@qV-6nfolvv_-=9S(=lnsvpps#VZ+2}K`!-_bY9`A%2>2yxfa zWXW(NGzgZRQ7L@rBU|LiFWKkSq{t9FhoxecJ#~k}N1*Z?gQy$jr;mc*ThwXZ|5fBr z8%)#fuI;izRhzsgHqNizDpN9Bm_xD?m5M%r$xfY5Mv(f`O+{T3nwGIW#EM?i%L%<+;nY|7@?zZ)#Kg zL>1GU$Wm6Ux_6Za5DA(WD!qQjJQgu+m;XJ(^PFEfQ*B+%`FPU@8^9yWx_W}&E3YKKum5!8(D9Bk z@Uphu`X|ZMmLbKm1p}xpXTpK>lySugZxNhV!^PBZP$KKjl5I(F^bt{64_$F*WN)l} zP+PJxxQ|GoGuD!ReSl$8 zHgmX=`f8+g$;8EkkW1}S{0bDtmVxhw6!sePXeB&NGN&Gi&8>OSmcvM;aV=PJj;VD< z8*HPE8sZ1nq*`5D8vK)*!U^F6;eV9TiK@6}-_79!@C#78=jDgOFP7$6rk?(1wbtoB zp%d}?i;eyVHWJ`1?}~usNCVH=GfxsmL1^2e!+&L9g$NH?lJ7be90e|>*J*QW#>&#d zDdwq$2}y+b`~(Q{BLoP3IAQzMu2C}SeCf8VNIW1DbZ-O_6{;E`pS^t0bAQor^L^h0 zESv{6ZC69YEPOi9E9p}PpKL0NM8bS^@Dz4W{`)b6Gz32-4{D9@OXd>vbYn@||NLUgB zD^@%)^ipT~g?4gQQf`U>;+2X*?zy7{F zt&Wd|uLb7ey~|G{@oR^W8A|gE;wkP_*G(f$CQ*={wsLZAjB2}Cwk_N9oljfxvRi_Z zkS#X)(d(eaewVhfL|M*r^=&!6Yq!rd9cuAc-BGTjD%ND(VQD_CKJVwv#0%f(`cTcNw+4zJNUtxN3Jng7KmF?Y+)+K@;A-U!d1CW zFMyRi3f(GRMwd6tu?~w?C2g5~EE~BRsKMxDTSITF=V!XABf?-l5GUVx>yW61j5ApX zg?-Alfbt=dk~{|Vh(z1`!Jc0iiIpM|gDVlRs?cWAb0@QRX>dtqVi`PC%KB2b?p7ij z1yFNdAi0t{lgZsSi&4(ZQB!P!!&q;cyg*nMrF&f(6ub$uCT5#SMCenaaZ+GH@h3}G z*mz*B%o=yt9Wxrc7!=k&_~XH;k>B~;ifKc-jaqR_nb02e&dZ$(W=PSv#vMxb;b)(X zi~2OEq<*k|%>yPNuY(uu*uuTGup#jJAB7*hea9_cN3c2j2ddqfEYsDuw~1~6??4DQ zHyfdjB}c3}VRuIx^3bRu+%< zu1bi(vj56d{P(C^Z!THWTba`*kpxK8IWpn}gjQ2^fYAcbhjM~L1>Mw`c6%*Cfphu? z9R6bZkSppYPmpa*mo&qs(>h^mti-uy(q9++xA?);gNyDLZ3hcsA*#JP3FW!s&&w<#ZXFSz!i~=R6V3M4U|fw9_2SXz(zqk9b_jSVPS?q4$OUV&+}?} zN|-s!5r)wH%#&c=AtUxLGE=G#M3FP*&2U(pscqjqwZSB*0GkH zPN@hoO<5^a%2%0!L~uA<^boy1*o~6NP#CEE%Xnn;P%=;2GBI*m*%B55PIspFPSy|0 zT@~1O=a@)}WF{1+^y0&m43y;|yc1tr?YwzAnka>+oC$w+>F7h1x#4%C;gGMWv&hvc z;M^K7lh0<6+T|+!$*TOQ;njH`xmKL%?;*@4$ju7%g@PKn9(eY>Mg;k_7LqH=y>@nt zP-HWkDmPE{=D2aa*u%D#FrSDU&cQs65zDPw|8CV8l#leVE4VH>53o3Q?bf0)#kJ!3 zvb&zuc)!!{yXzOuD{lyuVTEh{f&7Kd9NvEdj~uRWnG&S4Bu*n(S8jZcoej^Lgj3-t zud%)?9Vgu@i6Z~R6zICEq!(ke|F#*kIAcW-3e#GS>e7u6v=oZhArjk0otoO$_35s# z&F3K5j7c={A;(QC#M3kYj z_clz&1f5jD#1Ih<*(tvDNm*dn@ATljjoZ~?s0CsNxJQh=A=YY zXb%hVn3$+dfTZ3cP}MK9hySSO%IIf=*&s)1p|Xnw=2cyv9$(8b@kzq>&R^Wwv6 zs9Z~ee-Xvv1SBTQKt4_)VYRZww$i-tbH0UBu`g##@QgT!COFXGGjVVSE^sP0|I{8a zk1(Wrz5?N#;NuJ?a|!op(}7I|?X|+$5l|G%isW*wyBCrAr~iM>l2m*6hD#&K`2Isl zjSkRP-jZw)hHU*uv5*%wN=_TCt-P$KVJ`s;zxRh1C%tV2=d~Vx*OpH)e>+JXLOh{8 z+^c)Ip{_->w|}4kdty=Oo@n*zmx)sXPhADt6UMm8u|yWmf*Gqhey*cEV#ViXTy>cx zzXmISzjc3CF!jt6-o$nKPnXeLg1!)S=?v(0bwT;jDZB(~dqGTD+(?p(5|bJ&1)E`R zJ-Mnexk!+A&>f_0ICY7O9OG}$hvInd1nXBkyFine{06Tj5ZUu6^`Pof&y@=xM{{{y zEADp4`JZkbKd%{}n&&OG42bXW;lHpYz{M3#(VC{!a2z{2GB7bU`ue_MpCz8OLIIyY zwYkEOAIi_0Hl!WbRY+6?M9QKD%)0N!Hx`PbYh5551t`RpCc`aQJ4GIfTkfqdYjH}W#oPaJx|Bh+= zYg2G2`G&cwp#Zaop!E~U6~srhh!;p(HQ>=e?xR~7Ppu6O+27gUVv>ULwUipU)=o%R z8{y#ckSExe2q2c!q6k;YmKQT1^NhOS3>C0tMRG-ka_}}UV>C0{`usR=7Wf;2+BIDI z_9SW|Y&1GqnvZ~;ZF{wd;D&Y00CzzGYtp%Y(rTZ=<>@zOyk*TJ5i^C$dIx|jD*ZH` zC9m5mlPeD+mi>=rs1r*& zyM#0$&_D7OKAAAh&RNxmmAFZt_6BAq*2Skb;A2W@3Ug zC48BBs|=QuLQE08NGp$Jf)H@Bbn>}rCUCX&;HdO8NoS;Fd~vwf<>b-4$>YV$+p4eN zM|KcEgi>e*Yj_1z;S-kK;YAJ--B9Pcr<4b26N zN}+d~5TjG#agKY#w5pTRO$(?vq2#}SdV&<69F^LeeI)t&eI zbiU=$_`Aw`U9QNc5{`p1m%x5xO;7Nt@#i3CQ&Q9m6B|}$+n-_n*R^xoFV}=AmZVBG zKNJ0s4%@F1ha@5J$TKr@xrE(WeZLCN3RN!}^>E?CCu#G&U^p&yVET&fw1G!svG0$*lFnRE0LCzr^oaifITL$=b zV$v*>6soSI$0>dJ{&}81_;Q^zR}=sh;IqCKSQ;v07t3JF@W0SZRcUfVaLd`~ z$katuN+9A_dWpOSnL%A5+gi(Bv2&aI1fiD!F!ZGHfyK-=laa%1#jR*&{1|o0BDL-MN?K|pG{8Z}lm4-&vVH=lPT}9l05sUmy z5q;o^aN#mf8c+U@H6I0rO=GEs(ULx~`W^T&TA&P;SUx>6FmR*pYkOIP8XG06@wPvV zd7IVA%4D{q&`(?)-IwCw+B+5&X+(6Xjh=aY^l8qj%oxJ5PI0gT3kd`}wkTp#_I%H(2l)S*l1cpNC>1AIDD zR*fog0;W@9**}VrPFouf%M9waT#eLpRpAFUc0M-(+07@FX1qm2j>V$SdlCcf*c&Ts z(r`nn=e+|Gu{_%?Qcu-X||qBwJtd(`O88`pvVal-gJf4S`hA)zKRKc({o^pGKr|{w@~Kk_Djw#JGt)Qmx{diYEU`FXnI-4eNoyIm zmPuVh`v4>1h09Ye{xIWAL^>3UbW#k%s*C->*f*ojK7UVOA52HvH$H4elIMys9%o-n zt9I(CG?x!{yszUi$)Vpm_s{HO>U=Nsw}|*7Z4oc6Q+adWCC%S zyaICU#5ZTf1K*6mrX?!mwO#Z7O7Kl#|6teU-(|;Q8@2AR-Ago9p53-ps>EK~+NC>B zGb*J!7*SFtk=^bs*33~=K)S+>*g@*KMBKYsk*?~Uh`ZucTvSVUpKLN3|9-})px!-u zZRg{lfgqfv{fut>KPKk+Du3iZ_ z&IkQ)u1KaYyBAg$VLr7)M_QG;Ysi$2Zcn_|KmDeE;yudCT3Vt6_-3AYJABTf5L+{r z-xWoM4GEIjBAp{!in>v;pBsfu81?bpvr#lA#t!vM8HJ8l4c$j4-)*iB{v|tfH2y^g z)=~b&?vFlDqO3hj0G}7jBO*S@@1{lGc&O8vvZbJpKR#&>VY79@Vwzig9K+w_ImY^= zJUO7BJ!O{an$rcIC&I8n-}a<+&G_$VjxL|^{v&MF>N{<2buyr`Xk;Vjr4;xPFO?Q6 zbTr^|4)BV#$HE3CHUf%6y?ElVB%kiE3)R2OD12kgV?SZN6(6SG$t79O`n}uwz?!58 zKl}Z2wm@EN2|uI83a|OK-414bW4-hz=a}NQ{HMhlxxD5jq*6M_I7J8WGW@rw9E9W8 zx!*U=YjM>y0P!CnTjpJ$2o^x!C{ynwq3!;wTa2WjeL?=$ zuqh3#^S_!$2D;#X9h)-H*dWmF|4CLvdE|eme#$~K16kUMnd3_(*L(%v5i3OZPP16@ zpdbl9SfCxCDI;(OqXYa^eV+wO{pj2DI^5P`omy$DT#m$!aJQ1_XoRjiOJYXYbAH?) zT_C}Jk;!%tN>|E#3gH7LkJ&aCv0*}MHQR0xNTx5})Ts-Sse{9b4IVhTAh!PTYT>j!C(%b5!(Hbc7l>)NNvN$16{kl*=4IAW$DiWb zRe4dcoy285j##gFANJND;*XI0iPmSbp6BmTpuPRgHpSyasQpElG{R;P@%snlKkV*_)GI_g zV1{cQDQFcv>XZLk7zd?9O?&_W-gtDtcz`sfa;xLT*sx`yV^(|Dqj6)`sH}_m46#@C zZwj7ga-9!B!mt<0ctMI39$^Op;&&T8l4R{fN%(u~61L*3_I%qQ9jTgEguoQk%#_Z|b2P)8Aq-5$6#-M<0_Ey})1O z-W4RA6-b1bIVf=-0J4@w>OvryDuSS-ei{qw)UH$K3C);%@nbmL(%YWXV7QhOP>9EV zbX#!Ld`ezk2sdZj@*+$o>5_+vi>Q0nVqDJxTwJfCbDg9Jh615q842HkzA##N6T=18N^UJ3mdA(N!4l=WX9>9rmz$^KAYDAi~> z7sIr8Z^ta+qtV~^kAuVr{6%n~?L|`5`q^N`gtZcQo{#@RZ=0&ao{xf5fm0kIt%Itk zy7<9p(`eQOX_WwFs}YmqeO3mP&>w>^oAEEE7tM?&J?C?_>NPjlslNsE_M@8dXhonHx?#7^ykh_$Ft zp!3pg#~2ui!tq%w)Xy060klmBors^z)33^Enw74GbLaow{B<<1EwmDqEm;GSe!l+5 zMsyPJ^*O#F*M(Xmw1W82fel0V;yby~OD!RaWZ7CnH@D!vE8(ow;;4A*5Sg`>Lk<^& zHZv{SS{6w1z?G}&$ zp~`h{JLvT1ZyctjSoPDLlZdQP^;@eCT-eOTT#t(s1Z>>^JW$>cjM*)SW>qnX;|c4% zk(*KN&29dpe|#EJk}xd9T|#3bdg)iEpu~nC`%i-&f@DZJIko4sp^?ndNRB-IrDidSM`|mAD-7h%L`e&UUE*tzgjbL7j=$B z93o_6)>@a}yTH+x?*r62zP?|S23Se5V|kANG$jZ4({9Pm`^B%e(ZL-`IM-y8ERFjx zkv$TCs5bo@R)_xD1;5N3 zleBi%7pfU(J@1}EdcijDE{YR5!08N1^W>`Y;$(^W^scHzVH8`7DS%AT~oYfZ9fOgf86oQ`nZJb#zCAv-}5VHz;kmBA=>{tiFKZvUUkkQPI}j_ z;eFxcNHg%d>x8z{@^Nj*^)JhXsoO9RRYOXk^D3E>c4pJGfH26JqaG-IRkQG-B^h>l z0Fd3P=aoR;WqiGO!cK7U*(!A2{ zx^rzXsW2;5Svt!H5;;8?X(_T_=UF%JSl zr(yzLZntywOtTIo!ScIMEiK+QT!-=i6mfAr8Rh0)YMv@I27p$4r9xLn*X#C>j#MZ7Ix~x@EP)>d<9c=qGl>l9C+Jk`+hhx!al(PdGyU-n@IYe0CgxRqQ4j_Gd2*r871tIUlCs3?gTVj9T~1+cUA6)1DGuLzL@v6 z3UACdfFI$0y0#0sd7?mCZC6FDPYqs z#JGAgu!kI^b+5KmW+ScrsRI-7r)CzdaIi|kzXq=3_EEd{~jP2TQ2c7V<|G7BrBaLhdbjI4gH(_fe5B~;OlspRCY?~=Ngo5nZpG$T6$z*XFPYgR2X8j zAJ?R9-cAb_?eRk$cvQ7BC9k z#Z~Qd&I1m}Z?0*!u!lXHmm}fKvWrUNz-j82 zMRzt_Ps&|wtwAI4wf#9Xp*>cYl#W0icuQqtCd{L^1|{Qhu`k1FFc%o++I#-xlY{ z(5Od^?jve%d3>vfB>-&o9pS$$v0!$E#tk-b$e4Z0;q~U>JWcIjU!w5`I$yHD^onnO z8cclJ^uH{_7JZYyjYb#yS{LaZymV@-DfJn>?uw3lnb>3KIlGXlJ8N}bi+_hZD1rNv zY&aT^6HOSP@cjKdmuHIM3ULS%nHzuWrEP|uAAZAkg-wM>upOcp< zP7gc4HmTYWCJ0PPxhb1~V}TXQzNJ;N!f3_)e^wR$DBiK-M&M(J)3%6_Ap#T%`3JrT z?$(hW9DROZ>`p$bugi2!t!(MJSQb$@@qk$|&wl8RXU7lYogu*c*W-RFX5}vRUu$tR&~z ze$jX@JMvLK44(dI^uCF^tu9TGIZr8~{}#H~_J?`Ja-fCxCB6!}>8XAFP?5M5m}XPY zzc`XO%110VAKgfk0Ae9TMVA6LweNMIM zBDP5G~@OIv-v*un8Vqj!Z;yW|F|~(f>^!QpzKctY#$*Y#*#bbTcdfESnZkBr3g0z6X)a6k(0oP_J%utsi%NrLmcfzQGu zy;#xVE+lBhtRCF2%x5b4eri_Kd{szYm`TY=b#S#rfEOD&rjvw7gtO7f<=HDwCgH#i zw}5O&U-%i;0vrC4q47!ofo9Qgnyg{<8H8+VgR(cR#n>#geQU=9aXQV9ffY$moMoCl zh0B=-)Do2XL4U^At7E}jPyaE6?oJw(%De;1?jLgM+|I6#BGFFg@2l^?-Y~iWNU%O? z*53Glj zJVaO1>yJ~l98UomJ<^pQhK`*4Y#aZ?m{tvdpdcfuiOcCV2Z#3hOmC!_w+oEi;1+WE!JR?MI_N<_~8 z`FAeqt4y3jigh~?oml4Vg#3d{J6$@l@Vh{ZR;D$cLGs#y=)_`@6{_<-WP?o8-|$@n z?2Y1m{F=VZ>-^s_=SXLewi%(nUvna{iWb+acd0)52~2CrSfR*`6sJx(i>mnBygj>9 z%lzo0S$IuHFS`5s;LAwt4`-}o)fu#8C0Lk>rb)Qb7zJnxu+6 z7(A2Ky14zs46}@Rw~2Upti8>fCv?TwE%Wj^Tph@?T&|vYNrCapOYph$P6v!ay`-m= zpyzzJe+nQVXknQu^O`Yc@*z}Idb8`^W4$_dL;NojPDbix=He0XQQA2QEHst)%$nmtc@)j$6NBE}a(hkcr`nPre4hboz9NmEz~OTXI%kHV`uU=Sla z2pl@bG+;tDJuq~bqXh$icZq{sS{q_SjvdlGVd;gq)VahxK`<2id> z{m$Q&#yd>0*||(s%|(e+e=p!W<#nD8kqMSF2pBPbEVi8WUTYIbO82`1WDUBiXrcj^ zq)SLaM06+-)wg(a;*Sm(-eum+yhcr7gV}YLD+JzD1ujVKKPvn;cNDiMd|)=Oaqol- z2en@G6|t6D{DMhi6(}Ks8B_AN=3OIxp%PKx98Qzq-Bvp0lfP}l{mrE@s!*eT(kj<` z)h}i!x*}!eF8jlO#Eg;(NQqUapKNI~5?ym~zZpJM0&1NoIdo7^Ia$*m{*~iR-?Qflk6^Ev-;zg_lw5wf%R}IgqJX5E& ziV@{iz6Gl9?;$2gD5Z_K(PfX)s6I#kj8PQ3ZKw@@@=%)K^14}H%mi0k<7K_AeKv5J z?LD7y1Vr6efw`80@g8r&#S``KGq&Mz5rWHy&WeD8Dx!LB+)7H_EnvSU1dB@ro)Bce>GC??yD|G+uj+1yif4LgDW&K7T&N2$-a5#RhW zFH=WEV2MXQT@Q`-#O~Zj6dkD1zZqwJgpq z#HAYL6yUt_9anyc!(C@5QYSmwq;DAp`y;(GzdU6VoclW&h`&8NKg=Uv&;M;A4-O!Mi)$;>?vnI$NT>Yk%(c&1m#cIg4Aj#4&*$a?(K?J0&Le}A7HYN3hQjX>gR zOdK970E~pmDqi5=?bLwG9+sr~I03vsFvX<+Zfd?LW~w~BpAZW75|@Xb8Vyjcwl_lk zd<&Wv+xRcNUD0y7)S8WihvO^|r%!G^2!ft^CBJwbu z88t*iFhDk<>G;4$A)w$0DvC;4Vx(nWm1{z`GP@dfElUu&`}}7Z24gMOzxMZiXPEv4Flt;x z-zIYKlPAN1uK3^(B{d~gU3JkF{-O5 zDCE)R-0IaEi@kkTWnVaM?z0~v>V9VZFzNZ>y%%e?uW0T1G-B1gjNpOv>h-QaH06!k|4X|oU+WywXLWr|!UsY)srd}|YP)us8aNPB(yoT@4l6-REBKD+oxLb@cD@%~pLL-jZu^rZ=0hcddJzZN|NG{>lNr zqguP0(^ED@tp1{N#O~LA?dZ6&cdqnmnBV#Pw}bJz39IUNc|Wk`yZN`ylPNn{&qtJl3g57(#s;!tKX~kkUP%|WQ7e`v&qcce_f%G)`3IwFl z5aKFjMgqw(<)E)Au>_KiYiunz(ykzm?BE_`(L#=#Pp1>e{UzMcE+MusaRt&vNgOFy zfpm5{GseL8E2zI1AT5KAg`f;fN`3~UXV6sQlnGrKbS0_CVb4%lmP71d`DV;d<4Wp8 zZk8}v5Dd?xy8xAiW2fF%7onVnJ2e7~Fpk8zKGKG??tGF+$eVU@C+dkK|yC zUo{wU)eRV%b1ue~(`bOFl0_#Ch7z8wrC#vHYFw(gYy^+iVh?pPxVw$R)85C@{MOEm z%k9J+wrt1DpvDBmYw&C}H#oQ92C)H$$^p(xMHR}pfwsb@PP6n^uEbBE2_m77x$$T% zu5f-#%s{mkBX<7X0M8>|${>9c7G!Z1p&$q`K0CO*370gh=rB@4nP3_WS7XL1&A5?f zCb0tLyHru0hcVWwF~(L)PAN5XItd!7H%3ZKp|?S=>u2@;B#RCc-+^lynoFiTa+#x} z#F9;m5}HO!j0fdaCoWJpNo)r9o3I}DdvmOTqM%(*CzIdZInw4Xv0$~~!MWvAh2?@F zN!kfZHqZi6G>+?=LnTVENR+sPdMk#ohDBM_fJeU z#Gb^dIQq{*9IjRkGh(5;5UYK9JvZ79($RuGDt}0IF6MJS@ep+rcp-J6MVLDO4>`4~ z2q$lNDKi#;Z!zxBvyB@y4$@IP;SY*2iV+7my!aC;1s|<^B;!0tSAzj|5w`ID5XAwl z98L9<;g!dV_AP@W+x4!iX@DRuDnV3si=zvVP!9ne^&8fE=MicqE{B*>x{a*waSe7pf3BZvokxo;%IY6qO{ti;aiv|~s-sE_MCM>H zU4`9(-x=bk@g0N6gKyNfNs7bTgbABbz`2@I>JH{7vHd!+{j@XzoV3(Wd;M+% zjUTwtasX%OvwO^lhR!6J37bw^5Vl!z5QA#DZ^YrS29wW!F+y-Wr<1@xj1Zhk8@_(n zVO($X)W9i0n~OjG2)_3)uCLdK8<<%I7fksW1&b{pwi;(*$l&S)_n5%P(I5yTYENb? zf;3OrD@NI}4U{R(2kvN{rVL`LX)TGH1mYvKig+yG9{y9vF1UWeiOsyRGZeZh5bfy{U~ z8nNZrslzJh2*VKTH*q|MZmP=+0w12OOALN#CxfHGw;o^lx2goAd?(%}14FEUNA=hU z@8S)II)RF5m09q&zHoN-YLb*}l!H|RoeMb1*4#gq5`S8)L^5-e9Iow_&u61OUJ_rZ zw{VcBNW!&(m0^_pn>uPQ@jWWw3&8oP+_;a^Pat{gyd2WolfMrtN$>=4MeA!gE$@mSu3D>Z%k$Oa3`rdKjbN_qT)l`TApdXZd@*PX%}@lF}l zXEyj0l83AZ$=SqjbopsoCz`|e+n<8QpRO|sJUI;8pmHAu{!^GhCJ)ZF zOAr1_;*~m+;$bpkeW;)1*g2YzuXU3umYU`<1%RGt`mX)q};6)B?i^p(bys3teVOE2g=NsQN;fbu6QZ; From 4b33d4f0bf54416dad74cbdf466383cfa56f6d32 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 10:21:07 -0700 Subject: [PATCH 014/109] .. --- .../azext_aks_preview/managed_cluster_decorator.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index d378163d04e..c3173d402bc 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -2150,8 +2150,8 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=True) mc.azure_monitor_profile.metrics.kubeStateMetrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( - metriclabelsallowlist=metriclabelsallowlist, - metricannotationsallowlist=metricannotationsallowlist + metric_labels_allowlist=str(metriclabelsallowlist), + metric_annotations_allow_list=str(metricannotationsallowlist) ) if self.context.get_disable_azure_monitor_metrics(): From 9d383db15ec143f9daf9fe2b5cc4cf65c74d46e6 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 10:21:39 -0700 Subject: [PATCH 015/109] . --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573580 -> 573608 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index 1b5a40744839bea09fd990e87c78ba144a050d54..e6662793f0094cc50c909011f15ebd9d64134d70 100644 GIT binary patch delta 9552 zcmZ8n2RK##8+Y&JI=1Y+vu9>zb_kIqt0H8t$cRg1Z*q)`BBQc5*-4SDD4VinWM%%( zb^G<}_xC*KIo{9b^L@YX_Z{c(+#40hUJ%G$8nXaTj;M%R5TJ&qMN~AOs41O`i@?9m zyU^M9LIew|Fbakxn0P0d5{z>I7;4lNVMoF!#?Lx&>g99QTQC=bo|g?LWcX$8uEPx+ zTAz=`$X}D;IP$j=%NPjpHqMl$SfNVkck1V^`B3gTtSb7dJ{W6@j87{p{jyhp4*T8O zE1^spd{k~DMo&_Va-xFwq@H+C`!30ikq3OuiF!MTdYX&au%`{DzNYrv-E!iZ8kzOUf=#4^Bm6Jz^Hxt0p+jyk=z>ER z`gd&T!htSi&5#=|<1oB50^Cvq9H4v6ZFRsGh6W}s1IFn4MGfFNnwZc4Xkd7yP)_=( z-qhXzPc#8x)Xl{7uFv0n)wdPSEm$%!9RzByTq0BYD1@E(me4}2xv9|oVBDlB*|hjt zy`#F6DW%~>_xQTqN&D|QU41eowsRuUTv$hl!=Oi}VS~lEgUkA-B%N6|9rKqP=4N86 zS0v45+i6ZvcAHHdj)pX5CuvfV7u)URzWIJiEpMxAR6^;L2;cB+(ElI_95kPTr#TmQ z-{`nk>YU2emfKU2#(&knL_uNeGGW~VOz2j5SmejMCJF8d&(DYaunh`$i<@IF>pNWA zGatlUp^|yyM6G4%EbG@5eLp^u#FG)#mnllm*wcjFOisSg%#G+>VRMtVZl@P||Sx!$3k-P@8Uf|E2ke1fY9P{Ps?ZXE- zbaSc058H4JMxqNznJT(9@u!|@D|{8vtPs<`p#L-O^9~a33ip?CAfxU%#JOh~@m`$9 z3@Lu;`U@G}mS1*lldQD{<%mW0%Kx0bLSn7fr zO~kAQsUuI?ycpNBU7arO&`iU$K$cCf@#niaEkZ}UQDYB+oVAT{5v&9JU!Iov`kN|? zsEIJPu$C4EotS6+eC^)BCRId0C}$qtwO-=Stb5}7GTb+br~hS`lkhiR8Ct%bkNGxO z3lF_f>%qgaOn2Ar8`$|Y2XbRSlyaM^@&Dy7LV9dorI*|lY?M`#Khy$>0qSxtwPjHk z(o#Jy7SyJt_t*wKXW8}=Nt4#h5my>Kk+a}%;Fd|TFpWQK3yAWa!xm8&{8n&Yx^Rxw zOnCUboYE2<1NV-Xz}MPWp%PIgj&g7Eadloup!|hD++4fE8cwUuY*i4Sd-S|N=0k6% zl`$J3EKIbXb+fZ{tUm0xSgYiE-6K>p|LP3gEuC)I#rx6KLniY^Tx*jx;=zJ8;Oo98 zViuKp7gr=^Hxd`=kJ-$A-a95bydsAzX+VTuqzc6)oX~u7_1^1;Bff!n+N&vgo${eY z1+pl|X^+KF@7~zw^~OPm3Fe`n*N5tTB-@Rnq=Pnd?swrXJ`7m-G9(?!^+j50Ezl6F zG%~aFQFCV$QItN%woAxLJ)5=}wK+wo$Kfu;dfxlOwVM~tNo~I7Hy{}C*z+~#rU+me zA73u(>bX0d2RPX~urR1GTYsuq&lzqu^ccxU%^Zr?n`gL^&HBsm6yh=T?cC8kZ#-v| z3hx@9n(L11KM7Qr>(%sF72!EO07I*;$XyrIh@=$7N`0|CN;^yE-`3Z8zE}od-|RZ0 z%@Q}&$V5mB6N!AK>&=pmJg4;Prd-vd%zdpvhU)hdHuQu5PD z`Pqt_0$tVi(976YHTU_C3yjKGltuLdVP*!eKrCz#b)m!WSe(q%0A-eq{g4EDc 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 Date: Wed, 10 Aug 2022 15:32:36 -0700 Subject: [PATCH 016/109] . --- src/aks-preview/azext_aks_preview/custom.py | 2 -- .../azext_aks_preview/managed_cluster_decorator.py | 8 ++++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index 68b6661f2b8..aed9fbd0d50 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -816,8 +816,6 @@ def aks_update( # update mc profile mc = aks_update_decorator.update_mc_profile_preview() - print(raw_parameters.get("enable_azuremonitormetrics")) - if ( raw_parameters.get("enable_azuremonitormetrics") or raw_parameters.get("disable_azuremonitormetrics")): subscription_id = get_subscription_id(cmd.cli_ctx) instance = client.get(resource_group_name, name) diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index c3173d402bc..33430ed73fb 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1786,9 +1786,9 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: if mc.azure_monitor_profile is None: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorMetricsProfile() mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorMetricsProfileMetrics(enabled=True) - mc.azure_monitor_profile.metrics.kubeStateMetrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( - metriclabelsallowlist=metriclabelsallowlist, - metricannotationsallowlist=metricannotationsallowlist + mc.azure_monitor_profile.metrics.kube_state_metrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( + metric_labels_allowlist=str(metriclabelsallowlist), + metric_annotations_allow_list=str(metricannotationsallowlist) ) return mc @@ -2149,7 +2149,7 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: if mc.azure_monitor_profile is None: mc.azure_monitor_profile = self.models.ManagedClusterAzureMonitorProfile() mc.azure_monitor_profile.metrics = self.models.ManagedClusterAzureMonitorProfileMetrics(enabled=True) - mc.azure_monitor_profile.metrics.kubeStateMetrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( + mc.azure_monitor_profile.metrics.kube_state_metrics = self.models.ManagedClusterAzureMonitorProfileKubeStateMetrics( metric_labels_allowlist=str(metriclabelsallowlist), metric_annotations_allow_list=str(metricannotationsallowlist) ) From 056bd49e6bec908f4aee6e0281b113f92607a7c1 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 15:34:33 -0700 Subject: [PATCH 017/109] . --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573608 -> 573587 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index e6662793f0094cc50c909011f15ebd9d64134d70..c0683b30e26ed83412cc782a7aa1d71182084093 100644 GIT binary patch delta 21563 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 delta 21964 zcmV)BK*PV2fg`AaBe0I=0+x!ikmoHI5t@n$RlB!GmB~H;0OxW602`BGmKC$({umm6 zxwNCBLr*+5Tkh4?sw73}c>A_MQczgx)T|xo*6=&3#yME-N<;sezD$^-*5?K%>1gHj zRW;oC>CEE6gAG#M(@Me9-Xpd-{MU8Mqkh#2&F`-2=%nvJv!z6{zzWA}J_~*B9AxXj zwY+v?MbPRew7;+wi(I^s1;)L4>nt#Tn-o*290lx>LTP~^uIIbm%G7W_!btX51UxK( z;XMTu6`i-M`Md7hr|*;)D($8 z=;=(oAW_c(@vr>8Pz`|?X-VQv+h{y%zvF_KFF$03FV0x~ z*o*>h9G zmYP^H6NfJx7x@b)~+##y; z6lB};egITR+-i~wzG(1$+rU{hG`vW(BXnWgS2goc5~Z@RMc(Xs|J!>;%!S%8kwvsx?wM}Gf&*;@HI`MD zqXtWuKXtG4$az#uuRP?knb)o|0`|1eX&fU@j4qC}c(PG{jL`~yMWT`4m^l)ujS!OT zStd#+Vk#Z86vFGUVWdMgYnOdjSj(|IV7sjxc!=+KchgXv|{vLhE!*S4h7>}VCOt|B9`)Dx;xXPc7h z%IDmC34+9bJixgpIbiQ_e1x;pusqBPlYn+!*ll%gWk8d^1p3$&J>iYdmUD;wmm5d= zSJ9Hn7ie*Tg~@JJt=rBxFkJJfE+R?Ltq&hto|e?3-{vud8ikn&E|}{@a}@jvTVUehb!Uj_5)IE|(#{Y)cJ(O@2` zbcUmr#O7WzV(qA=5OQ||h*VJ1(W$_5+c-H?P$JT#%@@9WUDO;}3YSbeKfaJ5=u%@V z*CHs=D@rPT*9tn-$?MY(#6YI3=sk~rkCX-CK0;!&At=ehb%D88-#uBS1}M}x(WNO2;Bd0YeJ z%U+o2dsMR^s8xkLeOeqCAD$f(XEZ520O~pMe)#x#qP`COmMPd9y|t)+C8ewQB^2wr zgRylc#97i7p@?gYb@;pxESQRdUGsqdKm`sTU4zT=`E`WO8R)B2&oAAL5R(qc6Bv|% zunuwl`VhvcJ&aPc0y8}DJku46M5p@7%q{gurmP-^ZJ_qcym*?4oCY+Fl38gMuwEsP z0;fueH-2S2-lHH3t9P+~(4uc!!$oI)33CCC3!khn z)tS0SGX|@#N9CgEz{vV_VI%)_mCm1FW}gwLtq_#aUHAFTv@vw>)Qdwf9OV zI;pqc^{Pb>4_g1ta$h$|KW!`yGmVci0D(HWN(3JI_y?s{%hhlVXpNi+1#@bbBKNv+ z;-i`B`<%b931%sO({(~I%7`WgUi+0uY(L`Ea>2@dC8v$qEX@12#axpcANZ7AQ7Bwk z(m?H1q0�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 Date: Wed, 10 Aug 2022 18:09:34 -0700 Subject: [PATCH 018/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 2 +- .../azext_aks_preview/managed_cluster_decorator.py | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 5c750150647..c2726403585 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -399,7 +399,7 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): grafana_resource_id, GRAFANA_API ) - targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"] = [{ "azureMonitorWorkspaceResourceId" : mac_resource_id }] + targetGrafanaArmPayload["properties"]["grafanaIntegrations"]["azureMonitorWorkspaceIntegrations"].append({ "azureMonitorWorkspaceResourceId" : mac_resource_id }) targetGrafanaArmPayload=json.dumps(targetGrafanaArmPayload) final_response = send_raw_request(cmd.cli_ctx, "PUT", grafanaURI, body=targetGrafanaArmPayload, headers={'Content-Type=application/json'}) diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index 33430ed73fb..d0306f47758 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1777,6 +1777,12 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: metriclabelsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metriclabelsallowlist") metricannotationsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metricannotationsallowlist") + if metriclabelsallowlist is None: + metriclabelsallowlist = "" + + if metricannotationsallowlist is None: + metricannotationsallowlist = "" + # normalize ## DO VALIDATION HERE # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) @@ -2140,6 +2146,12 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: metriclabelsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metriclabelsallowlist") metricannotationsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metricannotationsallowlist") + if metriclabelsallowlist is None: + metriclabelsallowlist = "" + + if metricannotationsallowlist is None: + metricannotationsallowlist = "" + # normalize ## DO VALIDATION HERE # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) From d20e3729bd7ada98b5cceb4127893d60e77327ae Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 18:24:14 -0700 Subject: [PATCH 019/109] . --- .../azext_aks_preview/azuremonitorprofile.py | 45 ++++++++++++++++-- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573587 -> 573884 bytes 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index c2726403585..2064763717e 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -66,12 +66,48 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): "brazilsoutheast": "eastus" } +AzureCloudLocationToOmsRegionCodeMap = { + "australiasoutheast": "ASE", + "australiaeast": "EAU", + "australiacentral": "CAU", + "canadacentral": "CCA", + "centralindia": "CIN", + "centralus": "CUS", + "eastasia": "EA", + "eastus": "EUS", + "eastus2": "EUS2", + "eastus2euap": "EAP", + "francecentral": "PAR", + "japaneast": "EJP", + "koreacentral": "SE", + "northeurope": "NEU", + "southcentralus": "SCUS", + "southeastasia": "SEA", + "uksouth": "SUK", + "usgovvirginia": "USGV", + "westcentralus": "EUS", + "westeurope": "WEU", + "westus": "WUS", + "westus2": "WUS2", + "brazilsouth": "CQ", + "brazilsoutheast": "BRSE", + "norwayeast": "NOE", + "southafricanorth": "JNB", + "northcentralus": "NCUS", + "uaenorth": "DXB", + "germanywestcentral": "DEWC", + "ukwest": "WUK", + "switzerlandnorth": "CHN", + "switzerlandwest": "CHW", + "uaecentral": "AUH", + } + MAC_API = "2021-06-03-preview" GRAFANA_API = "2022-08-01" GRAFANA_ROLE_ASSIGNMENT_API = "2018-01-01-preview" def get_default_mac_name(cluster_region, cluster_name): - default_mac_name = "MSProm-" + MapToClosestMACRegion[cluster_region] + "-" + cluster_name + default_mac_name = "MSProm-" + AzureCloudLocationToOmsRegionCodeMap[MapToClosestMACRegion[cluster_region]] + "-" + cluster_name ### CHANGE THIS TO 25?? default_mac_name = default_mac_name[0:43] @@ -128,17 +164,18 @@ def get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, return mac_resource_id def get_default_dce_name(mac_region, cluster_name): - default_dce_name = "MSProm-" + mac_region + cluster_name + ######## USE SHORT CODE + default_dce_name = "MSProm-" + AzureCloudLocationToOmsRegionCodeMap[mac_region] + "-" + cluster_name default_dce_name = default_dce_name[0:43] return default_dce_name def get_default_dcr_name(mac_region, cluster_name): - default_dcr_name = "MSProm-" + mac_region + cluster_name + default_dcr_name = "MSProm-" + AzureCloudLocationToOmsRegionCodeMap[mac_region] + "-" + cluster_name default_dcr_name = default_dcr_name[0:43] return default_dcr_name def get_default_dcra_name(cluster_region, cluster_name): - default_dcra_name = "MSProm-" + cluster_region + cluster_name + default_dcra_name = "MSProm-" + AzureCloudLocationToOmsRegionCodeMap[cluster_region] + "-" + cluster_name default_dcra_name = default_dcra_name[0:43] return default_dcra_name diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index c0683b30e26ed83412cc782a7aa1d71182084093..0da8e203c1d2a877fc0784e4634dd457f537aa04 100644 GIT binary patch delta 27893 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 VfEZ4xc%gJ|0!YwGO#x`={{btoM0NlG delta 27333 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 From daf17dfa83109bb52214d18ae5c1acd5386d5042 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Wed, 10 Aug 2022 20:30:03 -0700 Subject: [PATCH 020/109] . --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573884 -> 573884 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index 0da8e203c1d2a877fc0784e4634dd457f537aa04..7fe0efd7ef554e58fcd49a86438e221013cced3a 100644 GIT binary patch delta 153 zcmdnfth}dLc|+fGrWnEI3D4UnJZA)ACLm@8Viq7~1!A`C6P~kANMPC}JzdFzBL_%t zpWwk!%?J|U_2P&E(V1Qxi$D^*-W(DjiS6n>9103RW4C+eaAXIAlx*A25doqF4se8l X=nN=*-~fjoSo|PIAc#&r$Pozuhif@J delta 153 zcmdnfth}dLc|+fGrY~I06P~wEc+LpKOhC*G#4JF}3dC&NCp>4Lkif*uJzdFzBL_%t zpWwk!%?J|U_2P&E(V1Qxi$D^*-W(E)Of1~n)qOY=6oAHV_srqQ4hAXNwx1&cL<=0? a2m{d>Q2M|D4nMH?L5@J6&gsbqIU)h+Nihrn From 796a60efc0f3cb32e8e7eff18fc32289ffb8f082 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 15 Aug 2022 16:21:57 -0700 Subject: [PATCH 021/109] validation + recording rules api call --- .../azext_aks_preview/azuremonitorprofile.py | 208 ++++++++++++++++-- .../managed_cluster_decorator.py | 29 +-- 2 files changed, 197 insertions(+), 40 deletions(-) diff --git a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py index 2064763717e..bfe2a563d34 100644 --- a/src/aks-preview/azext_aks_preview/azuremonitorprofile.py +++ b/src/aks-preview/azext_aks_preview/azuremonitorprofile.py @@ -3,15 +3,26 @@ # Licensed under the MIT License. See License.txt in the project root for license information. # -------------------------------------------------------------------------------------------- import json +import urllib.request +import uuid +import re from sre_constants import FAILURE, SUCCESS from knack.util import CLIError -from azure.cli.core.azclierror import ClientRequestError +from azure.cli.core.azclierror import ( + ClientRequestError, + InvalidArgumentValueError +) from ._client_factory import get_resources_client from enum import Enum from six import with_metaclass from azure.core import CaseInsensitiveEnumMeta -import uuid + +MAC_API = "2021-06-03-preview" +GRAFANA_API = "2022-08-01" +GRAFANA_ROLE_ASSIGNMENT_API = "2018-01-01-preview" +RULES_API = "2021-07-22-preview" + class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): """Status of Grafana link to the Prometheus Addon """ @@ -102,24 +113,102 @@ class GrafanaLink(with_metaclass(CaseInsensitiveEnumMeta, str, Enum)): "uaecentral": "AUH", } -MAC_API = "2021-06-03-preview" -GRAFANA_API = "2022-08-01" -GRAFANA_ROLE_ASSIGNMENT_API = "2018-01-01-preview" +def validate_ksm_parameter(ksmparam): + print("Calling validate_ksm_parameter") + if ksmparam is None: + return "" + + labelValueMap = {} + ksmStrLength = len(ksmparam) + EOF = -1 + next = "" + name = "" + firstWordPos = 0 + + # Iterate over the string + for i, v in enumerate(ksmparam): + if i+1 == ksmStrLength: + next = EOF + else: + next = ord(ksmparam[i+1]) + + if i-1 >= 0: + previous = ord(ksmparam[i-1]) + else: + previous = v + + if v == "=": + if previous == ord(",") or next != ord("["): + raise InvalidArgumentValueError( + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + ) + name = ksmparam[firstWordPos:i] + labelValueMap[name] = [] + firstWordPos = i + 1 + elif v == "[": + if previous != ord("="): + raise InvalidArgumentValueError( + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + ) + firstWordPos = i + 1 + elif v == "]": + # if after metric group, has char not comma or end. + if next != EOF and next != ord(","): + raise InvalidArgumentValueError( + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + ) + if previous != ord("["): + labelValueMap[name].append(ksmparam[firstWordPos:i]) + firstWordPos = i + 1 + elif v == ",": + # if starts or ends with comma + if previous == v or next == EOF or next == ord("]"): + raise InvalidArgumentValueError( + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + ) + if previous != ord("]"): + labelValueMap[name].append(ksmparam[firstWordPos:i]) + firstWordPos = i + 1 + + labelPattern = re.compile("[a-zA-Z_][a-zA-Z0-9_]*") + # Values are just a list of unicode characters so anything goes + # labelValuePattern = re.compile() + + for label in labelValueMap: + if (bool(re.match(r'^[a-zA-Z_][A-Za-z0-9_]+$', label)))== False: + raise InvalidArgumentValueError( + "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + ) + # else: + # for value in labelValueMap[label]: + # if (bool(labelValuePattern.match(value))) == False: + # raise InvalidArgumentValueError( + # "Please format --metric properly. For eg. : --metriclabelsallowlist \"=namespaces=[k8s-label-1,k8s-label-n,...],pods=[app],...)\" and --metricannotationsallowlist \"=namespaces=[kubernetes.io/team,...],pods=[kubernetes.io/team],...\"" + # ) + return ksmparam -def get_default_mac_name(cluster_region, cluster_name): - default_mac_name = "MSProm-" + AzureCloudLocationToOmsRegionCodeMap[MapToClosestMACRegion[cluster_region]] + "-" + cluster_name - ### CHANGE THIS TO 25?? +def sanitize_resource_id(resource_id): + resource_id = resource_id.strip() + if not resource_id.startswith("/"): + resource_id = "/" + resource_id + if resource_id.endswith("/"): + resource_id = resource_id.rstrip("/") + return resource_id + +def get_default_mac_name(cluster_region): + default_mac_name = "DefaultAzureMonitorWorkspace-" + AzureCloudLocationToOmsRegionCodeMap[MapToClosestMACRegion[cluster_region]] default_mac_name = default_mac_name[0:43] return default_mac_name -def create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region): +def create_default_mac(cmd, cluster_subscription, cluster_region): from azure.cli.core.util import send_raw_request - default_mac_name = get_default_mac_name(cluster_region, cluster_name) + default_mac_name = get_default_mac_name(cluster_region) + default_resource_group_name = "DefaultResourceGroup-{0}".format( AzureCloudLocationToOmsRegionCodeMap[MapToClosestMACRegion[cluster_region]] ) mac_resource_id = "/subscriptions/{0}/resourceGroups/{1}/providers/microsoft.monitor/accounts/{2}".format( cluster_subscription, - cluster_resource_group_name, + default_resource_group_name, default_mac_name, ) @@ -146,19 +235,11 @@ def create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, c else: raise error -def sanitize_resource_id(resource_id): - resource_id = resource_id.strip() - if not resource_id.startswith("/"): - resource_id = "/" + resource_id - if resource_id.endswith("/"): - resource_id = resource_id.rstrip("/") - return resource_id - def get_mac_resource_id(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region, raw_parameters): mac_resource_id = raw_parameters.get("mac_resource_id") if mac_resource_id is None or mac_resource_id == "": print("Creating default MAC account") - mac_resource_id = create_default_mac(cmd, cluster_subscription, cluster_resource_group_name, cluster_name, cluster_region) + mac_resource_id = create_default_mac(cmd, cluster_subscription, cluster_region) else: mac_resource_id = sanitize_resource_id(mac_resource_id) return mac_resource_id @@ -448,6 +529,88 @@ def link_grafana_instance(cmd, raw_parameters, mac_resource_id): return GrafanaLink.SUCCESS +def create_rules(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, mac_region): + from azure.cli.core.util import send_raw_request + + with urllib.request.urlopen("https://aka.ms/ama-default-rules") as url: + default_rules_template = json.loads(url.read().decode()) + + default_rule_group_name = "NodeRecordingRulesRuleGroup-{0}".format(cluster_name) + default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( + cluster_subscription, + cluster_resource_group_name, + default_rule_group_name + ) + url = "https://management.azure.com{0}?api-version={1}".format( + default_rule_group_id, + RULES_API + ) + + body = json.dumps({ + "id": default_rule_group_id, + "name": default_rule_group_name, + "type": "Microsoft.AlertsManagement/prometheusRuleGroups", + "location": mac_region, + "properties": { + "scopes": [ + mac_resource_id + ], + "clusterName": cluster_name, + "rules": default_rules_template["resources"][0]["properties"]["rules"] + } + }) + + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "PUT", url, + body=body) + error = None + print("Successully deployed Node Recording rules") + break + except CLIError as e: + print(e) + error = e + else: + raise error + + default_rule_group_name = "KubernetesRecordingRulesRuleGroup-{0}".format(cluster_name) + default_rule_group_id = "/subscriptions/{0}/resourceGroups/{1}/providers/Microsoft.AlertsManagement/prometheusRuleGroups/{2}".format( + cluster_subscription, + cluster_resource_group_name, + default_rule_group_name + ) + url = "https://management.azure.com{0}?api-version={1}".format( + default_rule_group_id, + RULES_API + ) + + body = json.dumps({ + "id": default_rule_group_id, + "name": default_rule_group_name, + "type": "Microsoft.AlertsManagement/prometheusRuleGroups", + "location": mac_region, + "properties": { + "scopes": [ + mac_resource_id + ], + "clusterName": cluster_name, + "rules": default_rules_template["resources"][1]["properties"]["rules"] + } + }) + + for _ in range(3): + try: + send_raw_request(cmd.cli_ctx, "PUT", url, + body=body) + error = None + print("Successully deployed Kuberenetes Recording rules") + break + except CLIError as e: + print(e) + error = e + else: + raise error + def link_azure_monitor_profile_artifacts(cmd, cluster_subscription, cluster_resource_group_name, @@ -455,6 +618,7 @@ def link_azure_monitor_profile_artifacts(cmd, cluster_region, raw_parameters, ): + print("Calling link_azure_monitor_profile_artifacts...") # MAC creation if required @@ -481,7 +645,9 @@ def link_azure_monitor_profile_artifacts(cmd, # Link grafana isGrafanaLinkSuccessful = link_grafana_instance(cmd, raw_parameters, mac_resource_id) print(isGrafanaLinkSuccessful) - # raise CLIError("STOOOOOOOOOOOOOOOOOOOOOOOP") + + # create recording rules and alerts + create_rules(cmd, cluster_region, cluster_subscription, cluster_resource_group_name, cluster_name, mac_resource_id, mac_region) def unlink_azure_monitor_profile_artifacts(cmd, cluster_subscription, diff --git a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py index d0306f47758..855155d8936 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -19,6 +19,9 @@ from azure.cli.command_modules.acs._validators import ( extract_comma_separated_string, ) +from azext_aks_preview.azuremonitorprofile import ( + validate_ksm_parameter +) from azure.cli.command_modules.acs.managed_cluster_decorator import ( AKSManagedClusterContext, AKSManagedClusterCreateDecorator, @@ -1777,16 +1780,11 @@ def set_up_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: metriclabelsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metriclabelsallowlist") metricannotationsallowlist = self._AKSPreviewManagedClusterCreateDecorator__raw_parameters.get("metricannotationsallowlist") - if metriclabelsallowlist is None: - metriclabelsallowlist = "" - - if metricannotationsallowlist is None: - metricannotationsallowlist = "" + print("REACHES HERE 2") - # normalize - ## DO VALIDATION HERE - # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) - # metricannotationsallowlist = extract_comma_separated_string(metricannotationsallowlist, keep_none=True, default_value=[]) + # Validate Param + metriclabelsallowlist = validate_ksm_parameter(metriclabelsallowlist) + metricannotationsallowlist = validate_ksm_parameter(metricannotationsallowlist) if self.context.get_enable_azure_monitor_metrics(): if mc.azure_monitor_profile is None: @@ -2146,16 +2144,9 @@ def update_azure_monitor_profile(self, mc: ManagedCluster) -> ManagedCluster: metriclabelsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metriclabelsallowlist") metricannotationsallowlist = self._AKSPreviewManagedClusterUpdateDecorator__raw_parameters.get("metricannotationsallowlist") - if metriclabelsallowlist is None: - metriclabelsallowlist = "" - - if metricannotationsallowlist is None: - metricannotationsallowlist = "" - - # normalize - ## DO VALIDATION HERE - # metriclabelsallowlist = extract_comma_separated_string(metriclabelsallowlist, keep_none=True, default_value=[]) - # metricannotationsallowlist = extract_comma_separated_string(metricannotationsallowlist, keep_none=True, default_value=[]) + # Validate Param + metriclabelsallowlist = validate_ksm_parameter(metriclabelsallowlist) + metricannotationsallowlist = validate_ksm_parameter(metricannotationsallowlist) if self.context.get_enable_azure_monitor_metrics(): if mc.azure_monitor_profile is None: From c0aa28b4442989a1ed39a84d9d227f7bb80551b5 Mon Sep 17 00:00:00 2001 From: bragi92 Date: Mon, 15 Aug 2022 16:22:58 -0700 Subject: [PATCH 022/109] new whl file --- .../aks_preview-0.5.92-py2.py3-none-any.whl | Bin 573884 -> 574912 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl b/src/aks-preview/dist/aks_preview-0.5.92-py2.py3-none-any.whl index 7fe0efd7ef554e58fcd49a86438e221013cced3a..371c1ad0dd8245bcf51b60305ae75409884e440c 100644 GIT binary patch delta 28635 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 JN?SOH|39)>DYF0o delta 27422 zcmV()Be0I=5nK@qRntNwXHO9T02^2U04SFscmWodfN%&Ef8{*;Z`(N1 zzZdBLz*BxW2Nyf9_PPxaEWD1J`mTALoow$z5EzU^C)&u8j+F9fkpKN=C{m&*$*(l+ z;yz(FwZ-9ZW;kzAUL);SyxzW9BfThoDwJLVl4lXJS4;qB}~ktKbV^k9z_Y6 zM4SW}42;9KX|^che_iJNDR7vOKSUJ1eKXyJin-zezYkh-^>H1Pus+WRu-a~^R8K){U>E2 zF=uwht{fUqsGCImQBSyL$ryGZO1aB~f>Bdgm`*iVA3kfA{0Dva-cN4EQs z1p0EKs9*!wjZpZBf5#Bl5lqVEm8QP;_Kn0r4mq9Bkbd#Q+g2HUs{zdh5eeUr6t1uD zy?sOAavW!r&?FTkf0}5NpcCOONg}B*r$8x#4*=2iJlrldE&HH0hU^nZeN+Q#>u^AQ zR0G{F!+!VR|4xVfQUCZ1$IEvV*zw6}ci25T9iIF?IOrcBoOR1VZ8)OwS=0+60lRqA z?G4#AC@=s&WmqJwGzGqC;8W0a{NU^nhfx7cI~y~=cILt1f7m=2&=(M1GvF1c-~2#A zH9)wqBi@4L`%qk$+S~av}w+!j- zl!hmqhAuPsZCE3N%O%$U^#_e;1yczNyT&