Мне нужно перенести старые классические виртуальные машины на новые (все еще) классические виртуальные машины, чтобы использовать:
- Новый тип виртуальных машин (от Standard_A до Standard_DS_V2)
- Премиум-диски
Я сделал скрипт, который:
- Остановить существующую виртуальную машину
- Удалить существующую виртуальную машину
- Скопируйте старые диски (ОС + данные) в учетную запись Premium Storage.
- Зарегистрируйте новые диски
Затем у меня есть еще один сценарий для создания новой виртуальной машины на основе информации Json. Этот сценарий был разработан некоторое время назад для создания виртуальных машин на основе информации Json и существующего шаблона диска Azure.
Я адаптировал его для создания новой виртуальной машины на основе копии дисков.
Все работает достаточно хорошо, кроме пункта admin user/password. Каждый раз, когда я создаю новую виртуальную машину, я не могу получить к ней доступ со своим старым пользователем-администратором (тот, который изначально использовался для создания виртуальной машины). Чтобы получить доступ к виртуальной машине, мне нужно использовать портал Azure для сброса пароля. Затем я могу получить доступ к виртуальной машине.
Дело в том, что я хочу либо:
- сделать этот шаг в моем скрипте
- вообще не нужно этого делать (мы используем копию диска ОС / дисков данных, поэтому в этом нет необходимости)
Может кто-нибудь объяснить мне, как управлять этим? Я занимаюсь этим с нескольких дней / недель, и я не могу найти способ сделать это правильно.
Действия моего скрипта по созданию ВМ (ubuntu VM):
- Set-AzureSubscription -CurrentStorageAccount $VM.StorageAccount -SubscriptionId $VM.SubscriptionId
- $GlobalOSDiskName = (Get-AzureDisk | Where-Object { $_.OS -iin "Linux","Windows" } | Select DiskName).DiskName
- $VM = Get-Content $json_file -Raw | ConvertFrom-Json
- $VMOSDisk = $VM.OSDisk
- $vmObj = New-Object -TypeName Microsoft.WindowsAzure.Commands.ServiceManagement.Model.PersistentVM
- $vmObj = New-AzureVMConfig -Name $VM.Name -InstanceSize $VM.InstanceSize -DiskName $VMOSDisk.DiskName
- $vmObj = Set-AzureOSDisk -VM $vmObj
- $VMDataDisks = $VM.DataDisks
- foreach ($VMDataDisk in $VMDataDisks) {
$vmObj = Add-AzureDataDisk -Import -DiskName $VMDataDisk.DiskName -LUN $VMDataDisk.Lun -HostCaching $VMDataDisk.HostCaching -VM $vmObj
}
- $password = Read-Host -Prompt "Enter password for admin account '$username'" -AsSecureString
- $vmObj = Set-AzureVMAccessExtension -VM $vmObj -UserName $username -Password $password
# This is the last test I've made for this but it's not better...
# Adding informations for Subnet, StaticIP, AvailabilitySet, EndPoint, ACL etc...
- New-AzureVM -VNetName $VM.Vnet -ServiceName $VM.ServiceName -VM $vmObj -WaitForBoot
# Creation of the VM based on the object $vmObj
==> ВМ создана правильно, но к ней нельзя получить доступ
Более того, когда я сбрасываю пароль с помощью портала Azure, мне предлагается ввести свой пароль, когда я использую команду sudo, когда меня не запрашивали на старой виртуальной машине.
Это не обязательно, но я хотел бы знать, почему и как включить/отключить это.
Изменить: я протестировал предложение, написанное в этот документ, который, кажется, работает.
Этот метод заключается в:
- Экспортируйте конфигурацию исходной виртуальной машины с помощью команды Export-AzureVM в XML-файл.
- Отредактируйте экспортированный XML-файл, чтобы он соответствовал нужным настройкам.
- Создайте новый объект виртуальной машины на основе этого с помощью команды Import-AzureVM.
Результат, кажется, работает правильно:
- ВМ хорошо создана со всеми параметрами
- Пароль администратора остается прежним, нигде его не устанавливая
Опасения по этому поводу в том, что:
- В экспортированном xml для учетных данных администратора нет ссылки
- Таким образом, в новом объекте vm нет ссылки на учетные данные администратора.
- Созданный объект точно такой же, как тот, который я создаю по-своему.
Может кто-нибудь объяснить мне разницу между обоими решениями?
Спасибо за вашу помощь