diff --git a/src/vme/HISTORY.rst b/src/vme/HISTORY.rst index 089a8e0fc85..a9290891dee 100644 --- a/src/vme/HISTORY.rst +++ b/src/vme/HISTORY.rst @@ -9,4 +9,9 @@ Release History 1.0.0b2 ++++++ -* Add new 'az vme list' command to list all version managed extensions. \ No newline at end of file +* Add new 'az vme list' command to list all version managed extensions. + +1.0.0b3 +++++++ +* Update 'az vme list --output table' to show correct versions. +* Wait for the bundle feature flag to fully propagate after enabling it. \ No newline at end of file diff --git a/src/vme/azext_vme/_format.py b/src/vme/azext_vme/_format.py index 69dbe1d31a5..6d1a96ec30a 100644 --- a/src/vme/azext_vme/_format.py +++ b/src/vme/azext_vme/_format.py @@ -14,7 +14,7 @@ def __get_table_row(result): return OrderedDict([ ('name', result['name']), ('extensionType', result.get('properties', {}).get('extensionType', '')), - ('version', result.get('properties', {}).get('version', '')), + ('version', result.get('properties', {}).get('currentVersion', '')), ('provisioningState', result.get('properties', {}).get('provisioningState', '')), ('isSystemExtension', result.get('properties', {}).get('isSystemExtension', '')), ('lastModifiedAt', result.get('systemData', {}).get('lastModifiedAt', '')), diff --git a/src/vme/azext_vme/custom.py b/src/vme/azext_vme/custom.py index e12a472c8bf..e5aec37c78c 100644 --- a/src/vme/azext_vme/custom.py +++ b/src/vme/azext_vme/custom.py @@ -9,7 +9,6 @@ from knack.log import get_logger import time from azure.cli.core.commands.client_factory import get_subscription_id -from datetime import datetime from ._client_factory import cf_deployments, cf_resources from azure.core.exceptions import ResourceNotFoundError @@ -35,7 +34,8 @@ def install_vme( utils.check_and_add_cli_extension("connectedk8s") utils.check_and_add_cli_extension("k8s-extension") - utils.check_and_enable_bundle_feature_flag(cluster, resource_group_name, cluster_name, kube_config, kube_context) + utils.check_and_enable_bundle_feature_flag( + cmd, subscription_id, cluster, resource_group_name, cluster_name, kube_config, kube_context) # Install the bundle extensions one by one for extension_type in include_extension_types: @@ -73,7 +73,8 @@ def install_vme( print(f"Installed extension {extension_type} successfully.") print(result) - print("All extensions installed successfully.") + if len(include_extension_types) > 1: + print("All extensions installed successfully.") def uninstall_vme( @@ -111,7 +112,8 @@ def uninstall_vme( "--yes"] utils.call_subprocess_raise_output(command) print(f"Uninstalled extension {extension_type} successfully.") - print("All extensions uninstalled successfully.") + if len(include_extension_types) > 1: + print("All extensions uninstalled successfully.") def upgrade_vme( @@ -136,7 +138,7 @@ def upgrade_vme( utils.check_and_add_cli_extension("connectedk8s") utils.check_and_enable_bundle_feature_flag( - cluster, resource_group_name, cluster_name, kube_config, kube_context) + cmd, subscription_id, cluster, resource_group_name, cluster_name, kube_config, kube_context) deployment_name = (consts.ARC_UPDATE_PREFIX + cluster_name).lower() print(f"Checking arm template deployment '{deployment_name}' for '{cluster_resource_id}' " f"which has agent version '{agent_version}'") @@ -149,7 +151,7 @@ def upgrade_vme( deployment = None while time.time() - start_time < wait_timeout: # Get current timestamp - timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + timestamp = utils.get_utctimestring() try: deployment = client.get(resource_group_name, deployment_name) if (not deployment or not deployment.tags): diff --git a/src/vme/azext_vme/utils.py b/src/vme/azext_vme/utils.py index 69e31d9b323..e49381369cd 100644 --- a/src/vme/azext_vme/utils.py +++ b/src/vme/azext_vme/utils.py @@ -12,6 +12,7 @@ from knack.log import get_logger from azext_vme import consts import threading +from ._client_factory import cf_deployments logger = get_logger(__name__) @@ -136,7 +137,7 @@ def check_and_add_cli_extension(cli_extension_name): def check_and_enable_bundle_feature_flag( - cluster, resource_group_name, cluster_name, kube_config=None, kube_context=None): + cmd, subscription_id, cluster, resource_group_name, cluster_name, kube_config=None, kube_context=None): """Enable the bundle feature flag for the given cluster if it's not already enabled.""" auto_upgrade = extract_auto_upgrade_value(cluster) @@ -163,7 +164,21 @@ def check_and_enable_bundle_feature_flag( call_subprocess_raise_output(command) # Wait for the feature flag to be enabled on the dp side. - time.sleep(30) + wait_timeout = 300 + start_time = time.time() + deployment_name = (consts.ARC_UPDATE_PREFIX + cluster_name).lower() + client = cf_deployments(cmd.cli_ctx, subscription_id) + deployment = None + while time.time() - start_time < wait_timeout: + try: + deployment = client.get(resource_group_name, deployment_name) + break + except ResourceNotFoundError: + print(f"[{get_utctimestring()}] Waiting for the bundle feature flag to propagate...") + time.sleep(5) + + if (not deployment): + raise CLIError("The bundle feature flag failed to propagate within the timeout period.") print("Enabled the bundle feature flag successfully.") @@ -201,3 +216,7 @@ def handle_failure(resources, deployment, timestamp): ) raise CLIError(f"[{timestamp}] {consts.UPGRADE_FAILED_MSG + deployment.properties.error.message}") + + +def get_utctimestring() -> str: + return time.strftime("%Y-%m-%dT%H-%M-%SZ", time.gmtime()) diff --git a/src/vme/setup.py b/src/vme/setup.py index 0d24a011bd1..aa86686bcf8 100644 --- a/src/vme/setup.py +++ b/src/vme/setup.py @@ -10,7 +10,7 @@ from setuptools import setup, find_packages # HISTORY.rst entry. -VERSION = '1.0.0b2' +VERSION = '1.0.0b3' # The full list of classifiers is available at # https://pypi.python.org/pypi?%3Aaction=list_classifiers