Skip to content

Commit f63f8bb

Browse files
committed
Minor fixes
1 parent 515f021 commit f63f8bb

File tree

4 files changed

+84
-201
lines changed

4 files changed

+84
-201
lines changed

src/aks-preview/azext_aks_preview/azurecontainerstorage/_helpers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
from azext_aks_preview.azurecontainerstorage._consts import (
99
CONST_ACSTOR_ALL,
1010
CONST_ACSTOR_IO_ENGINE_LABEL_KEY,
11-
CONST_ACSTOR_K8S_EXTENSION_NAME,
1211
CONST_DISK_TYPE_EPHEMERAL_VOLUME_ONLY,
1312
CONST_DISK_TYPE_PV_WITH_ANNOTATION,
1413
CONST_EPHEMERAL_NVME_PERF_TIER_BASIC,
@@ -182,7 +181,7 @@ def get_extension_installed_and_cluster_configs(
182181
"managedClusters",
183182
)
184183

185-
is_extension_installed = extension.extension_type.lower() == CONST_ACSTOR_K8S_EXTENSION_NAME
184+
is_extension_installed = extension.extension_type.lower() == CONST_ACSTOR_V1_K8S_EXTENSION_NAME
186185
config_settings = extension.configuration_settings
187186

188187
if is_extension_installed and config_settings is not None:

src/aks-preview/azext_aks_preview/managed_cluster_decorator.py

Lines changed: 75 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3533,10 +3533,16 @@ def set_up_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
35333533
CONST_DISK_TYPE_EPHEMERAL_VOLUME_ONLY,
35343534
CONST_EPHEMERAL_NVME_PERF_TIER_STANDARD,
35353535
)
3536-
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
3537-
generate_vm_sku_cache_for_region
3536+
3537+
vm_cache_generated = self.context.get_intermediate(
3538+
"vm_cache_generated",
3539+
default_value=False,
35383540
)
3539-
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
3541+
3542+
if not vm_cache_generated:
3543+
from azext_aks_preview.azurecontainerstorage._helpers import generate_vm_sku_cache_for_region
3544+
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
3545+
self.context.set_intermediate("vm_cache_generated", True, overwrite_exists=True)
35403546

35413547
default_ephemeral_disk_volume_type = CONST_DISK_TYPE_EPHEMERAL_VOLUME_ONLY
35423548
default_ephemeral_disk_nvme_perf_tier = CONST_EPHEMERAL_NVME_PERF_TIER_STANDARD
@@ -4138,20 +4144,20 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
41384144
is_called_from_extension=True,
41394145
)
41404146

4141-
# Add role assignments for automatic sku
4142-
if cluster.sku is not None and cluster.sku.name == "Automatic":
4143-
try:
4144-
user = get_graph_client(self.cmd.cli_ctx).signed_in_user_get()
4145-
except Exception as e: # pylint: disable=broad-except
4146-
logger.warning("Could not get signed in user: %s", str(e))
4147-
else:
4148-
self.context.external_functions._add_role_assignment_executor_new( # type: ignore # pylint: disable=protected-access
4149-
self.cmd,
4150-
"Azure Kubernetes Service RBAC Cluster Admin",
4151-
user["id"],
4152-
scope=cluster.id,
4153-
resolve_assignee=False,
4154-
)
4147+
# Add role assignments for automatic sku
4148+
if cluster.sku is not None and cluster.sku.name == "Automatic":
4149+
try:
4150+
user = get_graph_client(self.cmd.cli_ctx).signed_in_user_get()
4151+
except Exception as e: # pylint: disable=broad-except
4152+
logger.warning("Could not get signed in user: %s", str(e))
4153+
else:
4154+
self.context.external_functions._add_role_assignment_executor_new( # type: ignore # pylint: disable=protected-access
4155+
self.cmd,
4156+
"Azure Kubernetes Service RBAC Cluster Admin",
4157+
user["id"],
4158+
scope=cluster.id,
4159+
resolve_assignee=False,
4160+
)
41554161

41564162

41574163
class AKSPreviewManagedClusterUpdateDecorator(AKSManagedClusterUpdateDecorator):
@@ -4465,26 +4471,38 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
44654471
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
44664472
get_extension_installed_and_cluster_configs
44674473
)
4468-
(
4469-
is_extension_installed,
4470-
is_azureDisk_enabled,
4471-
is_elasticSan_enabled,
4472-
is_ephemeralDisk_localssd_enabled,
4473-
is_ephemeralDisk_nvme_enabled,
4474-
current_core_value,
4475-
existing_ephemeral_disk_volume_type,
4476-
existing_perf_tier,
4477-
) = get_extension_installed_and_cluster_configs(
4478-
self.cmd,
4479-
self.context.get_resource_group_name(),
4480-
self.context.get_name(),
4481-
mc.agent_pool_profiles,
4474+
try:
4475+
(
4476+
is_extension_installed,
4477+
is_azureDisk_enabled,
4478+
is_elasticSan_enabled,
4479+
is_ephemeralDisk_localssd_enabled,
4480+
is_ephemeralDisk_nvme_enabled,
4481+
current_core_value,
4482+
existing_ephemeral_disk_volume_type,
4483+
existing_perf_tier,
4484+
) = get_extension_installed_and_cluster_configs(
4485+
self.cmd,
4486+
self.context.get_resource_group_name(),
4487+
self.context.get_name(),
4488+
mc.agent_pool_profiles,
4489+
)
4490+
except UnknownError as e:
4491+
logger.error("\nError fetching installed extension and cluster config: %s", e)
4492+
return mc
4493+
except Exception as ex: # pylint: disable=broad-except
4494+
logger.error("Exception fetching installed extension and cluster config: %s", ex)
4495+
return mc
4496+
4497+
vm_cache_generated = self.context.get_intermediate(
4498+
"vm_cache_generated",
4499+
default_value=False,
44824500
)
44834501

4484-
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
4485-
generate_vm_sku_cache_for_region
4486-
)
4487-
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
4502+
if not vm_cache_generated:
4503+
from azext_aks_preview.azurecontainerstorage._helpers import generate_vm_sku_cache_for_region
4504+
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
4505+
self.context.set_intermediate("vm_cache_generated", True, overwrite_exists=True)
44884506

44894507
if enable_azure_container_storage:
44904508
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
@@ -4566,13 +4584,29 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
45664584
)
45674585

45684586
if is_ephemeralDisk_nvme_enabled and ephemeral_disk_nvme_perf_tier is not None:
4569-
msg = (
4570-
"Changing ephemeralDisk NVMe performance tier may result in a temporary "
4571-
"interruption to the applications using Azure Container Storage. Do you "
4572-
"want to continue with this operation?"
4587+
# Adding this intermediate and check to ensure that the below
4588+
# message prompt doesn't appear twice when aks-preview extension
4589+
# is called from both update_mc_profile_preview and update_mc_profile_default.
4590+
is_azure_container_storage_perf_tier_op_set = self.context.get_intermediate(
4591+
"azure_container_storage_perf_tier_op_set",
4592+
default_value="default",
45734593
)
4574-
if not (self.context.get_yes() or prompt_y_n(msg, default="n")):
4575-
raise DecoratorEarlyExitException()
4594+
4595+
if is_azure_container_storage_perf_tier_op_set == "default":
4596+
msg = (
4597+
"Changing ephemeralDisk NVMe performance tier may result in a temporary "
4598+
"interruption to the applications using Azure Container Storage. Do you "
4599+
"want to continue with this operation?"
4600+
)
4601+
if not (self.context.get_yes() or prompt_y_n(msg, default="n")):
4602+
raise DecoratorEarlyExitException()
4603+
4604+
self.context.set_intermediate(
4605+
"azure_container_storage_perf_tier_op_set",
4606+
True,
4607+
overwrite_exists=True
4608+
)
4609+
45764610
# If the extension is already installed,
45774611
# we expect that the Azure Container Storage
45784612
# nodes are already labelled. Use those label
@@ -4697,7 +4731,6 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
46974731
overwrite_exists=True
46984732
)
46994733
self.context.set_intermediate("current_core_value", current_core_value, overwrite_exists=True)
4700-
47014734
else:
47024735
storage_pool_name = self.context.raw_param.get("storage_pool_name")
47034736
pool_sku = self.context.raw_param.get("storage_pool_sku")
@@ -6032,7 +6065,6 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
60326065
existing_ephemeral_nvme_perf_tier,
60336066
is_called_from_extension=True,
60346067
)
6035-
60366068
else:
60376069
self.context.external_functions.perform_disable_azure_container_storage(
60386070
self.cmd,

src/aks-preview/azext_aks_preview/tests/latest/test_aks_commands.py

Lines changed: 0 additions & 148 deletions
Original file line numberDiff line numberDiff line change
@@ -12195,154 +12195,6 @@ def test_aks_update_with_azurecontainerstorage_v1_with_ephemeral_disk_parameters
1219512195
self.is_empty(),
1219612196
])
1219712197

12198-
12199-
# live only due to downloading k8s-extension extension
12200-
@live_only()
12201-
@AllowLargeResponse(99999)
12202-
@AKSCustomResourceGroupPreparer(
12203-
random_name_length=17, name_prefix="clitest", location="uksouth"
12204-
)
12205-
def test_aks_create_with_azurecontainerstorage(self, resource_group, resource_group_location):
12206-
12207-
# reset the count so in replay mode the random names will start with 0
12208-
self.test_resources_count = 0
12209-
# kwargs for string formatting
12210-
aks_name = self.create_random_name("cliakstest", 16)
12211-
12212-
node_vm_size = "Standard_L8s_v3"
12213-
self.kwargs.update(
12214-
{
12215-
"resource_group": resource_group,
12216-
"name": aks_name,
12217-
"location": resource_group_location,
12218-
"resource_type": "Microsoft.ContainerService/ManagedClusters",
12219-
"ssh_key_value": self.generate_ssh_keys(),
12220-
"node_vm_size": node_vm_size,
12221-
}
12222-
)
12223-
12224-
# add k8s-extension extension for azurecontainerstorage operations.
12225-
self.cmd("extension add --name k8s-extension")
12226-
12227-
create_cmd = (
12228-
"aks create --resource-group={resource_group} --name={name} --location={location} "
12229-
"--ssh-key-value={ssh_key_value} --node-vm-size={node_vm_size} "
12230-
"--node-count 3 --enable-managed-identity --enable-azure-container-storage --output=json"
12231-
)
12232-
12233-
self.cmd(
12234-
create_cmd,
12235-
checks=[
12236-
self.check("provisioningState", "Succeeded"),
12237-
],
12238-
)
12239-
12240-
# Verify that the azure-container-storage extension is installed
12241-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12242-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12243-
12244-
# Check if azure-container-storage extension exists
12245-
acs_extension_found = False
12246-
for extension in extensions:
12247-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12248-
acs_extension_found = True
12249-
# Additional checks on the extension properties
12250-
assert extension.get("provisioningState") == "Succeeded", "Extension provisioning failed"
12251-
assert extension.get("extensionType") == CONST_ACSTOR_K8S_EXTENSION_NAME, "Wrong extension type"
12252-
break
12253-
12254-
assert acs_extension_found, "Azure Container Storage not found"
12255-
12256-
# delete
12257-
cmd = (
12258-
"aks delete --resource-group={resource_group} --name={name} --yes --no-wait"
12259-
)
12260-
self.cmd(
12261-
cmd,
12262-
checks=[
12263-
self.is_empty(),
12264-
],
12265-
)
12266-
12267-
@live_only()
12268-
@AllowLargeResponse(99999)
12269-
@AKSCustomResourceGroupPreparer(random_name_length=17, name_prefix='clitest', location='uksouth')
12270-
def test_aks_update_with_azurecontainerstorage(self, resource_group, resource_group_location):
12271-
12272-
aks_name = self.create_random_name('cliakstest', 16)
12273-
node_vm_size = 'standard_l8s_v3'
12274-
self.kwargs.update({
12275-
'resource_group': resource_group,
12276-
'name': aks_name,
12277-
'location': resource_group_location,
12278-
'ssh_key_value': self.generate_ssh_keys(),
12279-
'node_vm_size': node_vm_size,
12280-
})
12281-
12282-
# add k8s-extension extension for azurecontainerstorage operations.
12283-
# self.cmd('extension add --name k8s-extension')
12284-
12285-
# create: without enable-azure-container-storage
12286-
create_cmd = 'aks create --resource-group={resource_group} --name={name} --location={location} --ssh-key-value={ssh_key_value} --node-vm-size={node_vm_size} --node-count 3 --enable-managed-identity --output=json'
12287-
self.cmd(create_cmd, checks=[
12288-
self.check('provisioningState', 'Succeeded'),
12289-
])
12290-
12291-
# update: enable-azure-container-storage
12292-
update_cmd = 'aks update --resource-group={resource_group} --name={name} --yes --output=json ' \
12293-
'--enable-azure-container-storage'
12294-
12295-
self.cmd(update_cmd, checks=[
12296-
self.check('provisioningState', 'Succeeded'),
12297-
])
12298-
12299-
# Verify that the azure-container-storage extension is installed
12300-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12301-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12302-
12303-
# Check if azure-container-storage extension exists
12304-
acs_extension_found = False
12305-
for extension in extensions:
12306-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12307-
acs_extension_found = True
12308-
# Additional checks on the extension properties
12309-
assert extension.get("provisioningState") == "Succeeded", "Extension provisioning failed"
12310-
assert extension.get("extensionType") == CONST_ACSTOR_K8S_EXTENSION_NAME, "Wrong extension type"
12311-
break
12312-
12313-
assert acs_extension_found, "Azure Container Storage not found"
12314-
12315-
# Sleep for 5 mins before next operation,
12316-
# since update operations take
12317-
# some time to finish.
12318-
time.sleep(10 * 60)
12319-
12320-
# update: disable-azure-container-storage
12321-
update_cmd = 'aks update --resource-group={resource_group} --name={name} --yes --output=json ' \
12322-
'--disable-azure-container-storage'
12323-
self.cmd(update_cmd, checks=[
12324-
self.check('provisioningState', 'Succeeded'),
12325-
])
12326-
12327-
# Verify that the azure-container-storage extension doesn't exist anymore
12328-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12329-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12330-
12331-
# Check if azure-container-storage extension sill exists
12332-
acs_extension_found = False
12333-
for extension in extensions:
12334-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12335-
acs_extension_found = True
12336-
break
12337-
12338-
assert not acs_extension_found, "Azure Container Storage v2 still exists after disable operation"
12339-
12340-
# delete
12341-
cmd = 'aks delete --resource-group={resource_group} --name={name} --yes --no-wait'
12342-
self.cmd(cmd, checks=[
12343-
self.is_empty(),
12344-
])
12345-
1234612198
# live only due to workspace is not mocked correctly
1234712199
@AllowLargeResponse()
1234812200
@AKSCustomResourceGroupPreparer(

src/aks-preview/azext_aks_preview/tests/latest/test_validators.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1281,8 +1281,8 @@ def test_enable_with_same_ephemeral_disk_nvme_perf_tier_already_set(self):
12811281
perf_tier = acstor_consts.CONST_EPHEMERAL_NVME_PERF_TIER_PREMIUM
12821282
storage_pool_type = acstor_consts.CONST_STORAGE_POOL_TYPE_EPHEMERAL_DISK
12831283
err = (
1284-
"Azure Container Storage is already configured with --ephemeral-disk-nvme-perf-tier "
1285-
f"value set to {perf_tier}."
1284+
"Azure Container Storage is already configured with --ephemeral-disk-nvme-perf-tier "
1285+
f"value set to {perf_tier}."
12861286
)
12871287
with self.assertRaises(InvalidArgumentValueError) as cm:
12881288
acstor_validator.validate_enable_azure_container_storage_v1_params(
@@ -1294,8 +1294,8 @@ def test_enable_with_same_ephemeral_disk_volume_type_already_set(self):
12941294
disk_vol_type = acstor_consts.CONST_DISK_TYPE_PV_WITH_ANNOTATION
12951295
storage_pool_type = acstor_consts.CONST_STORAGE_POOL_TYPE_EPHEMERAL_DISK
12961296
err = (
1297-
"Azure Container Storage is already configured with --ephemeral-disk-volume-type "
1298-
f"value set to {disk_vol_type}."
1297+
"Azure Container Storage is already configured with --ephemeral-disk-volume-type "
1298+
f"value set to {disk_vol_type}."
12991299
)
13001300
with self.assertRaises(InvalidArgumentValueError) as cm:
13011301
acstor_validator.validate_enable_azure_container_storage_v1_params(
@@ -1308,9 +1308,9 @@ def test_enable_with_same_ephemeral_disk_nvme_perf_tier_and_ephemeral_temp_disk_
13081308
disk_vol_type = acstor_consts.CONST_DISK_TYPE_PV_WITH_ANNOTATION
13091309
storage_pool_type = acstor_consts.CONST_STORAGE_POOL_TYPE_EPHEMERAL_DISK
13101310
err = (
1311-
"Azure Container Storage is already configured with --ephemeral-disk-volume-type "
1312-
f"value set to {disk_vol_type} and --ephemeral-disk-nvme-perf-tier "
1313-
f"value set to {perf_tier}."
1311+
"Azure Container Storage is already configured with --ephemeral-disk-volume-type "
1312+
f"value set to {disk_vol_type} and --ephemeral-disk-nvme-perf-tier "
1313+
f"value set to {perf_tier}."
13141314
)
13151315
with self.assertRaises(InvalidArgumentValueError) as cm:
13161316
acstor_validator.validate_enable_azure_container_storage_v1_params(
@@ -1393,7 +1393,7 @@ def test_missing_nodepool_from_cluster_nodepool_list_multiple(self):
13931393
storage_pool_type = acstor_consts.CONST_STORAGE_POOL_TYPE_EPHEMERAL_DISK
13941394
storage_pool_option = acstor_consts.CONST_STORAGE_POOL_OPTION_SSD
13951395
nodepool_list = "pool1,pool2"
1396-
agentpools = {"nodepool1": {}, "nodepool2":{}}
1396+
agentpools = {"nodepool1": {}, "nodepool2": {}}
13971397
err = (
13981398
"Node pool: pool1 not found. Please provide a comma separated "
13991399
"string of existing node pool names in --azure-container-storage-nodepools."

0 commit comments

Comments
 (0)