2017-07-26 38 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變量的用法。