From 73b778d0b50682d506e8dc64c519aa020cc8e4ac Mon Sep 17 00:00:00 2001 From: Fuming Zhang Date: Mon, 12 Dec 2022 10:24:07 +0800 Subject: [PATCH] GA file, blob csi driver and snapshot controller --- src/aks-preview/HISTORY.rst | 4 +- .../managed_cluster_decorator.py | 129 +------ .../latest/test_managed_cluster_decorator.py | 315 ------------------ 3 files changed, 6 insertions(+), 442 deletions(-) diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index 5f30b377b35..cbee2a5c87e 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -12,13 +12,13 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ -* Update the minimum required cli core version to `2.43.0`. +* GA file, blob csi driver and snapshot controller. 0.5.119 +++++++ * Add `--custom-ca-trust-certificates` option for custom CA in aks create and aks update -* Bumped dependency on azure-cli-core +* Update the minimum required cli core version to `2.43.0`. 0.5.118 +++++++ 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 9f2f276e5f5..df9494784f4 100644 --- a/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/managed_cluster_decorator.py @@ -1300,133 +1300,16 @@ def get_disk_driver(self) -> Optional[ManagedClusterStorageProfileDiskCSIDriver] if disk_driver_version: profile.version = disk_driver_version elif disable_disk_driver: - msg = "Please make sure there are no existing PVs and PVCs that are used by AzureDisk CSI driver before disabling." - if not self.get_yes() and not prompt_y_n(msg, default="n"): - raise DecoratorEarlyExitException() - profile.enabled = False - - return profile - - def get_file_driver(self) -> Optional[ManagedClusterStorageProfileFileCSIDriver]: - """Obtain the value of storage_profile.file_csi_driver - - :return: Optional[ManagedClusterStorageProfileFileCSIDriver] - """ - enable_file_driver = self.raw_param.get("enable_file_driver") - disable_file_driver = self.raw_param.get("disable_file_driver") - - if not enable_file_driver and not disable_file_driver: - return None - profile = self.models.ManagedClusterStorageProfileFileCSIDriver() - - if enable_file_driver and disable_file_driver: - raise MutuallyExclusiveArgumentError( - "Cannot specify --enable-file-driver and " - "--disable-file-driver at the same time." - ) - - if self.decorator_mode == DecoratorMode.CREATE: - if disable_file_driver: - profile.enabled = False - - if self.decorator_mode == DecoratorMode.UPDATE: - if enable_file_driver: - profile.enabled = True - elif disable_file_driver: - msg = "Please make sure there are no existing PVs and PVCs that are used by AzureFile CSI driver before disabling." - if not self.get_yes() and not prompt_y_n(msg, default="n"): - raise DecoratorEarlyExitException() - profile.enabled = False - - return profile - - def get_blob_driver(self) -> Optional[ManagedClusterStorageProfileBlobCSIDriver]: - """Obtain the value of storage_profile.blob_csi_driver - - :return: Optional[ManagedClusterStorageProfileBlobCSIDriver] - """ - enable_blob_driver = self.raw_param.get("enable_blob_driver") - disable_blob_driver = self.raw_param.get("disable_blob_driver") - - if enable_blob_driver is None and disable_blob_driver is None: - return None - - profile = self.models.ManagedClusterStorageProfileBlobCSIDriver() - - if enable_blob_driver and disable_blob_driver: - raise MutuallyExclusiveArgumentError( - "Cannot specify --enable-blob-driver and " - "--disable-blob-driver at the same time." - ) - - if self.decorator_mode == DecoratorMode.CREATE: - if enable_blob_driver: - profile.enabled = True - - if self.decorator_mode == DecoratorMode.UPDATE: - if enable_blob_driver: - msg = "Please make sure there is no open-source Blob CSI driver installed before enabling." - if not self.get_yes() and not prompt_y_n(msg, default="n"): - raise DecoratorEarlyExitException() - profile.enabled = True - elif disable_blob_driver: - msg = "Please make sure there are no existing PVs and PVCs that are used by Blob CSI driver before disabling." - if not self.get_yes() and not prompt_y_n(msg, default="n"): - raise DecoratorEarlyExitException() - profile.enabled = False - - return profile - - def get_snapshot_controller(self) -> Optional[ManagedClusterStorageProfileSnapshotController]: - """Obtain the value of storage_profile.snapshot_controller - - :return: Optional[ManagedClusterStorageProfileSnapshotController] - """ - enable_snapshot_controller = self.raw_param.get("enable_snapshot_controller") - disable_snapshot_controller = self.raw_param.get("disable_snapshot_controller") - - if not enable_snapshot_controller and not disable_snapshot_controller: - return None - - profile = self.models.ManagedClusterStorageProfileSnapshotController() - - if enable_snapshot_controller and disable_snapshot_controller: - raise MutuallyExclusiveArgumentError( - "Cannot specify --enable-snapshot_controller and " - "--disable-snapshot_controller at the same time." - ) - - if self.decorator_mode == DecoratorMode.CREATE: - if disable_snapshot_controller: - profile.enabled = False - - if self.decorator_mode == DecoratorMode.UPDATE: - if enable_snapshot_controller: - profile.enabled = True - elif disable_snapshot_controller: - msg = "Please make sure there are no existing VolumeSnapshots, VolumeSnapshotClasses and VolumeSnapshotContents " \ - "that are used by the snapshot controller before disabling." + msg = ( + "Please make sure there are no existing PVs and PVCs " + "that are used by AzureDisk CSI driver before disabling." + ) if not self.get_yes() and not prompt_y_n(msg, default="n"): raise DecoratorEarlyExitException() profile.enabled = False return profile - def get_storage_profile(self) -> Optional[ManagedClusterStorageProfile]: - """Obtain the value of storage_profile. - - :return: Optional[ManagedClusterStorageProfile] - """ - profile = self.models.ManagedClusterStorageProfile() - if self.mc.storage_profile is not None: - profile = self.mc.storage_profile - profile.disk_csi_driver = self.get_disk_driver() - profile.file_csi_driver = self.get_file_driver() - profile.blob_csi_driver = self.get_blob_driver() - profile.snapshot_controller = self.get_snapshot_controller() - - return profile - def _get_enable_apiserver_vnet_integration(self, enable_validation: bool = False) -> bool: """Internal function to obtain the value of enable_apiserver_vnet_integration. @@ -2678,8 +2561,6 @@ def construct_mc_profile_preview(self, bypass_restore_defaults: bool = False) -> mc = self.set_up_image_cleaner(mc) # set up cluster snapshot mc = self.set_up_creationdata_of_cluster_snapshot(mc) - # set up storage profile - mc = self.set_up_storage_profile(mc) # set up ingress web app routing profile mc = self.set_up_ingress_web_app_routing(mc) # set up workload auto scaler profile @@ -3291,8 +3172,6 @@ def update_mc_profile_preview(self) -> ManagedCluster: mc = self.update_node_restriction(mc) # update image cleaner mc = self.update_image_cleaner(mc) - # update stroage profile - mc = self.update_storage_profile(mc) # update workload auto scaler profile mc = self.update_workload_auto_scaler_profile(mc) # update azure monitor metrics profile diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py b/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py index 65d455cf565..7077df3d63b 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_managed_cluster_decorator.py @@ -1936,253 +1936,6 @@ def test_get_disk_driver(self): ctx_7.get_disk_driver(), ground_truth_disk_csi_driver_7 ) - def test_get_file_driver(self): - ctx_1 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict( - { - "enable_file_driver": True, - "disable_file_driver": True, - } - ), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - # fail on mutually exclusive enable_file_driver and disable_file_driver - with self.assertRaises(MutuallyExclusiveArgumentError): - ctx_1.get_file_driver() - - # fail on prompt_y_n not specified when disabling file driver - ctx_2 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "disable_file_driver": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - with patch( - "azext_aks_preview.managed_cluster_decorator.prompt_y_n", - return_value=False, - ), self.assertRaises(DecoratorEarlyExitException): - ctx_2.get_file_driver() - - def test_get_snapshot_controller(self): - ctx_1 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict( - { - "enable_snapshot_controller": True, - "disable_snapshot_controller": True, - } - ), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - # fail on mutually exclusive enable_snapshot_controller and disable_snapshot_controller - with self.assertRaises(MutuallyExclusiveArgumentError): - ctx_1.get_snapshot_controller() - - # fail on prompt_y_n not specified when disabling snapshot controller - ctx_2 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "disable_snapshot_controller": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - with patch( - "azext_aks_preview.managed_cluster_decorator.prompt_y_n", - return_value=False, - ), self.assertRaises(DecoratorEarlyExitException): - ctx_2.get_snapshot_controller() - - def test_get_blob_driver(self): - ctx_1 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict( - { - "enable_blob_driver": True, - "disable_blob_driver": True, - } - ), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - # fail on mutually exclusive enable_blob_driver and disable_blob_driver - with self.assertRaises(MutuallyExclusiveArgumentError): - ctx_1.get_blob_driver() - - # fail on prompt_y_n not specified when disabling blob driver - ctx_2 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "disable_blob_driver": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - with patch( - "azext_aks_preview.managed_cluster_decorator.prompt_y_n", - return_value=False, - ), self.assertRaises(DecoratorEarlyExitException): - ctx_2.get_blob_driver() - - # fail on prompt_y_n not specified when enabling blob driver - ctx_3 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "enable_blob_driver": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - with patch( - "azext_aks_preview.managed_cluster_decorator.prompt_y_n", - return_value=False, - ), self.assertRaises(DecoratorEarlyExitException): - ctx_3.get_blob_driver() - - # create with blob driver enabled - ctx_4 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "enable_blob_driver": True, - }), - self.models, - decorator_mode=DecoratorMode.CREATE, - ) - mc_1 = self.models.ManagedCluster( - location="test_location", - ) - ctx_4.attach_mc(mc_1) - storage_profile_1 = self.models.ManagedClusterStorageProfile( - blob_csi_driver=self.models.ManagedClusterStorageProfileBlobCSIDriver( - enabled=True, - ), - ) - self.assertEqual(ctx_4.get_storage_profile(), storage_profile_1) - - # create without blob driver enabled - ctx_5 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({}), - self.models, - decorator_mode=DecoratorMode.CREATE, - ) - mc_1 = self.models.ManagedCluster( - location="test_location", - ) - ctx_5.attach_mc(mc_1) - storage_profile_2 = self.models.ManagedClusterStorageProfile( - blob_csi_driver=None, - ) - self.assertEqual(ctx_5.get_storage_profile(), storage_profile_2) - - # update blob driver enabled - ctx_6 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "enable_blob_driver": True, - "yes": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - mc_1 = self.models.ManagedCluster( - location="test_location", - ) - ctx_6.attach_mc(mc_1) - storage_profile_3 = self.models.ManagedClusterStorageProfile( - blob_csi_driver=self.models.ManagedClusterStorageProfileBlobCSIDriver( - enabled=True, - ), - ) - self.assertEqual(ctx_6.get_storage_profile(), storage_profile_3) - - # update blob driver disabled - ctx_7 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "disable_blob_driver": True, - "yes": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - mc_1 = self.models.ManagedCluster( - location="test_location", - ) - ctx_7.attach_mc(mc_1) - storage_profile_4 = self.models.ManagedClusterStorageProfile( - blob_csi_driver=self.models.ManagedClusterStorageProfileBlobCSIDriver( - enabled=False, - ), - ) - self.assertEqual(ctx_7.get_storage_profile(), storage_profile_4) - - def test_get_storage_profile(self): - # create - ctx_1 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "disable_disk_driver": True, - }), - self.models, - decorator_mode=DecoratorMode.CREATE, - ) - mc_1 = self.models.ManagedCluster( - location="test_location", - ) - ctx_1.attach_mc(mc_1) - ground_truth_storage_profile_1 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver( - enabled=False, - ), - file_csi_driver=None, - snapshot_controller=None, - ) - self.assertEqual(ctx_1.get_storage_profile(), ground_truth_storage_profile_1) - - # update - ctx_2 = AKSPreviewManagedClusterContext( - self.cmd, - AKSManagedClusterParamDict({ - "enable_file_driver": True, - "disable_snapshot_controller": True, - "yes": True, - }), - self.models, - decorator_mode=DecoratorMode.UPDATE, - ) - storage_profile_2 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver( - enabled=True, - ), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver( - enabled=False, - ), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController( - enabled=True, - ), - ) - mc_2 = self.models.ManagedCluster( - location="test_location", - storage_profile=storage_profile_2, - ) - ctx_2.attach_mc(mc_2) - ground_truth_storage_profile_2 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=None, - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver( - enabled=True, - ), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController( - enabled=False, - ), - ) - self.assertEqual(ctx_2.get_storage_profile(), ground_truth_storage_profile_2) - def test_get_enable_apiserver_vnet_integration(self): ctx_0 = AKSPreviewManagedClusterContext( self.cmd, @@ -3985,24 +3738,6 @@ def test_set_up_creationdata_of_cluster_snapshot(self): ground_truth_mc_1 = self.models.ManagedCluster(location="test_location", creation_data=cd) self.assertEqual(dec_mc_1, ground_truth_mc_1) - def test_set_up_storage_profile(self): - dec_1 = AKSPreviewManagedClusterCreateDecorator( - self.cmd, - self.client, - {"disable_disk_driver": True, "disable_file_driver": True, "disable_snapshot_controller": True}, - CUSTOM_MGMT_AKS_PREVIEW, - ) - mc_1 = self.models.ManagedCluster(location="test_location") - dec_1.context.attach_mc(mc_1) - dec_mc_1 = dec_1.set_up_storage_profile(mc_1) - storage_profile_1 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver(enabled=False), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver(enabled=False), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController(enabled=False), - ) - ground_truth_mc_1 = self.models.ManagedCluster(location="test_location", storage_profile=storage_profile_1) - self.assertEqual(dec_mc_1, ground_truth_mc_1) - def test_set_up_custom_ca_trust_certificates(self): dec_1 = AKSPreviewManagedClusterCreateDecorator( self.cmd, @@ -5482,56 +5217,6 @@ def test_update_azure_keyvault_kms(self): ) self.assertEqual(dec_mc_7, ground_truth_mc_7) - - def test_update_storage_profile(self): - dec_1 = AKSPreviewManagedClusterUpdateDecorator( - self.cmd, - self.client, - {"disable_disk_driver": True, "disable_file_driver": True, "disable_snapshot_controller": True, "yes": True}, - CUSTOM_MGMT_AKS_PREVIEW, - ) - storage_profile_1 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver(enabled=True), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver(enabled=True), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController(enabled=True), - ) - mc_1 = self.models.ManagedCluster(location="test_location", storage_profile=storage_profile_1) - dec_1.context.attach_mc(mc_1) - dec_mc_1 = dec_1.update_storage_profile(mc_1) - ground_truth_storage_profile_1 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver(enabled=False), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver(enabled=False), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController(enabled=False), - ) - ground_truth_mc_1 = self.models.ManagedCluster( - location="test_location", storage_profile=ground_truth_storage_profile_1 - ) - self.assertEqual(dec_mc_1, ground_truth_mc_1) - - dec_2 = AKSPreviewManagedClusterUpdateDecorator( - self.cmd, - self.client, - {"enable_disk_driver": True, "enable_file_driver": True, "enable_snapshot_controller": True}, - CUSTOM_MGMT_AKS_PREVIEW, - ) - storage_profile_2 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver(enabled=False), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver(enabled=False), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController(enabled=False), - ) - mc_2 = self.models.ManagedCluster(location="test_location", storage_profile=storage_profile_2) - dec_2.context.attach_mc(mc_2) - dec_mc_2 = dec_2.update_storage_profile(mc_2) - ground_truth_storage_profile_2 = self.models.ManagedClusterStorageProfile( - disk_csi_driver=self.models.ManagedClusterStorageProfileDiskCSIDriver(enabled=True), - file_csi_driver=self.models.ManagedClusterStorageProfileFileCSIDriver(enabled=True), - snapshot_controller=self.models.ManagedClusterStorageProfileSnapshotController(enabled=True), - ) - ground_truth_mc_2 = self.models.ManagedCluster( - location="test_location", storage_profile=ground_truth_storage_profile_2 - ) - self.assertEqual(dec_mc_2, ground_truth_mc_2) - def test_update_workload_auto_scaler_profile(self): # Throws exception when incorrect mc object is passed. dec_1 = AKSPreviewManagedClusterUpdateDecorator(self.cmd, self.client, {}, CUSTOM_MGMT_AKS_PREVIEW)