0

我希望有人可以让我在通过服务管理 REST API 创建 VM 映像方面朝着正确的方向前进。我尝试过的所有操作都导致我返回 400 InvalidXmlRequest 错误,该错误指出“请求正文的 XML 无效或未正确指定”。

假设我有正确配置的订阅、存储帐户、容器和 blob。我一直在使用以下 XM向https://management.core.windows.net/[OmittedSubscriptionId]/services/vmimages API 发送带有 x-ms-version: 2014-06-01 标头的经过正确身份验证的 POST 请求在身体里:

<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 有什么无效。任何帮助将不胜感激!

4

3 回答 3

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 操作可用于对操作系统映像的操作和对虚拟机映像的操作。

使用 PowerShell 时,我相信您使用 Add-AzureVMImage 来创建 OS 映像,并使用带有 -OSState 参数的 Save-AzureVMImage 来创建 VM 映像。

文档中也没有提到,因为 Create VM Image 操作是异步的,所以需要使用 Get Operation Status 操作来获取镜像创建的状态。文档将很快得到更正。

于 2015-01-08T21:38:33.130 回答
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

于 2015-01-06T23:50:49.750 回答
0

感谢 astaykov,查看来自 PowerShell 的流量是一个绝妙的主意。结果证明这个 API 的文档是完全错误的!不仅 XML 有效负载完全不同,API 本身也不同。需要调用的实际 API 端点是:

https://management.core.windows.net/[OmittedSubscriptionId]/services/images 

注意它是“images”与“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>
于 2015-01-04T20:53:16.050 回答