Azure Management API - Create VMImage - InvalidXmlRequest -

本文关键字:VMImage InvalidXmlRequest Create Azure API Management | 更新日期: 2023-09-27 18:36:14

我希望有人能让我朝着正确的方向发展,通过服务管理 REST API 创建虚拟机映像。我尝试的所有方法都导致我返回400 InvalidXmlRequest错误,该错误指出"请求正文的XML无效或未正确指定"。

假设我有一个正确预配的订阅、存储帐户、容器和 Blob。我一直在向 https://management.core.windows.net/[省略订阅ID]/服务/vmimages API发送经过正确身份验证的POST请求,其中包含x-ms版本:2014-06-01标头,正文中具有以下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 有什么无效。任何帮助将不胜感激!

Azure Management API - Create VMImage - InvalidXmlRequest -

文档不正确,对于由此造成的任何不便,我们深表歉意。如果将其更改为:

<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 创建操作系统映像,并使用带有 -OSState 参数的 Save-AzureVMImage 来创建 VM 映像。

文档中也未提及的是,创建 VM 映像操作是异步的,因此需要使用"获取操作状态"操作来获取映像创建的状态。文档将很快更正。

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

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

请注意,它是"映像"与"vmimages"

开机自检的正文应如下所示:

<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>

修改有效负载,它应该可以工作。

<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