2017-07-26 76 views
0

我有一个ARM模板的PowerShell脚本,用于将一些资源部署到Azure中,更具体地说是ASE v2。尝试为ARM模板制作if/else powershell

我的胳膊模板中有一个条款,规定:

"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中更改内容。

会这样吗?你会如何解决这个问题?

谢谢。

+0

'if(“sv-ase-version”-eq“v1”)'this does not sense。这总是错误的。你想达到什么目的? – 4c74356b41

+0

试图告诉powershell使用2个变量,如果sv-ase-version的值是v1。如果是v2,则需要使用其他2个变量。 –

+0

价值从哪里来?现在它的硬编码为 – 4c74356b41

回答

0

做到这一点的最简单的方法是在模板中使用的参数,调用它像deploymentPrefix

"deploymentPrefix": { 
    "type": "string", 
    "defaultValue": "dev", 
    "allowedValues": [ 
     "dev", 
     "prod" 
    ], 
    "metadata": { 
     "description": "Resources created will be prefixed with this." 
    } 
}, 

,并根据该参数的值决定如何在模板部署:

"variables": { 
    "template-dev": "someurl", 
    "template-prod": "someotherurl", 
    "template-url": "[concat('template-', parameters('deploymentPrefix))]" 
    ... 
} 

在你的powershell中,你只需要使用New-AzureRmResourceGroupDeployment并将该参数(dev或prod)传递给参数,模板会找出模板url变量的用法。