我希望有人可以通过服务管理REST API为我创建VM Image的正确方向。我尝试的所有内容都让我得到了400 InvalidXmlRequest错误,该错误表明"请求正文的XML无效或未正确指定。"
假设我有一个正确配置的订阅,存储帐户,容器和blob。我已经使用x-ms-version:2014-06-01标头向https://management.core.windows.net/[OmittedSubscriptionId]/services/vmimages API发送了一个经过适当身份验证的POST请求,并且正文中包含以下XM:
<VMImages xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<VMImage>
<Name>my_image_20141120_service_sa01</Name>
<Label>my_Image_20141120_service_SA01</Label>
<Description>testimage</Description>
<OSDiskConfiguration>
<HostCaching>ReadWrite</HostCaching>
<OSState>Specialized</OSState>
<OS>Windows</OS>
<MediaLink>https://myservicesa.blob.core.windows.net/vhds/myimage_20141120.vhd</MediaLink>
</OSDiskConfiguration>
</VMImage>
</VMImages>
根据http://msdn.microsoft.com/en-us/library/dn775054.aspx的说明,我已经指定了所有必需的位,所以我不确定xml我发送的内容是什么无效。任何帮助将不胜感激!
答案 0 :(得分:2)
文档不正确,对由此造成的任何不便,我们深表歉意。如果您将其更改为:
,请求应该有效<VMImage xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<Name>my_image_20141120_service_sa01</Name>
<Label>my_Image_20141120_service_SA01</Label>
<Description>testimage</Description>
<OSDiskConfiguration>
<HostCaching>ReadWrite</HostCaching>
<OSState>Specialized</OSState>
<OS>Windows</OS>
<MediaLink>https://myservicesa.blob.core.windows.net/vhds/myimage_20141120.vhd</MediaLink>
</OSDiskConfiguration>
</VMImage>
有两种类型的图像可用于创建虚拟机。操作系统映像始终是通用的,并且不保持原始计算机的先前状态。 VM映像可以专用并保持连接数据磁盘的状态。
可以使用两组REST操作Operations on Operating System Images和Operations on Virtual Machine Images。
使用PowerShell时,我相信您使用Add-AzureVMImage来创建操作系统映像,并使用带有-OSState参数的Save-AzureVMImage来创建VM映像。
文档中未提及的是,“创建VM映像”操作是异步的,因此需要使用“获取操作状态”操作来获取映像创建的状态。文档很快就会更正。
答案 1 :(得分:0)
感谢astaykov,从PowerShell查看流量是一个很好的主意。事实证明这个API的文档是完全错误的! XML有效负载不仅完全不同,API本身也不同。需要调用的实际API端点是:
https://management.core.windows.net/[OmittedSubscriptionId]/services/images
注意它是“图像”vs“vmimages”
POST的正文应如下:
<OSImage xmlns="http://schemas.microsoft.com/windowsazure">
<Label>identifier-of-image</Label>
<MediaLink>uri-to-vhd</MediaLink>
<Name>name-of-image</Name>
<OS>Opearting-System</OS>
<IsPremium>bool</IsPremium>
<ShowInGui>bool</ShowInGui>
</OSImage>
答案 2 :(得分:0)
修改有效载荷,它应该可以工作。
<VMImage xmlns="http://schemas.microsoft.com/windowsazure" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> <Name>my_image_20141120_service_sa01</Name> <Label>my_Image_20141120_service_SA01</Label> <Description>testimage</Description> <OSDiskConfiguration> <HostCaching>ReadWrite</HostCaching> <OSState>Specialized</OSState> <OS>Windows</OS> <MediaLink>https://myservicesa.blob.core.windows.net/vhds/myimage_20141120.vhd</MediaLink> </OSDiskConfiguration> </VMImage>
将其张贴在
上https://management.core.windows.net/[OmittedSubscriptionId]/services/vmimages