我想使用Python SDK创建与Azure控制台上完全相同的虚拟机,目前,我面临着在虚拟机内复制数据的问题

wljmcqd8  于 2022-12-24  发布在  Python
关注(0)|答案(2)|浏览(126)

我现在可以通过VS代码创建VM。我使用的映像与控制台VM中的映像相同。现在我想运行一个使用一些文件的用户脚本。当我登录到VS代码VM时,它是空的,所以显然使用脚本不起作用。这些是我正在使用的VM参数。

def create_vm_parameters(vm_reference, compute_client, encoded_init_script, filename, nic_id):
"""Create the VM parameters structure.
"""
return {
    'location': LOCATION,
    'tags': {
        'Name': str(filename)
    },
    'os_profile': {
        'computer_name': VM_NAME,
        'admin_username': USERNAME,
        'admin_password': PASSWORD
    },
    'hardware_profile': {
        'vm_size': VM_TYPE
    },
    'storage_profile': {
        'image_reference': {
            'publisher': vm_reference['publisher'],
            'offer': vm_reference['offer'],
            'sku': vm_reference['sku'],
            'version': vm_reference['version']
        },
        'osDisk': {
            'createOption': 'FromImage'
        },
     },
    'network_profile': {
        'network_interfaces': [
            {
                'id': nic_id
            }
        ]
    },
    "userData": encoded_init_script,
}
5cnsuln7

5cnsuln71#

实现这一点的一种方法是将数据从现有VM复制到存储帐户,然后将存储帐户作为数据磁盘挂载到使用Python SDK创建的新VM。
在Python代码中,在VM参数的storage_profile部分包含以下内容

'storage_profile': {
        'image_reference': {
            'publisher': vm_reference['publisher'],
            'offer': vm_reference['offer'],
            'sku': vm_reference['sku'],
            'version': vm_reference['version']
        },
        'osDisk': {
            'createOption': 'FromImage'
        },
        'dataDisks': [
            {
                'lun': 0,
                'createOption': 'Attach',
                'caching': 'ReadWrite',
                'diskSizeGB': 128,
                'managedDisk': {
                    'storageAccountType': 'Standard_LRS',
                    'id': '<storage-account-id>'
                }
            }
        ]
    },

替换为您创建的存储帐户的ID。
这将允许您将存储帐户作为数据磁盘挂载到使用Python SDK创建的新VM中,然后可以通过挂载数据磁盘访问VM中的数据。

uqcuzwp8

uqcuzwp82#

已使用VM参数解决此问题:我们

def create_vm_parameters(vm_reference, compute_client, encoded_init_script, filename, nic_id):
    """Create the VM parameters structure.
    """
    return {
        'location': LOCATION,
        'tags': {
            'Name': str(filename)
        },
        # 'os_profile': {
        #     'computer_name': VM_NAME,
        #     'admin_username': USERNAME,
        #     'admin_password': PASSWORD
        # },
        'hardware_profile': {
            'vm_size': VM_TYPE
        },
        'storage_profile': {
            # 'image_reference': {
            #     'publisher': vm_reference['publisher'],
            #     'offer': vm_reference['offer'],
            #     'sku': vm_reference['sku'],
            #     'version': vm_reference['version']
            # },
            'osDisk': {
                'osType': 'Linux',
                'name': '<Disk-Name>',
                'createOption': 'Attach',
                'managedDisk': {
                'id': '<resource-id>'
                },
                'caching': 'ReadWrite'
            }
        },
        'network_profile': {
            'network_interfaces': [
                {
                    'id': nic_id
                }
            ]
        },
        "userData": encoded_init_script,
    }

我在这里所做的是包括映像和操作系统引用(现在已注解)。此外,我对现有的操作系统磁盘进行快照,并创建另一个操作系统磁盘(例如,snap-OSDisk)。然后将此(snap-OSDisk)连接到正在创建的虚拟机。
显然,如果有更好的办法,我欢迎。

相关问题