redha1419 opened a new issue #1327: azure_arm.py: create_node: cannot create windows VM URL: https://github.com/apache/libcloud/issues/1327 ## 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") ```
---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: [email protected] With regards, Apache Git Services
