apache / apache/libcloud

azure_arm.py: create_node: cannot create windows VM

オープン
#1,327 コメント 1 件 リアクション 0 件 担当者 0 名 GitHub で見る
api: compute drivers: azure stale
主要言語
Python
スター
2.1k
フォーク
931
平均マージ
1日 2時間
マージ済み PR(30日)
4

説明

## 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")

```

コントリビューションガイド

コントリビューションガイドを開く

調査の方向性

compute/drivers/azure_arm.py から始め、特に create_node と、issue に示されている AzureVhdImage、AzureImage、NodeAuthSSHKey、NodeAuthPassword の分岐を確認します。イメージの種類と認証データがどのように使用されているかを追跡し、Windows イメージに対する Azure のエラーも確認します。Windows VM を Linux 専用の設定なしで作成でき、既存の Linux VM の動作も引き続きサポートされれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
azure, python
領域
cloud
issue の種類
バグ
難易度
4/5
見積もり時間
3〜5日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
45/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。