2016-03-23 1 views
1

Я пишу интерфейс между инструментом облачной оркестровки и API-интерфейсом Azure REST (диспетчер ресурсов), но у меня возникает проблема с тестированием дополнительных функций WindowsUnattendContent для получения Unattend.xml инъекции.Дополнительная информацияUnattendContent, отбрасываемая Azure Virtual Machines REST API

Почему код ниже не принимается службой API? В документации показан пример дополнительногоUnattendContent как объекта пары KV, но я обнаружил (путем поиска по фактической спецификации ARM), что это фактически список объектов. Он также указывает, что часть контента должна быть закодирована base64 и не более 4KiB и включать корневой элемент для функций или настроек (не совсем уверен, что это означает). Я закодировал то, что, по моему мнению, является действительным компонентом XML, но он выдает ошибку (код и ошибка отмечены ниже). Я пробовал это, используя оба варианта API версии 2016-03-30 и 2015-05-01 с такими же результатами.

Это отрывок osProfile из моего запроса на службу API.

"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": "[email protected]" 
}, 

в 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." 
    } 
} 

ответ

2

Мой опыт был:

  • это массив
  • не должен быть закодирован base64
  • атрибуты с двоеточиями вызывают странные ошибки (например, WCM: действие = ...)

Вот рабочий пример:

"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

+0

Спасибо за это. Кажется, это работает! – 01000101

+0

+1 Q & A Благодарим вас за пометы! Пришлось бороться со вторым вопросом тоже! Интересно, может ли на самом деле включить информацию о пространстве имен xmlns (xmlns: wcm = "http://schemas.microsoft.com/WMIConfig/2002/State"), также может исправить эту проблему? Но пока не попробовать. –