azure_arm.py: create_node: cannot create windows VM
- Lingua principale
- Python
- Stelle
- 2.1k
- Fork
- 931
- Merge medio
- 1g 2h
- PR unite (30g)
- 4
Descrizione
## Summary
Using the azure_arm provider, I cannot create a windows VM. in the create_node function it has been hardcoded to only support linux VMs (I have commented `#HERE` in the code below).
## Detailed Information
I was able to check the name of the image and see if it is a windows Image (all windows images have image.offer == "WindowsServer") and then set the correct osType with in `create_node`. However, this does not work with AzureVhdImage Images. And that's where I am stuck ...
Also, we also set up authentication assuming a linux machine. when the os is windows we don't need to set `data["properties"]["osProfile"]["linuxConfiguration"] ` for `NodeAuthSSHKey` and also `NodeAuthPassword`.
I tried to make a fix but I couldn't figure how to get the osType from a VHD Image.
Please let me know if you have any insights!
# Stack
Traceback (most recent call last):
node = conn.create_node(name=name, location=location, image=image, size=size, auth=auth, ex_resource_group=resource_group, ex_storage_account=storage_account, ex_blob_container=blob_container, ex_nic=nic)
File "/Library/Python/2.7/site-packages/libcloud/compute/drivers/azure_arm.py", line 672, in create_node
method="PUT")
File "/Library/Python/2.7/site-packages/libcloud/common/azure_arm.py", line 229, in request
method=method, raw=raw)
File "/Library/Python/2.7/site-packages/libcloud/common/base.py", line 636, in request
response = responseCls(**kwargs)
File "/Library/Python/2.7/site-packages/libcloud/common/base.py", line 153, in __init__
headers=self.headers)
libcloud.common.exceptions.BaseHTTPError: [InvalidParameter] The value 'Linux' of parameter 'osDisk.osType' is not allowed. Allowed values are 'Windows'.
# Code:
compute/drivers/azure_arm.py
```
if isinstance(image, AzureVhdImage):
instance_vhd = self._get_instance_vhd(
name=name,
ex_resource_group=ex_resource_group,
ex_storage_account=ex_storage_account,
ex_blob_container=ex_blob_container)
storage_profile = {
"osDisk": {
"name": name,
"osType": "linux", #HERE!
"caching": "ReadWrite",
"createOption": "FromImage",
"image": {
"uri": image.id
},
"vhd": {
"uri": instance_vhd,
}
}
}
if ex_use_managed_disks:
raise LibcloudError(
"Creating managed OS disk from %s image "
"type is not supported." % type(image))
elif isinstance(image, AzureImage):
storage_profile = {
"imageReference": {
"publisher": image.publisher,
"offer": image.offer,
"sku": image.sku,
"version": image.version
},
"osDisk": {
"name": name,
"osType": "linux", #HERE!
"caching": "ReadWrite",
"createOption": "FromImage"
}
}
```
...
```
if isinstance(auth, NodeAuthSSHKey):
data["properties"]["osProfile"]["adminPassword"] = \
binascii.hexlify(os.urandom(20)).decode("utf-8")
data["properties"]["osProfile"]["linuxConfiguration"] = { #HERE!
"disablePasswordAuthentication": "true",
"ssh": {
"publicKeys": [
{
"path": '/home/%s/.ssh/authorized_keys' % (
ex_user_name),
"keyData": auth.pubkey # pylint: disable=no-member
}
]
}
}
elif isinstance(auth, NodeAuthPassword):
data["properties"]["osProfile"]["linuxConfiguration"] = { #HERE!
"disablePasswordAuthentication": "false"
}
data["properties"]["osProfile"]["adminPassword"] = auth.password
else:
raise ValueError(
"Must provide NodeAuthSSHKey or NodeAuthPassword in auth")
```
Guida per i contributori
Apri la guida per i contributori
Direzione di ricerca
Inizia in compute/drivers/azure_arm.py, in particolare in create_node e nei rami AzureVhdImage, AzureImage, NodeAuthSSHKey e NodeAuthPassword mostrati nell’issue. Traccia il modo in cui vengono utilizzati il tipo di immagine e i dati di autenticazione, incluso l’errore di Azure per le immagini Windows. Il lavoro è completato quando è possibile creare VM Windows senza impostazioni specifiche per Linux, mantenendo al contempo il supporto per il comportamento esistente delle VM Linux.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- azure, python
- Ambito
- cloud
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Abbastanza chiara
- Idoneità per principianti
- 45/100