簡體   English   中英

Azure虛擬機REST API拒絕了額外的UnattendContent內容

[英]additionalUnattendContent content being rejected by Azure Virtual Machines REST API

我正在編寫雲編排工具和Azure REST API(資源管理器)之間的接口,但是在測試Windows AdditionalUnattendContent功能以使Unattend.xml注入正常工作時遇到了問題。

為什么API服務不接受以下代碼? 該文檔顯示了一個額外的實例UnattendContent作為KV對對象,但是我發現(通過搜索實際的ARM規范)它實際上是對象列表。 它還指定內容部分應該是base64編碼的,並且大小不得大於4KiB,並包括功能或設置的根元素(不完全確定這是什么意思)。 我已經編碼了我認為是有效的XML組件,但是它引發了一個錯誤(下面指出了代碼和錯誤)。 我已經使用API​​版本2016-03-30和2015-05-01-preview嘗試了此方法,並且結果相同。

這是我對API服務的請求中的osProfile摘錄。

"osProfile": {
  "adminUsername": "winuxadmin",
  "computername": "vm331d4bwx",
  "windowsConfiguration": {
    "additionalUnattendContent": [{
      "content": "PFN5bmNocm9ub3VzQ29tbWFuZCB3Y206YWN0aW9uPSJhZGQiPjxDb21tYW5kTGluZT4lU3lzdGVtUm9vdCVcc3lzdGVtMzJcbmV0c2ggYWR2ZmlyZXdhbGwgYWRkIHJ1bGUgbmFtZT0iV2luUk0gSFRUUCA1OTg1IiBwcm90b2NvbD0iVENQIiBkaXI9ImluIiBsb2NhbHBvcnQ9IjU5ODUiIGFjdGlvbj0iYWxsb3ciPC9Db21tYW5kTGluZT48T3JkZXI+MTwvT3JkZXI+PERlc2NyaXB0aW9uPk9wZW4gV2luUk0gSFRUUCBwb3J0PC9EZXNjcmlwdGlvbj48L1N5bmNocm9ub3VzQ29tbWFuZD4=",
      "componentName": "Microsoft-Windows-Shell-Setup",
      "settingName": "FirstLogonCommands",
      "passName": "oobeSystem"
    }],
    "winRM": {
      "listeners": [{
        "protocol": "http",
        "certificateUrl": null
      }]
    },
    "provisionVMAgent": true
  },
  "adminPassword": "MyW1nP@ssw0rd"
},

base64 XML AdditionalUnattendContent [0] .content對此進行了解碼( 注意 :我也進行了相同的測試,但內容XML包裝在根設置節點- <FirstLogonCommands>...</FirstLogonCommands> ,但結果是相同)。 此處的實際Windows命令並不是很重要,很有可能需要一個WinRM命令來允許未加密的連接,但是問題實際上與命令無關-

<SynchronousCommand wcm:action="add">
  <CommandLine>%SystemRoot%\system32\netsh advfirewall add rule name="WinRM HTTP 5985" protocol="TCP" dir="in" localport="5985" action="allow"</CommandLine>
  <Order>1</Order>
  <Description>Enable QuickEdit mode</Description>
</SynchronousCommand>

一旦我意識到官方文檔對AdditionalUnattendContent的格式有誤(它應該是對象列表,而不僅僅是對象),我便可以從API服務中獲取以下錯誤-

statusCode:BadRequest serviceRequestId:<req-id> statusMessage:
{
  "error": 
  {
    "code": "InvalidParameter",
    "target": "windowsConfiguration.additionalUnattendContent.content",
    "message": "The value of parameter windowsConfiguration.additionalUnattendContent.content is invalid."
  }
}

我的經驗是:

  • 它是一個數組
  • 它不應該是base64編碼的
  • 帶冒號的屬性會導致奇怪的錯誤(例如wcm:action = ...)

這是一個工作示例:

"additionalUnattendContent": [
  {
    "passName": "oobesystem",
    "componentName": "Microsoft-Windows-Shell-Setup",
    "settingName": "FirstLogonCommands",
    "content": "<FirstLogonCommands><SynchronousCommand><CommandLine>shutdown /r /t 0 /c \"initial reboot\"</CommandLine><Description>reboot</Description><Order>1</Order></SynchronousCommand></FirstLogonCommands>"
  }
]

這是關於該主題的討論: https : //github.com/Azure/azure-quickstart-templates/issues/1407

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM