From 2960d6b3711377aacf5023fa2775ac1a9b30a9d7 Mon Sep 17 00:00:00 2001 From: Rohan Patnaik Date: Fri, 22 May 2026 14:21:55 +0530 Subject: [PATCH] fix(vm): fall back on invalid image alias doc --- .../azure/cli/command_modules/vm/_actions.py | 7 ++++++- .../command_modules/vm/tests/latest/test_vm_image.py | 12 ++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/azure-cli/azure/cli/command_modules/vm/_actions.py b/src/azure-cli/azure/cli/command_modules/vm/_actions.py index b73a7183749..8adea7d418b 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/_actions.py +++ b/src/azure-cli/azure/cli/command_modules/vm/_actions.py @@ -191,7 +191,12 @@ def load_images_from_aliases_doc(cli_ctx, publisher=None, offer=None, sku=None, try: response = requests.get(target_url, verify=not should_disable_connection_verify()) if response.status_code == 200: - dic = json.loads(response.content.decode()) + try: + dic = json.loads(response.content.decode()) + except json.JSONDecodeError as ex: + logger.warning("Failed to parse image alias doc '%s'. Error: '%s'. Use local copy instead.", + target_url, ex) + dic = json.loads(alias_json) else: logger.warning("Failed to retrieve image alias doc '%s'. Error: '%s'. Use local copy instead.", target_url, response) diff --git a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/test_vm_image.py b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/test_vm_image.py index 0b355c6ac37..d70ecc3781f 100644 --- a/src/azure-cli/azure/cli/command_modules/vm/tests/latest/test_vm_image.py +++ b/src/azure-cli/azure/cli/command_modules/vm/tests/latest/test_vm_image.py @@ -69,6 +69,18 @@ def test_when_alias_doc_is_missing(self, mock_get_active_cloud): 'offer': 'CentOS', 'sku': '8_5-gen2', 'version': 'latest', 'architecture': 'x64'}) + @mock.patch('requests.get', autospec=True) + def test_when_alias_doc_is_invalid_json(self, mock_get): + from azure.cli.command_modules.vm._actions import load_images_from_aliases_doc + cli_ctx = DummyCli() + cli_ctx.cloud.endpoints.vm_image_alias_doc = 'https://example.invalid/aliases.json' + mock_get.return_value.status_code = 200 + mock_get.return_value.content = b'404: Not Found' + + images = load_images_from_aliases_doc(cli_ctx) + + self.assertEqual(images[0]['urnAlias'], 'AzureLinux4') + if __name__ == '__main__': unittest.main()