【发布时间】:2018-01-01 14:27:39
【问题描述】:
我有一个用于 ARM 模板的 PowerShell 脚本,用于将一些资源部署到 Azure,更具体地说是 ASE v2。
我的 ARM 模板中有一个条件说明:
"sv-ase-version": "v2",
"sv-asp-template-filenameHash": {
"v1": "[concat(variables('sv-baseURI'),concat('/azuredeploy-asp.v1.json',parameters('_artifactsLocationSasToken')))]",
"v2": "[concat(variables('sv-baseURI'),concat('/azuredeploy-asp.json',parameters('_artifactsLocationSasToken')))]"
},
我现在在 PowerShell 中拥有的东西:
Param(
[string] $TemplateFile = 'azuredeploy-dev.json',
[string] $TemplateParametersFile = 'azuredeploy-dev.parameters.json',
)
$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
$TemplateParametersFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile))
我想在 PowerShell 中添加的是:
Param(
[string] $TemplateFile = 'azuredeploy-dev.json',
[string] $TemplateParametersFile = 'azuredeploy-dev.parameters.json',
[string] $TemplateFilev2 = 'azuredeploy.json',
[string] $TemplateParametersFilev2 = 'azuredeploy.parameters.json',
)
#Checking if this is the correct way to do it
if ("sv-ase-version" -eq "v1") {
$TemplateFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFile))
$TemplateParametersFile = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFile))
}
else {
$TemplateFilev2 = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateFilev2))
$TemplateParametersFilev2 = [System.IO.Path]::GetFullPath([System.IO.Path]::Combine($PSScriptRoot, $TemplateParametersFilev2))
}
我的意图:在 JSON 文件中进行切换,而不需要在 PowerShell 中进行更改。
这行得通吗?您将如何以不同的方式处理这个问题?
谢谢。
【问题讨论】:
-
if ("sv-ase-version" -eq "v1")这没有意义。这总是错误的。你想达到什么目标? -
如果 sv-ase-version 的值为 v1,则试图告诉 powershell 使用 2 个变量。如果是 v2,则需要使用其他 2 个变量。
-
价值从何而来?现在它的硬编码
-
该值被硬编码到名为 azuredeploy.json 的 JSON 中,该 JSON 将 ARM 模板部署到 azure 中。请参阅我发布的代码的第一部分。
-
这没有意义。您希望 powershell 根据模板中的内容决定部署什么?
标签: json powershell azure arm-template ase