diff --git a/src/aks-preview/HISTORY.rst b/src/aks-preview/HISTORY.rst index a5333129fde..3fbfe1c44c7 100644 --- a/src/aks-preview/HISTORY.rst +++ b/src/aks-preview/HISTORY.rst @@ -12,6 +12,10 @@ To release a new version, please select a new version number (usually plus 1 to Pending +++++++ +22.0.0b12 ++++++++++ +* `az aks nodepool add/update`: Add `--gpu-mig-profiles` to configure an ordered list of NVIDIA MIG partition profiles. + 22.0.0b11 +++++++++ * `az aks nodepool update`: Add `--node-public-ip-prefix-ids` to add or replace the dual-stack node public IP prefixes on an existing node pool. An accepted change rolls the pool so existing nodes are recreated with the new public IPs. Requires the ``NodePublicIPv6PrefixPreview`` feature flag. diff --git a/src/aks-preview/azext_aks_preview/_help.py b/src/aks-preview/azext_aks_preview/_help.py index 679fb8f4313..ffcef59e905 100644 --- a/src/aks-preview/azext_aks_preview/_help.py +++ b/src/aks-preview/azext_aks_preview/_help.py @@ -2632,6 +2632,10 @@ - name: --gpu-mig-strategy type: string short-summary: Specify the MIG (Multi-Instance GPU) strategy for managed MIG support. Valid values are "Single" and "Mixed". When not specified, managed MIG is disabled. + - name: --gpu-mig-profiles + type: string array + short-summary: Space-separated ordered list of MIG partition profiles. Valid values are "MIG1g", "MIG2g", "MIG3g", "MIG4g", and "MIG7g". + long-summary: Duplicate profiles are allowed and meaningful. "Single" accepts one profile; "Mixed" accepts an ordered profile layout. This option cannot be used with --gpu-instance-profile. The service validates the VM size and profile layout. - name: --ssh-access type: string short-summary: Configure SSH setting for the node pool. Use "disabled" to disable SSH access, "localuser" to enable SSH access using private key. @@ -2718,6 +2722,8 @@ text: az aks nodepool add -g MyResourceGroup -n managedsystem1 --cluster-name MyManagedCluster --mode ManagedSystem - name: Create a node pool with blue-green upgrade strategy and default parameters text: az aks nodepool add -g MyResourceGroup -n nodepool1 --cluster-name MyManagedCluster --upgrade-strategy BlueGreen + - name: Create a node pool with an ordered mixed MIG profile layout + text: az aks nodepool add -g MyResourceGroup -n nodepool1 --cluster-name MyManagedCluster --enable-managed-gpu --gpu-mig-strategy Mixed --gpu-mig-profiles MIG1g MIG2g MIG2g MIG2g """ helps['aks nodepool scale'] = """ @@ -2797,6 +2803,10 @@ short-summary: Update a node pool properties. long-summary: Update a node pool to enable/disable cluster-autoscaler or change min-count or max-count. When called with no optional arguments this attempts to move the node pool to its goal state without changing the current node pool configuration. This can be used to move out of a non succeeded state. parameters: + - name: --gpu-mig-profiles + type: string array + short-summary: Space-separated ordered list of MIG partition profiles. Valid values are "MIG1g", "MIG2g", "MIG3g", "MIG4g", and "MIG7g". + long-summary: Duplicate profiles are allowed and meaningful. The service rejects changes to this immutable property. This option cannot be used with --gpu-instance-profile. - name: --enable-cluster-autoscaler -e type: bool short-summary: Enable cluster autoscaler. For VMSS pools, enables autoscaler on the pool. For VirtualMachines pools, converts all manual scale profiles to autoscale profiles using the same min/max counts. diff --git a/src/aks-preview/azext_aks_preview/_params.py b/src/aks-preview/azext_aks_preview/_params.py index 40dcf485c76..4c764f4db30 100644 --- a/src/aks-preview/azext_aks_preview/_params.py +++ b/src/aks-preview/azext_aks_preview/_params.py @@ -2516,6 +2516,13 @@ def load_arguments(self, _): is_preview=True, help="Specify the GPU Multi-Instance GPU (MIG) strategy. Allowed values: Single, Mixed.", ) + c.argument( + "gpu_mig_profiles", + arg_type=get_enum_type(gpu_instance_profiles), + nargs="+", + is_preview=True, + help="Space-separated ordered list of GPU MIG profiles. Allowed values: MIG1g, MIG2g, MIG3g, MIG4g, MIG7g.", + ) # in creation scenario, use "localuser" as default c.argument( 'ssh_access', @@ -2723,6 +2730,13 @@ def load_arguments(self, _): is_preview=True, help="Specify the GPU Multi-Instance GPU (MIG) strategy. Allowed values: Single, Mixed.", ) + c.argument( + "gpu_mig_profiles", + arg_type=get_enum_type(gpu_instance_profiles), + nargs="+", + is_preview=True, + help="Space-separated ordered list of GPU MIG profiles. Allowed values: MIG1g, MIG2g, MIG3g, MIG4g, MIG7g.", + ) # prepared image specification c.argument( 'prepared_image_specification_id', diff --git a/src/aks-preview/azext_aks_preview/agentpool_decorator.py b/src/aks-preview/azext_aks_preview/agentpool_decorator.py index f4bb0b1ecb0..5a969b7a99d 100644 --- a/src/aks-preview/azext_aks_preview/agentpool_decorator.py +++ b/src/aks-preview/azext_aks_preview/agentpool_decorator.py @@ -858,6 +858,23 @@ def get_gpu_mig_strategy(self) -> Union[str, None]: return gpu_mig_strategy + def get_gpu_mig_profiles(self) -> Union[List[str], None]: + """Obtain the value of gpu_mig_profiles. + :return: list of strings or None + """ + gpu_mig_profiles = self.raw_param.get("gpu_mig_profiles") + + if self.decorator_mode == DecoratorMode.CREATE: + if ( + self.agentpool and + self.agentpool.gpu_profile is not None and + self.agentpool.gpu_profile.nvidia is not None and + self.agentpool.gpu_profile.nvidia.mig_profiles is not None + ): + gpu_mig_profiles = self.agentpool.gpu_profile.nvidia.mig_profiles + + return gpu_mig_profiles + def get_enable_secure_boot(self) -> bool: """Obtain the value of enable_secure_boot. :return: bool @@ -1595,6 +1612,20 @@ def set_up_gpu_mig_strategy(self, agentpool: AgentPool) -> AgentPool: agentpool.gpu_profile.driver = CONST_GPU_DRIVER_INSTALL return agentpool + def set_up_gpu_mig_profiles(self, agentpool: AgentPool) -> AgentPool: + """Set up gpu mig profiles for the AgentPool object.""" + self._ensure_agentpool(agentpool) + + gpu_mig_profiles = self.context.get_gpu_mig_profiles() + if gpu_mig_profiles is not None: + if agentpool.gpu_profile is None: + agentpool.gpu_profile = self.models.GPUProfile() # pylint: disable=no-member + if agentpool.gpu_profile.nvidia is None: + agentpool.gpu_profile.nvidia = self.models.NvidiaGPUProfile() # pylint: disable=no-member + agentpool.gpu_profile.nvidia.mig_profiles = gpu_mig_profiles + agentpool.gpu_profile.driver = CONST_GPU_DRIVER_INSTALL + return agentpool + def set_up_pod_ip_allocation_mode(self, agentpool: AgentPool) -> AgentPool: """Set up pod ip allocation mode for the AgentPool object.""" self._ensure_agentpool(agentpool) @@ -1796,6 +1827,8 @@ def construct_agentpool_profile_preview(self) -> AgentPool: agentpool = self.set_up_driver_type(agentpool) # set up gpu_mig_strategy agentpool = self.set_up_gpu_mig_strategy(agentpool) + # set up gpu_mig_profiles + agentpool = self.set_up_gpu_mig_profiles(agentpool) # set up agentpool ssh access agentpool = self.set_up_ssh_access(agentpool) # set up agentpool pod ip allocation mode @@ -2020,6 +2053,20 @@ def update_gpu_mig_strategy(self, agentpool: AgentPool) -> AgentPool: agentpool.gpu_profile.driver = CONST_GPU_DRIVER_INSTALL return agentpool + def update_gpu_mig_profiles(self, agentpool: AgentPool) -> AgentPool: + """Update gpu mig profiles for the AgentPool object.""" + self._ensure_agentpool(agentpool) + + gpu_mig_profiles = self.context.get_gpu_mig_profiles() + if gpu_mig_profiles is not None: + if agentpool.gpu_profile is None: + agentpool.gpu_profile = self.models.GPUProfile() # pylint: disable=no-member + if agentpool.gpu_profile.nvidia is None: + agentpool.gpu_profile.nvidia = self.models.NvidiaGPUProfile() # pylint: disable=no-member + agentpool.gpu_profile.nvidia.mig_profiles = gpu_mig_profiles + agentpool.gpu_profile.driver = CONST_GPU_DRIVER_INSTALL + return agentpool + def update_artifact_streaming(self, agentpool: AgentPool) -> AgentPool: """Update artifact streaming property for the AgentPool object. :return: the AgentPool object @@ -2296,6 +2343,9 @@ def update_agentpool_profile_preview(self, agentpools: List[AgentPool] = None) - # update gpu mig strategy agentpool = self.update_gpu_mig_strategy(agentpool) + # update gpu mig profiles + agentpool = self.update_gpu_mig_profiles(agentpool) + # update crg id agentpool = self.update_crg(agentpool) diff --git a/src/aks-preview/azext_aks_preview/custom.py b/src/aks-preview/azext_aks_preview/custom.py index 7e39a410b59..31b6c79debc 100644 --- a/src/aks-preview/azext_aks_preview/custom.py +++ b/src/aks-preview/azext_aks_preview/custom.py @@ -2325,6 +2325,7 @@ def aks_agentpool_add( gpu_driver=None, driver_type=None, gpu_mig_strategy=None, + gpu_mig_profiles=None, ssh_access=CONST_SSH_ACCESS_LOCALUSER, # trusted launch enable_secure_boot=False, @@ -2426,6 +2427,7 @@ def aks_agentpool_update( zones=None, gpu_driver=None, gpu_mig_strategy=None, + gpu_mig_profiles=None, # crg crg_id=None, # prepared image specification diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_decorator.py b/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_decorator.py index 2551cd2b265..e6957822271 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_decorator.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_decorator.py @@ -631,6 +631,35 @@ def common_get_gpu_mig_strategy(self): ctx_0.attach_agentpool(agentpool_0) self.assertEqual(ctx_0.get_gpu_mig_strategy(), "Single") + def common_get_gpu_mig_profiles(self): + profiles = ["MIG1g", "MIG2g", "MIG2g", "MIG2g"] + ctx = AKSPreviewAgentPoolContext( + self.cmd, + AKSAgentPoolParamDict({"gpu_mig_profiles": None}), + self.models, + DecoratorMode.CREATE, + self.agentpool_decorator_mode, + ) + self.assertIsNone(ctx.get_gpu_mig_profiles()) + + agentpool = self.create_initialized_agentpool_instance( + gpu_profile=self.models.GPUProfile( + nvidia=self.models.NvidiaGPUProfile(mig_profiles=profiles) + ) + ) + ctx.attach_agentpool(agentpool) + self.assertEqual(ctx.get_gpu_mig_profiles(), profiles) + + requested_profiles = ["MIG7g", "MIG1g"] + ctx = AKSPreviewAgentPoolContext( + self.cmd, + AKSAgentPoolParamDict({"gpu_mig_profiles": requested_profiles}), + self.models, + DecoratorMode.CREATE, + self.agentpool_decorator_mode, + ) + self.assertEqual(ctx.get_gpu_mig_profiles(), requested_profiles) + def common_get_os_sku(self): # default ctx_1 = AKSPreviewAgentPoolContext( @@ -1471,6 +1500,9 @@ def test_get_driver_type(self): def test_get_gpu_mig_strategy(self): self.common_get_gpu_mig_strategy() + def test_get_gpu_mig_profiles(self): + self.common_get_gpu_mig_profiles() + def test_get_enable_secure_boot(self): self.common_get_enable_secure_boot() @@ -2035,6 +2067,52 @@ def common_set_up_gpu_profile(self): ) self.assertEqual(dec_agentpool_1, ground_truth_agentpool_1) + def common_set_up_gpu_mig_profiles(self): + profiles = ["MIG1g", "MIG2g", "MIG2g", "MIG2g"] + dec = AKSPreviewAgentPoolAddDecorator( + self.cmd, + self.client, + { + "gpu_mig_strategy": "Mixed", + "gpu_mig_profiles": profiles, + }, + self.resource_type, + self.agentpool_decorator_mode, + ) + with self.assertRaises(CLIInternalError): + dec.set_up_gpu_mig_profiles(None) + + agentpool = self.create_initialized_agentpool_instance( + restore_defaults=False, + gpu_profile=self.models.GPUProfile( + nvidia=self.models.NvidiaGPUProfile(management_mode="Managed") + ), + ) + dec.context.attach_agentpool(agentpool) + agentpool = dec.set_up_gpu_mig_strategy(agentpool) + agentpool = dec.set_up_gpu_mig_profiles(agentpool) + + self.assertEqual(agentpool.gpu_profile.driver, CONST_GPU_DRIVER_INSTALL) + self.assertEqual(agentpool.gpu_profile.nvidia.management_mode, "Managed") + self.assertEqual(agentpool.gpu_profile.nvidia.mig_strategy, "Mixed") + self.assertEqual(agentpool.gpu_profile.nvidia.mig_profiles, profiles) + self.assertEqual( + agentpool.as_dict()["properties"]["gpuProfile"]["nvidia"]["migProfiles"], + profiles, + ) + + omitted = AKSPreviewAgentPoolAddDecorator( + self.cmd, + self.client, + {"gpu_mig_profiles": None}, + self.resource_type, + self.agentpool_decorator_mode, + ) + agentpool_without_gpu = self.create_initialized_agentpool_instance(restore_defaults=False) + omitted.context.attach_agentpool(agentpool_without_gpu) + omitted.set_up_gpu_mig_profiles(agentpool_without_gpu) + self.assertIsNone(agentpool_without_gpu.gpu_profile) + def common_set_up_secure_boot(self): dec_1 = AKSPreviewAgentPoolAddDecorator( self.cmd, @@ -2578,6 +2656,9 @@ def test_set_up_skip_gpu_driver_install(self): def test_set_up_gpu_profile(self): self.common_set_up_gpu_profile() + def test_set_up_gpu_mig_profiles(self): + self.common_set_up_gpu_mig_profiles() + def test_set_up_secure_boot(self): self.common_set_up_secure_boot() @@ -3801,6 +3882,51 @@ def common_update_gpu_profile(self): ) self.assertEqual(dec_agentpool_1, ground_truth_agentpool_1) + def common_update_gpu_mig_profiles(self): + existing_profiles = ["MIG7g"] + agentpool = self.create_initialized_agentpool_instance( + gpu_profile=self.models.GPUProfile( + driver=CONST_GPU_DRIVER_INSTALL, + nvidia=self.models.NvidiaGPUProfile( + management_mode="Managed", + mig_strategy="Single", + mig_profiles=existing_profiles, + ), + ) + ) + + omitted = AKSPreviewAgentPoolUpdateDecorator( + self.cmd, + self.client, + {"gpu_mig_profiles": None}, + self.resource_type, + self.agentpool_decorator_mode, + ) + with self.assertRaises(CLIInternalError): + omitted.update_gpu_mig_profiles(None) + omitted.context.attach_agentpool(agentpool) + omitted.update_gpu_mig_profiles(agentpool) + self.assertEqual(agentpool.gpu_profile.nvidia.mig_profiles, existing_profiles) + + profiles = ["MIG1g", "MIG2g", "MIG2g", "MIG2g"] + requested = AKSPreviewAgentPoolUpdateDecorator( + self.cmd, + self.client, + {"gpu_mig_profiles": profiles}, + self.resource_type, + self.agentpool_decorator_mode, + ) + requested.context.attach_agentpool(agentpool) + requested.update_gpu_mig_profiles(agentpool) + self.assertEqual(agentpool.gpu_profile.nvidia.mig_profiles, profiles) + self.assertEqual(agentpool.gpu_profile.nvidia.management_mode, "Managed") + self.assertEqual(agentpool.gpu_profile.nvidia.mig_strategy, "Single") + + payload = agentpool.as_dict() + if self.agentpool_decorator_mode == AgentPoolDecoratorMode.STANDALONE: + payload = payload["properties"] + self.assertEqual(payload["gpuProfile"]["nvidia"]["migProfiles"], profiles) + def common_test_process_dns_overrides_helper(self): from azext_aks_preview._helpers import process_dns_overrides @@ -3903,6 +4029,9 @@ def test_update_localdns_profile(self): def test_update_gpu_profile(self): self.common_update_gpu_profile() + def test_update_gpu_mig_profiles(self): + self.common_update_gpu_mig_profiles() + def test_process_dns_overrides_helper(self): self.common_test_process_dns_overrides_helper() @@ -4013,6 +4142,9 @@ def test_process_dns_overrides_helper(self): def test_update_gpu_profile(self): self.common_update_gpu_profile() + def test_update_gpu_mig_profiles(self): + self.common_update_gpu_mig_profiles() + def test_update_agentpool_profile_preview(self): import inspect diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_update.py b/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_update.py index 70a9d6cff5f..a64a76aecd4 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_update.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_agentpool_update.py @@ -4,7 +4,7 @@ # -------------------------------------------------------------------------------------------- import unittest -from unittest.mock import Mock +from unittest.mock import Mock, patch from azext_aks_preview import ContainerServiceCommandsLoader, register_aks_preview_resource_type from azext_aks_preview._client_factory import CUSTOM_MGMT_AKS_PREVIEW @@ -150,3 +150,39 @@ def test_managed_gpu_command_argument_preserves_three_states(self): parsed = parser.parse_args(args + flags) self.assertIs(parsed.enable_managed_gpu, expected) self.assertTrue(parsed.enable_cluster_autoscaler) + + def test_gpu_mig_profiles_argument_preserves_order_and_duplicates(self): + cli_ctx = self.cmd.cli_ctx + parser = AzCliCommandParser(cli_ctx=cli_ctx) + command_name = "aks nodepool update" + cli_ctx.invocation = Mock(parser=parser, data={"command_string": command_name}) + cli_ctx.local_context = Mock(is_on=False) + loader = ContainerServiceCommandsLoader(cli_ctx) + loader.load_command_table(command_name.split()) + command = loader.command_table[command_name] + command.load_arguments() + loader.load_arguments(command_name) + loader._apply_parameter_info(command_name, command) # pylint: disable=protected-access + loader.command_table = {command_name: command} + parser.load_command_table(loader) + + args = command_name.split() + for name, value in ( + ("resource_group_name", "test-rg"), + ("cluster_name", "test-cluster"), + ("nodepool_name", "gpunp"), + ): + args.extend([command.arguments[name].options_list[0], value]) + + parsed = parser.parse_args(args) + self.assertIsNone(parsed.gpu_mig_profiles) + + profiles = ["MIG1g", "MIG2g", "MIG2g", "MIG2g"] + parsed = parser.parse_args(args + ["--gpu-mig-profiles", *profiles]) + self.assertEqual(parsed.gpu_mig_profiles, profiles) + + with patch( + "azure.cli.core.command_recommender.CommandRecommender.provide_recommendations", + return_value=[], + ), self.assertRaises(SystemExit): + parser.parse_args(args + ["--gpu-mig-profiles", "MIG5g"]) diff --git a/src/aks-preview/azext_aks_preview/tests/latest/test_update_agentpool_profile_preview.py b/src/aks-preview/azext_aks_preview/tests/latest/test_update_agentpool_profile_preview.py index 74886ad5554..52ded8f5df9 100644 --- a/src/aks-preview/azext_aks_preview/tests/latest/test_update_agentpool_profile_preview.py +++ b/src/aks-preview/azext_aks_preview/tests/latest/test_update_agentpool_profile_preview.py @@ -157,6 +157,7 @@ def test_update_agentpool_profile_preview_default_behavior(self): decorator.update_blue_green_upgrade_settings = Mock(return_value=agentpool) decorator.update_gpu_profile = Mock(return_value=agentpool) decorator.update_gpu_mig_strategy = Mock(return_value=agentpool) + decorator.update_gpu_mig_profiles = Mock(return_value=agentpool) decorator.update_crg = Mock(return_value=agentpool) decorator.update_prepared_image_specification = Mock(return_value=agentpool) @@ -188,6 +189,7 @@ def test_update_agentpool_profile_preview_default_behavior(self): decorator.update_blue_green_upgrade_settings.assert_called_once_with(agentpool) decorator.update_gpu_profile.assert_called_once_with(agentpool) decorator.update_gpu_mig_strategy.assert_called_once_with(agentpool) + decorator.update_gpu_mig_profiles.assert_called_once_with(agentpool) decorator.update_crg.assert_called_once_with(agentpool) decorator.update_prepared_image_specification.assert_called_once_with(agentpool) @@ -236,6 +238,7 @@ def test_update_zones_is_not_applied_twice_when_base_handles_it(self): "update_blue_green_upgrade_settings", "update_gpu_profile", "update_gpu_mig_strategy", + "update_gpu_mig_profiles", "update_crg", "update_prepared_image_specification", ]: @@ -291,6 +294,7 @@ def test_update_agentpool_profile_preview_with_agentpools_parameter(self): decorator.update_blue_green_upgrade_settings = Mock(return_value=agentpool) decorator.update_gpu_profile = Mock(return_value=agentpool) decorator.update_gpu_mig_strategy = Mock(return_value=agentpool) + decorator.update_gpu_mig_profiles = Mock(return_value=agentpool) decorator.update_crg = Mock(return_value=agentpool) decorator.update_prepared_image_specification = Mock(return_value=agentpool) @@ -346,6 +350,7 @@ def test_update_agentpool_profile_preview_managed_system_mode(self): decorator.update_blue_green_upgrade_settings = Mock() decorator.update_gpu_profile = Mock() decorator.update_gpu_mig_strategy = Mock() + decorator.update_gpu_mig_profiles = Mock() decorator.update_crg = Mock() decorator.update_prepared_image_specification = Mock() @@ -379,6 +384,7 @@ def test_update_agentpool_profile_preview_managed_system_mode(self): decorator.update_blue_green_upgrade_settings.assert_not_called() decorator.update_gpu_profile.assert_not_called() decorator.update_gpu_mig_strategy.assert_not_called() + decorator.update_gpu_mig_profiles.assert_not_called() decorator.update_crg.assert_not_called() decorator.update_prepared_image_specification.assert_not_called() @@ -463,6 +469,7 @@ def test_update_agentpool_profile_preview_system_mode_regular_flow(self): decorator.update_blue_green_upgrade_settings = Mock(return_value=agentpool) decorator.update_gpu_profile = Mock(return_value=agentpool) decorator.update_gpu_mig_strategy = Mock(return_value=agentpool) + decorator.update_gpu_mig_profiles = Mock(return_value=agentpool) decorator.update_crg = Mock(return_value=agentpool) decorator.update_prepared_image_specification = Mock(return_value=agentpool) @@ -492,6 +499,7 @@ def test_update_agentpool_profile_preview_system_mode_regular_flow(self): decorator.update_blue_green_upgrade_settings.assert_called_once_with(agentpool) decorator.update_gpu_profile.assert_called_once_with(agentpool) decorator.update_gpu_mig_strategy.assert_called_once_with(agentpool) + decorator.update_gpu_mig_profiles.assert_called_once_with(agentpool) decorator.update_crg.assert_called_once_with(agentpool) decorator.update_prepared_image_specification.assert_called_once_with(agentpool) @@ -544,6 +552,7 @@ def mock_method(pool): decorator.update_blue_green_upgrade_settings = create_mock_update_method("update_blue_green_upgrade_settings") decorator.update_gpu_profile = create_mock_update_method("update_gpu_profile") decorator.update_gpu_mig_strategy = create_mock_update_method("update_gpu_mig_strategy") + decorator.update_gpu_mig_profiles = create_mock_update_method("update_gpu_mig_profiles") decorator.update_crg = create_mock_update_method("update_crg") decorator.update_prepared_image_specification = create_mock_update_method("update_prepared_image_specification") @@ -566,6 +575,7 @@ def mock_method(pool): "update_blue_green_upgrade_settings", "update_gpu_profile", "update_gpu_mig_strategy", + "update_gpu_mig_profiles", "update_crg", "update_prepared_image_specification", ] @@ -624,6 +634,7 @@ def track_and_return(pool): decorator.update_blue_green_upgrade_settings = create_tracking_mock("update_blue_green_upgrade_settings") decorator.update_gpu_profile = create_tracking_mock("update_gpu_profile") decorator.update_gpu_mig_strategy = create_tracking_mock("update_gpu_mig_strategy") + decorator.update_gpu_mig_profiles = create_tracking_mock("update_gpu_mig_profiles") decorator.update_crg = create_tracking_mock("update_crg") decorator.update_prepared_image_specification = create_tracking_mock("update_prepared_image_specification") @@ -689,7 +700,8 @@ def test_update_agentpool_profile_preview_mixed_modes_scenario(self): 'update_secure_boot', 'update_vtpm', 'update_os_sku', 'update_fips_image', 'update_ssh_access', 'update_vm_size', 'update_localdns_profile', 'update_upgrade_strategy', 'update_blue_green_upgrade_settings', 'update_gpu_profile', - 'update_gpu_mig_strategy', 'update_crg', 'update_prepared_image_specification' + 'update_gpu_mig_strategy', 'update_gpu_mig_profiles', 'update_crg', + 'update_prepared_image_specification' ] if not self.base_handles_zones: update_methods.insert(9, 'update_zones') @@ -853,6 +865,7 @@ def test_update_agentpool_profile_preview_managed_cluster_mode(self): decorator.update_blue_green_upgrade_settings = Mock(return_value=agentpool) decorator.update_gpu_profile = Mock(return_value=agentpool) decorator.update_gpu_mig_strategy = Mock(return_value=agentpool) + decorator.update_gpu_mig_profiles = Mock(return_value=agentpool) decorator.update_crg = Mock(return_value=agentpool) decorator.update_prepared_image_specification = Mock(return_value=agentpool) diff --git a/src/aks-preview/setup.py b/src/aks-preview/setup.py index 1f5425e32b7..63c9bf82de5 100644 --- a/src/aks-preview/setup.py +++ b/src/aks-preview/setup.py @@ -9,7 +9,7 @@ from setuptools import find_packages, setup -VERSION = "22.0.0b11" +VERSION = "22.0.0b12" CLASSIFIERS = [ "Development Status :: 4 - Beta",