From 0da5a7278c914d8fc9356ff308df46167a741f12 Mon Sep 17 00:00:00 2001 From: malachma Date: Fri, 12 Mar 2021 12:58:35 +0100 Subject: [PATCH 1/4] extended to use a cloud-init script at deployment time in order to prepare the build environment for alar2 --- src/vm-repair/azext_vm_repair/custom.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/vm-repair/azext_vm_repair/custom.py b/src/vm-repair/azext_vm_repair/custom.py index 61d302538d7..3a87dda8b18 100644 --- a/src/vm-repair/azext_vm_repair/custom.py +++ b/src/vm-repair/azext_vm_repair/custom.py @@ -31,7 +31,8 @@ _fetch_disk_info, _unlock_singlepass_encrypted_disk, _invoke_run_command, - _check_hyperV_gen + _check_hyperV_gen, + _get_cloud_init_script ) from .exceptions import AzCommandError, SkuNotAvailableError, UnmanagedDiskCopyError, WindowsOsNotAvailableError, RunScriptNotFoundForIdError, SkuDoesNotSupportHyperV, ScriptReturnsError logger = get_logger(__name__) @@ -63,8 +64,13 @@ def create(cmd, vm_name, resource_group_name, repair_password=None, repair_usern _check_hyperV_gen(source_vm) # Set up base create vm command - create_repair_vm_command = 'az vm create -g {g} -n {n} --tag {tag} --image {image} --admin-username {username} --admin-password {password}' \ + if is_linux: + create_repair_vm_command = 'az vm create -g {g} -n {n} --tag {tag} --image {image} --admin-username {username} --admin-password {password} --custom-data {cloud_init_script}' \ + .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password, cloud_init_script=_get_cloud_init_script() ) + else: + create_repair_vm_command = 'az vm create -g {g} -n {n} --tag {tag} --image {image} --admin-username {username} --admin-password {password}' \ .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password) + # Fetch VM size of repair VM sku = _fetch_compatible_sku(source_vm, enable_nested) if not sku: From aca3d1bf97547b3303f8b5d9f26575ce600e6708 Mon Sep 17 00:00:00 2001 From: malachma Date: Fri, 12 Mar 2021 12:59:44 +0100 Subject: [PATCH 2/4] cloud-init script to be used at deployment time for alar2 --- .../scripts/linux-build_setup-cloud-init.txt | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 src/vm-repair/azext_vm_repair/scripts/linux-build_setup-cloud-init.txt diff --git a/src/vm-repair/azext_vm_repair/scripts/linux-build_setup-cloud-init.txt b/src/vm-repair/azext_vm_repair/scripts/linux-build_setup-cloud-init.txt new file mode 100644 index 00000000000..3f61e4803f0 --- /dev/null +++ b/src/vm-repair/azext_vm_repair/scripts/linux-build_setup-cloud-init.txt @@ -0,0 +1,11 @@ +#cloud-config +# cloud-init script to setup the build environment for alar2 + +runcmd: + - cd /root + - curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs -o rustinstall.sh + - chmod 700 rustinstall.sh + - ./rustinstall.sh -y --default-toolchain nightly + - apt-get update + - apt install -y build-essential + From d08fd13e1ada9dcb9705e16dccbb45b1ff080642 Mon Sep 17 00:00:00 2001 From: malachma Date: Fri, 12 Mar 2021 13:00:42 +0100 Subject: [PATCH 3/4] add new function to get the correct path for the cloud-init script to be used --- src/vm-repair/azext_vm_repair/repair_utils.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/vm-repair/azext_vm_repair/repair_utils.py b/src/vm-repair/azext_vm_repair/repair_utils.py index 7aaa4441072..c43a0b66151 100644 --- a/src/vm-repair/azext_vm_repair/repair_utils.py +++ b/src/vm-repair/azext_vm_repair/repair_utils.py @@ -23,6 +23,16 @@ logger = get_logger(__name__) +def _get_cloud_init_script(): + REPAIR_DIR_NAME = 'azext_vm_repair' + SCRIPTS_DIR_NAME = 'scripts' + CLOUD_INIT = 'linux-build_setup-cloud-init.txt' + # Build absoulte path of driver script + loader = pkgutil.get_loader(REPAIR_DIR_NAME) + mod = loader.load_module(REPAIR_DIR_NAME) + rootpath = os.path.dirname(mod.__file__) + return os.path.join(rootpath, SCRIPTS_DIR_NAME, CLOUD_INIT) + def _uses_managed_disk(vm): if vm.storage_profile.os_disk.managed_disk is None: From 8406eaf1489081db22ad816f1fbdfd21410aeb2b Mon Sep 17 00:00:00 2001 From: malachma Date: Thu, 18 Mar 2021 14:44:04 +0100 Subject: [PATCH 4/4] corrected pep8 errors --- src/vm-repair/azext_vm_repair/custom.py | 4 ++-- src/vm-repair/azext_vm_repair/repair_utils.py | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/vm-repair/azext_vm_repair/custom.py b/src/vm-repair/azext_vm_repair/custom.py index 3a87dda8b18..a2ee61cfbad 100644 --- a/src/vm-repair/azext_vm_repair/custom.py +++ b/src/vm-repair/azext_vm_repair/custom.py @@ -66,10 +66,10 @@ def create(cmd, vm_name, resource_group_name, repair_password=None, repair_usern # Set up base create vm command if is_linux: create_repair_vm_command = 'az vm create -g {g} -n {n} --tag {tag} --image {image} --admin-username {username} --admin-password {password} --custom-data {cloud_init_script}' \ - .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password, cloud_init_script=_get_cloud_init_script() ) + .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password, cloud_init_script=_get_cloud_init_script()) else: create_repair_vm_command = 'az vm create -g {g} -n {n} --tag {tag} --image {image} --admin-username {username} --admin-password {password}' \ - .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password) + .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_password) # Fetch VM size of repair VM sku = _fetch_compatible_sku(source_vm, enable_nested) diff --git a/src/vm-repair/azext_vm_repair/repair_utils.py b/src/vm-repair/azext_vm_repair/repair_utils.py index c43a0b66151..b77bccb409e 100644 --- a/src/vm-repair/azext_vm_repair/repair_utils.py +++ b/src/vm-repair/azext_vm_repair/repair_utils.py @@ -23,6 +23,7 @@ logger = get_logger(__name__) + def _get_cloud_init_script(): REPAIR_DIR_NAME = 'azext_vm_repair' SCRIPTS_DIR_NAME = 'scripts'