Skip to content

Commit aed9f16

Browse files
committed
Minor fixes
1 parent 33f7cd1 commit aed9f16

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
@@ -3567,10 +3567,16 @@ def set_up_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
35673567
CONST_DISK_TYPE_EPHEMERAL_VOLUME_ONLY,
35683568
CONST_EPHEMERAL_NVME_PERF_TIER_STANDARD,
35693569
)
3570-
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
3571-
generate_vm_sku_cache_for_region
3570+
3571+
vm_cache_generated = self.context.get_intermediate(
3572+
"vm_cache_generated",
3573+
default_value=False,
35723574
)
3573-
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
3575+
3576+
if not vm_cache_generated:
3577+
from azext_aks_preview.azurecontainerstorage._helpers import generate_vm_sku_cache_for_region
3578+
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
3579+
self.context.set_intermediate("vm_cache_generated", True, overwrite_exists=True)
35743580

35753581
default_ephemeral_disk_volume_type = CONST_DISK_TYPE_EPHEMERAL_VOLUME_ONLY
35763582
default_ephemeral_disk_nvme_perf_tier = CONST_EPHEMERAL_NVME_PERF_TIER_STANDARD
@@ -4174,20 +4180,20 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
41744180
is_called_from_extension=True,
41754181
)
41764182

4177-
# Add role assignments for automatic sku
4178-
if cluster.sku is not None and cluster.sku.name == "Automatic":
4179-
try:
4180-
user = get_graph_client(self.cmd.cli_ctx).signed_in_user_get()
4181-
except Exception as e: # pylint: disable=broad-except
4182-
logger.warning("Could not get signed in user: %s", str(e))
4183-
else:
4184-
self.context.external_functions._add_role_assignment_executor_new( # type: ignore # pylint: disable=protected-access
4185-
self.cmd,
4186-
"Azure Kubernetes Service RBAC Cluster Admin",
4187-
user["id"],
4188-
scope=cluster.id,
4189-
resolve_assignee=False,
4190-
)
4183+
# Add role assignments for automatic sku
4184+
if cluster.sku is not None and cluster.sku.name == "Automatic":
4185+
try:
4186+
user = get_graph_client(self.cmd.cli_ctx).signed_in_user_get()
4187+
except Exception as e: # pylint: disable=broad-except
4188+
logger.warning("Could not get signed in user: %s", str(e))
4189+
else:
4190+
self.context.external_functions._add_role_assignment_executor_new( # type: ignore # pylint: disable=protected-access
4191+
self.cmd,
4192+
"Azure Kubernetes Service RBAC Cluster Admin",
4193+
user["id"],
4194+
scope=cluster.id,
4195+
resolve_assignee=False,
4196+
)
41914197

41924198

41934199
class AKSPreviewManagedClusterUpdateDecorator(AKSManagedClusterUpdateDecorator):
@@ -4501,26 +4507,38 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
45014507
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
45024508
get_extension_installed_and_cluster_configs
45034509
)
4504-
(
4505-
is_extension_installed,
4506-
is_azureDisk_enabled,
4507-
is_elasticSan_enabled,
4508-
is_ephemeralDisk_localssd_enabled,
4509-
is_ephemeralDisk_nvme_enabled,
4510-
current_core_value,
4511-
existing_ephemeral_disk_volume_type,
4512-
existing_perf_tier,
4513-
) = get_extension_installed_and_cluster_configs(
4514-
self.cmd,
4515-
self.context.get_resource_group_name(),
4516-
self.context.get_name(),
4517-
mc.agent_pool_profiles,
4510+
try:
4511+
(
4512+
is_extension_installed,
4513+
is_azureDisk_enabled,
4514+
is_elasticSan_enabled,
4515+
is_ephemeralDisk_localssd_enabled,
4516+
is_ephemeralDisk_nvme_enabled,
4517+
current_core_value,
4518+
existing_ephemeral_disk_volume_type,
4519+
existing_perf_tier,
4520+
) = get_extension_installed_and_cluster_configs(
4521+
self.cmd,
4522+
self.context.get_resource_group_name(),
4523+
self.context.get_name(),
4524+
mc.agent_pool_profiles,
4525+
)
4526+
except UnknownError as e:
4527+
logger.error("\nError fetching installed extension and cluster config: %s", e)
4528+
return mc
4529+
except Exception as ex: # pylint: disable=broad-except
4530+
logger.error("Exception fetching installed extension and cluster config: %s", ex)
4531+
return mc
4532+
4533+
vm_cache_generated = self.context.get_intermediate(
4534+
"vm_cache_generated",
4535+
default_value=False,
45184536
)
45194537

4520-
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
4521-
generate_vm_sku_cache_for_region
4522-
)
4523-
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
4538+
if not vm_cache_generated:
4539+
from azext_aks_preview.azurecontainerstorage._helpers import generate_vm_sku_cache_for_region
4540+
generate_vm_sku_cache_for_region(self.cmd.cli_ctx, self.context.get_location())
4541+
self.context.set_intermediate("vm_cache_generated", True, overwrite_exists=True)
45244542

45254543
if enable_azure_container_storage:
45264544
from azure.cli.command_modules.acs.azurecontainerstorage._helpers import (
@@ -4602,13 +4620,29 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
46024620
)
46034621

46044622
if is_ephemeralDisk_nvme_enabled and ephemeral_disk_nvme_perf_tier is not None:
4605-
msg = (
4606-
"Changing ephemeralDisk NVMe performance tier may result in a temporary "
4607-
"interruption to the applications using Azure Container Storage. Do you "
4608-
"want to continue with this operation?"
4623+
# Adding this intermediate and check to ensure that the below
4624+
# message prompt doesn't appear twice when aks-preview extension
4625+
# is called from both update_mc_profile_preview and update_mc_profile_default.
4626+
is_azure_container_storage_perf_tier_op_set = self.context.get_intermediate(
4627+
"azure_container_storage_perf_tier_op_set",
4628+
default_value="default",
46094629
)
4610-
if not (self.context.get_yes() or prompt_y_n(msg, default="n")):
4611-
raise DecoratorEarlyExitException()
4630+
4631+
if is_azure_container_storage_perf_tier_op_set == "default":
4632+
msg = (
4633+
"Changing ephemeralDisk NVMe performance tier may result in a temporary "
4634+
"interruption to the applications using Azure Container Storage. Do you "
4635+
"want to continue with this operation?"
4636+
)
4637+
if not (self.context.get_yes() or prompt_y_n(msg, default="n")):
4638+
raise DecoratorEarlyExitException()
4639+
4640+
self.context.set_intermediate(
4641+
"azure_container_storage_perf_tier_op_set",
4642+
True,
4643+
overwrite_exists=True
4644+
)
4645+
46124646
# If the extension is already installed,
46134647
# we expect that the Azure Container Storage
46144648
# nodes are already labelled. Use those label
@@ -4733,7 +4767,6 @@ def update_azure_container_storage(self, mc: ManagedCluster) -> ManagedCluster:
47334767
overwrite_exists=True
47344768
)
47354769
self.context.set_intermediate("current_core_value", current_core_value, overwrite_exists=True)
4736-
47374770
else:
47384771
storage_pool_name = self.context.raw_param.get("storage_pool_name")
47394772
pool_sku = self.context.raw_param.get("storage_pool_sku")
@@ -6068,7 +6101,6 @@ def postprocessing_after_mc_created(self, cluster: ManagedCluster) -> None:
60686101
existing_ephemeral_nvme_perf_tier,
60696102
is_called_from_extension=True,
60706103
)
6071-
60726104
else:
60736105
self.context.external_functions.perform_disable_azure_container_storage(
60746106
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
@@ -12317,154 +12317,6 @@ def test_aks_update_with_azurecontainerstorage_v1_with_ephemeral_disk_parameters
1231712317
self.is_empty(),
1231812318
])
1231912319

12320-
12321-
# live only due to downloading k8s-extension extension
12322-
@live_only()
12323-
@AllowLargeResponse(99999)
12324-
@AKSCustomResourceGroupPreparer(
12325-
random_name_length=17, name_prefix="clitest", location="uksouth"
12326-
)
12327-
def test_aks_create_with_azurecontainerstorage(self, resource_group, resource_group_location):
12328-
12329-
# reset the count so in replay mode the random names will start with 0
12330-
self.test_resources_count = 0
12331-
# kwargs for string formatting
12332-
aks_name = self.create_random_name("cliakstest", 16)
12333-
12334-
node_vm_size = "Standard_L8s_v3"
12335-
self.kwargs.update(
12336-
{
12337-
"resource_group": resource_group,
12338-
"name": aks_name,
12339-
"location": resource_group_location,
12340-
"resource_type": "Microsoft.ContainerService/ManagedClusters",
12341-
"ssh_key_value": self.generate_ssh_keys(),
12342-
"node_vm_size": node_vm_size,
12343-
}
12344-
)
12345-
12346-
# add k8s-extension extension for azurecontainerstorage operations.
12347-
self.cmd("extension add --name k8s-extension")
12348-
12349-
create_cmd = (
12350-
"aks create --resource-group={resource_group} --name={name} --location={location} "
12351-
"--ssh-key-value={ssh_key_value} --node-vm-size={node_vm_size} "
12352-
"--node-count 3 --enable-managed-identity --enable-azure-container-storage --output=json"
12353-
)
12354-
12355-
self.cmd(
12356-
create_cmd,
12357-
checks=[
12358-
self.check("provisioningState", "Succeeded"),
12359-
],
12360-
)
12361-
12362-
# Verify that the azure-container-storage extension is installed
12363-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12364-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12365-
12366-
# Check if azure-container-storage extension exists
12367-
acs_extension_found = False
12368-
for extension in extensions:
12369-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12370-
acs_extension_found = True
12371-
# Additional checks on the extension properties
12372-
assert extension.get("provisioningState") == "Succeeded", "Extension provisioning failed"
12373-
assert extension.get("extensionType") == CONST_ACSTOR_K8S_EXTENSION_NAME, "Wrong extension type"
12374-
break
12375-
12376-
assert acs_extension_found, "Azure Container Storage not found"
12377-
12378-
# delete
12379-
cmd = (
12380-
"aks delete --resource-group={resource_group} --name={name} --yes --no-wait"
12381-
)
12382-
self.cmd(
12383-
cmd,
12384-
checks=[
12385-
self.is_empty(),
12386-
],
12387-
)
12388-
12389-
@live_only()
12390-
@AllowLargeResponse(99999)
12391-
@AKSCustomResourceGroupPreparer(random_name_length=17, name_prefix='clitest', location='uksouth')
12392-
def test_aks_update_with_azurecontainerstorage(self, resource_group, resource_group_location):
12393-
12394-
aks_name = self.create_random_name('cliakstest', 16)
12395-
node_vm_size = 'standard_l8s_v3'
12396-
self.kwargs.update({
12397-
'resource_group': resource_group,
12398-
'name': aks_name,
12399-
'location': resource_group_location,
12400-
'ssh_key_value': self.generate_ssh_keys(),
12401-
'node_vm_size': node_vm_size,
12402-
})
12403-
12404-
# add k8s-extension extension for azurecontainerstorage operations.
12405-
# self.cmd('extension add --name k8s-extension')
12406-
12407-
# create: without enable-azure-container-storage
12408-
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'
12409-
self.cmd(create_cmd, checks=[
12410-
self.check('provisioningState', 'Succeeded'),
12411-
])
12412-
12413-
# update: enable-azure-container-storage
12414-
update_cmd = 'aks update --resource-group={resource_group} --name={name} --yes --output=json ' \
12415-
'--enable-azure-container-storage'
12416-
12417-
self.cmd(update_cmd, checks=[
12418-
self.check('provisioningState', 'Succeeded'),
12419-
])
12420-
12421-
# Verify that the azure-container-storage extension is installed
12422-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12423-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12424-
12425-
# Check if azure-container-storage extension exists
12426-
acs_extension_found = False
12427-
for extension in extensions:
12428-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12429-
acs_extension_found = True
12430-
# Additional checks on the extension properties
12431-
assert extension.get("provisioningState") == "Succeeded", "Extension provisioning failed"
12432-
assert extension.get("extensionType") == CONST_ACSTOR_K8S_EXTENSION_NAME, "Wrong extension type"
12433-
break
12434-
12435-
assert acs_extension_found, "Azure Container Storage not found"
12436-
12437-
# Sleep for 5 mins before next operation,
12438-
# since update operations take
12439-
# some time to finish.
12440-
time.sleep(10 * 60)
12441-
12442-
# update: disable-azure-container-storage
12443-
update_cmd = 'aks update --resource-group={resource_group} --name={name} --yes --output=json ' \
12444-
'--disable-azure-container-storage'
12445-
self.cmd(update_cmd, checks=[
12446-
self.check('provisioningState', 'Succeeded'),
12447-
])
12448-
12449-
# Verify that the azure-container-storage extension doesn't exist anymore
12450-
extension_list_cmd = "k8s-extension list --resource-group={resource_group} --cluster-name={name} --cluster-type managedClusters"
12451-
extensions = self.cmd(extension_list_cmd).get_output_in_json()
12452-
12453-
# Check if azure-container-storage extension sill exists
12454-
acs_extension_found = False
12455-
for extension in extensions:
12456-
if extension.get("name") == CONST_ACSTOR_EXT_INSTALLATION_NAME :
12457-
acs_extension_found = True
12458-
break
12459-
12460-
assert not acs_extension_found, "Azure Container Storage v2 still exists after disable operation"
12461-
12462-
# delete
12463-
cmd = 'aks delete --resource-group={resource_group} --name={name} --yes --no-wait'
12464-
self.cmd(cmd, checks=[
12465-
self.is_empty(),
12466-
])
12467-
1246812320
# live only due to workspace is not mocked correctly
1246912321
@AllowLargeResponse()
1247012322
@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)