Подключите управляемые диски с данными к виртуальной машине

Я пытаюсь разработать сценарий для присоединения дисков данных, созданных из моментальных снимков, к другой виртуальной машине Azure.

  1. Создание снимков существующих дисков с данными из исходной виртуальной машины
  2. Создайте новые ДАННЫЕ ДИСКИ из SNAPSHOTS, созданных на шаге 1.
  3. Прикрепите новые ДИСКИ к целевой виртуальной машине.

однако я продолжаю получать ошибку при попытке подключить диски (шаг 3).

Get-AzDisk : The Resource 'Microsoft.Compute/disks/disk_name2' under resource group 'RG-Test' was not found.
ErrorCode: ResourceNotFound
ErrorMessage: The Resource 'Microsoft.Compute/disks/disk_name2' under resource group 'RG-Test' was not found.
ErrorTarget: 
StatusCode: 404
ReasonPhrase: Not Found
OperationID : 67319e0f-3f8f-416a-bb25-9d0547e661a4
Au caractère Ligne:22 : 13
+     $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskNam ...
+             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : CloseError : (:) [Get-AzDisk], ComputeCloudException
    + FullyQualifiedErrorId : Microsoft.Azure.Commands.Compute.Automation.GetAzureRmDisk

Add-AzVMDataDisk : Impossible de valider l'argument sur le paramètre « ManagedDiskId ». L’argument est Null ou vide. Indiquez un argument qui n’est pas Null ou vide et réessayez.
Au caractère Ligne:24 : 110
+ ... nation_vm_object -CreateOption Attach -ManagedDiskId $disk.Id -Lun $l ...
+                                                          ~~~~~~~~
    + CategoryInfo          : InvalidData : (:) [Add-AzVMDataDisk], ParameterBindingValidationException
    + FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.Azure.Commands.Compute.AddAzureVMDataDiskCommand

Код :


## Create Snapshot from a Managed Disk ##
$resourceGroupName = 'RG-Test' 
$location = 'east us 2' 
$source_vm_name = 'VMS'
$destination_vm_name = 'VMD'

$data_disk_list = Get-azDisk | where {$_.ManagedBy -match $source_vm_name -and $_.OsType -eq $null}

$snapshot_list = New-Object System.Collections.ArrayList($null)

foreach($data_disk_list_iterator in $data_disk_list){

    $snapshotName = $destination_vm_name + "_Snapshot_" + $data_disk_list_iterator.Name

    $snapshot_config = New-AzSnapshotConfig -SourceUri $data_disk_list_iterator.id -Location $location -CreateOption copy

    $snapshot_object = New-AzSnapshot -Snapshot $snapshot_config -SnapshotName $snapshotName -ResourceGroupName $resourceGroupName

    $snapshot_list.Add($snapshot_object.Id)

}

## Create Managed Data Disk from snapshot created above ##

$i=0

$destination_datadisk_list = New-Object System.Collections.ArrayList($null)

$destination_vm_object = Get-AzVM -Name $destination_vm_name -ResourceGroupName $resourceGroupName 


$lun_count = 1


foreach($snapshot_list_iterator in $snapshot_list){


    $disk_name = $destination_vm_name + "_datadisk_" + $i

    $i += 1

    $diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot_list_iterator

    $datadisk_object = New-AzDisk -Disk $diskConfig -ResourceGroupName $resourceGroupName -DiskName $disk_name

    $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i

    $destination_vm_object = Add-AzVMDataDisk -VM $destination_vm_object -CreateOption Attach -ManagedDiskId $disk.Id -Lun $lun_count

    $lun_count += 1

    Update-AzVM -VM $destination_vm_object -ResourceGroupName $resourceGroupName

}

Может ли кто-нибудь помочь мне решить эту ошибку?


person azure-power    schedule 12.01.2020    source источник
comment
При первом чтении это ошибка $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i. Измените это на $disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName $disk_name   -  person Theo    schedule 12.01.2020
comment
Спасибо @Theo за ответ, сегодня вечером буду тестировать модификацию. другое дело, пожалуйста, что это за переменная: $ data_disk_list_iterator   -  person azure-power    schedule 12.01.2020
comment
$data_disk_list_iterator - это переменная, которая содержит один элемент из коллекции $data_disk_list при каждом запуске цикла. (Обычно люди называют это просто $i). Внутри цикла эта переменная представляет собой Управляемый диск.   -  person Theo    schedule 12.01.2020
comment
спасибо @Theo за объяснение, это действительно интересно   -  person azure-power    schedule 12.01.2020
comment
@ azure-power Это нормально для тебя? Если все в порядке, не могли бы вы опубликовать свой ответ?   -  person Jim Xu    schedule 13.01.2020


Ответы (1)


Как указано в комментариях, сообщение об ошибке показывает, что вы только что допустили опечатку в коде:

$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName disk_name$i

Внутри этого второго цикла вы определяете переменную $disk_name путем конкатенации счетчика цикла $i в конце. Этот код в порядке.

Однако внутри цикла вы снова пытаетесь добавить этот счетчик циклов к имени, но в то же время используйте disk_name без знака $ впереди. Без знака доллара имя воспринимается как буквальная строка.

Все, что вам нужно сделать, чтобы он заработал, - это изменить указанную выше строку кода на:

$disk = Get-AzDisk -ResourceGroupName $resourceGroupName -DiskName $disk_name
person Theo    schedule 13.01.2020
comment
Спасибо за помощь . он работает, и я могу подключить диск с управляемыми данными. Другие вопросы: что может изменить код при интеграции функции. Спасибо. - person azure-power; 14.01.2020