diff --git a/src/vm-repair/azext_vm_repair/custom.py b/src/vm-repair/azext_vm_repair/custom.py index 61d302538d7..a2ee61cfbad 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}' \ - .format(g=repair_group_name, n=repair_vm_name, tag=resource_tag, image=os_image_urn, username=repair_username, password=repair_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: diff --git a/src/vm-repair/azext_vm_repair/repair_utils.py b/src/vm-repair/azext_vm_repair/repair_utils.py index 7aaa4441072..b77bccb409e 100644 --- a/src/vm-repair/azext_vm_repair/repair_utils.py +++ b/src/vm-repair/azext_vm_repair/repair_utils.py @@ -24,6 +24,17 @@ 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: return False 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 +