Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/vm-repair/HISTORY.rst
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,12 @@
Release History
===============

2.1.2
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

were you able to write new or run existing tests to verify the behavior changed as expected? A new assert in an existing test could even suffice. Otherwise, changes, look good.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not exactly sure how to make the automated testing work, but I did test it against my branch and the changes all executed as expected.

++++++
Added images available for --distro flag to include current distributions, will remove EoL versions in future releases
Fixing a logic bug to allow V2 linux detection to work properly, and with Arm64
Disabled trusted launch for Arm64
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh, you need to update the setup.py file to this new version too.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added this change


2.1.1
++++++
Updated README file for `vm repair` extension.
Expand Down
29 changes: 17 additions & 12 deletions src/vm-repair/azext_vm_repair/custom.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,18 +117,23 @@ def create(cmd, vm_name, resource_group_name, repair_password=None, repair_usern
if is_linux and _uses_managed_disk(source_vm):
# Setting the OS type to 'Linux'.
os_type = 'Linux'
# Checking the Hyper-V generation of the source VM.
hyperV_generation_linux = _check_linux_hyperV_gen(source_vm)
if hyperV_generation_linux == 'V2':
# If the Hyper-V generation is 'V2', log this information and select the Linux distribution for a Gen2 VM.
logger.info('Generation 2 VM detected')
os_image_urn = _select_distro_linux_gen2(distro)
if architecture_type == 'Arm64':
# If the architecture type is 'Arm64', log this information and select the Linux distribution for an Arm64 VM.
logger.info('ARM64 VM detected')
os_image_urn = _select_distro_linux_Arm64(distro)
else:
# If the architecture type is not 'Arm64', select the Linux distribution for a regular VM.
# Checking the Hyper-V generation of the source VM.
hyperV_generation_linux = _check_linux_hyperV_gen(source_vm)
if hyperV_generation_linux == 'V2':
# If the Hyper-V generation is 'V2', it may be ARM:
if architecture_type == 'Arm64':
# If the architecture type is 'Arm64', log this information and select the Linux distribution for an Arm64 VM.
logger.info('ARM64 VM detected')
os_image_urn = _select_distro_linux_Arm64(distro)
# Trusted launch is not supported on ARM
logger.info('Disabling trusted launch on ARM')
disable_trusted_launch = True
else:
# log this information and select the Linux distribution for an x86 Gen2 VM.
logger.info('Generation 2 VM detected')
os_image_urn = _select_distro_linux_gen2(distro)
else:
# If the architecture type is not 'V2', select a Gen1 VM
os_image_urn = _select_distro_linux(distro)
else:
# If the source VM's OS is not Linux, check if a recovery key is provided.
Expand Down
29 changes: 21 additions & 8 deletions src/vm-repair/azext_vm_repair/repair_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -526,11 +526,16 @@ def _fetch_compatible_windows_os_urn_v2(source_vm):


def _select_distro_linux(distro):
# list of images needs to be added to before the docs reflect, and the docs need to remove the keywords long before we remove the reference from the extension
# https://learn.microsoft.com/cli/azure/vm/repair?view=azure-cli-latest#az-vm-repair-create-optional-parameters
image_lookup = {
'rhel7': 'RedHat:rhel-raw:7-raw:latest',
'rhel8': 'RedHat:rhel-raw:8-raw:latest',
'rhel9': 'RedHat:rhel-raw:9-raw:latest',
'ubuntu18': 'Canonical:UbuntuServer:18.04-LTS:latest',
'ubuntu20': 'Canonical:0001-com-ubuntu-server-focal:20_04-lts:latest',
'ubuntu22': 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest',
'ubuntu24': 'Canonical:ubuntu-24_04-lts:server-gen1:latest',
'centos6': 'OpenLogic:CentOS:6.10:latest',
'centos7': 'OpenLogic:CentOS:7_9:latest',
'centos8': 'OpenLogic:CentOS:8_4:latest',
Expand All @@ -547,16 +552,20 @@ def _select_distro_linux(distro):
os_image_urn = distro
else:
logger.info('No specific distro was provided , using the default Ubuntu distro')
os_image_urn = "Ubuntu2204"
os_image_urn = "Canonical:ubuntu-24_04-lts:server-gen1:latest"
return os_image_urn


def _select_distro_linux_Arm64(distro):
# list of images needs to be added to before the docs reflect, and the docs need to remove the keywords long before we remove the reference from the extension
# https://learn.microsoft.com/cli/azure/vm/repair?view=azure-cli-latest#az-vm-repair-create-optional-parameters
image_lookup = {
'rhel8': 'RedHat:rhel-arm64:8_8-arm64-gen2:latest',
'rhel9': 'RedHat:rhel-arm64:9_2-arm64:latest',
'rhel9': 'RedHat:rhel-arm64:9_3-arm64:latest',
'ubuntu18': 'Canonical:UbuntuServer:18_04-lts-arm64:latest',
'ubuntu20': 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-arm64:latest',
'ubuntu22': 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts-arm64:latest',
'ubuntu24': 'Canonical:ubuntu-24_04-lts:server-arm64:latest',
'centos7': 'OpenLogic:CentOS:7_9-arm64:latest',
}
if distro in image_lookup:
Expand All @@ -567,23 +576,27 @@ def _select_distro_linux_Arm64(distro):
os_image_urn = distro
else:
logger.info('No specific distro was provided , using the default ARM64 Ubuntu distro')
os_image_urn = "Canonical:UbuntuServer:18_04-lts-arm64:latest"
os_image_urn = "Canonical:ubuntu-24_04-lts:server-arm64:latest"
return os_image_urn


def _select_distro_linux_gen2(distro):
# base on the document : https://learn.microsoft.com/en-us/azure/virtual-machines/generation-2#generation-2-vm-images-in-azure-marketplace
# list of images needs to be added to before the docs reflect, and the docs need to remove the keywords long before we remove the reference from the extension
# https://learn.microsoft.com/cli/azure/vm/repair?view=azure-cli-latest#az-vm-repair-create-optional-parameters
image_lookup = {
'rhel7': 'RedHat:rhel-raw:7-raw-gen2:latest',
'rhel8': 'RedHat:rhel-raw:8-raw-gen2:latest',
'rhel9': 'RedHat:rhel-raw:9-raw-gen2:latest',
'ubuntu18': 'Canonical:UbuntuServer:18_04-lts-gen2:latest',
'ubuntu20': 'Canonical:0001-com-ubuntu-server-focal:20_04-lts-gen2:latest',
'ubuntu22': 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts-gen2:latest',
'ubuntu24': 'Canonical:ubuntu-24_04-lts:server:latest',
'centos7': 'OpenLogic:CentOS:7_9-gen2:latest',
'centos8': 'OpenLogic:CentOS:8_4-gen2:latest',
'oracle7': 'Oracle:Oracle-Linux:ol79-gen2:latest',
'oracle8': 'Oracle:Oracle-Linux:ol82-gen2:latest',
'sles12': 'SUSE:sles-12-sp5:gen2:latest',
'sles15': 'SUSE:sles-15-sp3:gen2:latest',
'sles15': 'SUSE:sles-15-sp6:gen2:latest',
}
if distro in image_lookup:
os_image_urn = image_lookup[distro]
Expand All @@ -594,10 +607,10 @@ def _select_distro_linux_gen2(distro):
os_image_urn = distro
else:
logger.info('The provided URN does not contain Gen2 in it and this VM is a gen2 , dropping to default image')
os_image_urn = "Canonical:UbuntuServer:18_04-lts-gen2:latest"
os_image_urn = "Canonical:ubuntu-24_04-lts:server:latest"
else:
logger.info('No specific distro was provided , using the default Ubuntu distro')
os_image_urn = "Canonical:UbuntuServer:18_04-lts-gen2:latest"
os_image_urn = "Canonical:ubuntu-24_04-lts:server:latest"
return os_image_urn


Expand Down Expand Up @@ -809,4 +822,4 @@ def _make_public_ip_name(repair_vm_name, associate_public_ip):
public_ip_name = '""'
if associate_public_ip:
public_ip_name = repair_vm_name + "PublicIP"
return public_ip_name
return public_ip_name
2 changes: 1 addition & 1 deletion src/vm-repair/setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from codecs import open
from setuptools import setup, find_packages

VERSION = "2.1.1"
VERSION = "2.1.2"

CLASSIFIERS = [
'Development Status :: 4 - Beta',
Expand Down
Loading