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

Reply via email to