azure - Groovy:使用 JSON 执行 azure CLI 命令 - 解析问题?
问题描述
目前,由于命令中的 JSON 部分,我无法从 Groovy 运行 azure CLI 命令。
有一个 azure 命令可以在虚拟机上运行自定义脚本。机器上的 CommandToExecute 作为 JSON 传递。
工作示例:
REQUEST-CALL in Console:az vm extension set -g demo --vm-name demo-cfg01 --name CustomScript --publisher Microsoft.Azure.Extensions --settings '{"commandToExecute":"ls"}'
RESPONSE: {
"autoUpgradeMinorVersion": true,
"forceUpdateTag": null,
"id": "/subscriptions/xxxxxxxxxx-xxxxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/demo/providers/Microsoft.Compute/virtualMachines/demo-cfg01/extensions/CustomScript",
"instanceView": null,
"location": "germanycentral",
"name": "CustomScript",
"protectedSettings": null,
"provisioningState": "Succeeded",
"publisher": "Microsoft.Azure.Extensions",
"resourceGroup": "demo",
"settings": {
"commandToExecute": "ls"
},
"tags": null,
"type": "Microsoft.Compute/virtualMachines/extensions",
"typeHandlerVersion": "2.0",
"virtualMachineExtensionType": "CustomScript"
}
这个脚本工作正常。
使用 Groovy 执行的“相同”命令会导致以下结果:
def process
StopWatch.withTimeRecording("EXECUTING COMMAND '" + cargs + "'",_logger, Level.ALL) {
process = (cargs).execute(null,null);
process.waitForProcessOutput(sout, serr)
}
请注意记录包含参数的 StringArray 的 StopWatch:
执行命令'[az, vm, extension, set, -g, demo, --vm-name, demo-cfg01, --name, CustomScript, --publisher, Microsoft.Azure.Extensions, --settings, '{" commandToExecute":"ls"}']'
参数看起来与控制台中的相同
Azure 的响应是:
处理扩展“CustomScript”时,VM 报告失败。错误消息:“启用失败:获取配置失败:读取扩展配置时出错:解析设置文件时出错:解析 json 时出错:json:无法将字符串解组为映射 [string] 接口 {} 类型的 Go 值
我认为 groovy 在执行之前以某种方式逃脱了角色,我无法弄清楚出了什么问题。有什么建议吗?
解决方案
当您调用groovy(实际上是 java)时,每个参数都会被双引号引起execute
来。array
只需在字符串中根据需要构建命令行
groovy 中的字符串具有与数组相同的执行方法...
def cmd = """az vm extension set -g demo --vm-name demo-cfg01 --name CustomScript --publisher Microsoft.Azure.Extensions --settings '{"commandToExecute":"ls"}' """
def process = cmd.execute()
当您对字符串使用执行时,groovy 将执行您提供的确切命令
推荐阅读
- python - 如何简化 SymPy 中的正弦和余弦之和?
- sql-server - 无法安装 SSMS:挂起的重新启动阻止安装完成
- c# - 无法在 PC 上选择和启用语音输入(非内置麦克风)
- opencv - 使用立体相机的距离结果不佳
- java - 发送消息时出现 IOException - 找不到文件
- php - laravel 事件未发送到推送器
- vba - 运行时错误 '438' - 选项按钮可见性 \\ VBA
- python - 在 Python 中更改 keras floatx(默认浮点类型)
- android - 给定 APK 文件,我如何检测应用程序是否是用 Kotlin 编写的?
- ios - 如何隐藏 UITabBar 项目?