2016-04-03 38 views
0

我正在考慮定義API版本號,它看起來像我在所有鏈接模板中引用的某個模板中一直重複的,但看起來好像我在這樣做時遇到了問題,米不知道這是否應該甚至可能,更不用說如何做到這一點。在ARM模板之間共享變量或常量

例如,詮釋azuredeploy-shared.json我可以做類似

{ 
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#", 
    "contentVersion": "1.0.0.0", 
    "variables": { 
    "apiVersion": { 
     "resources": { "deployments": "2015-01-01" } 
    } 
    } 
} 

azuredeploy.json然後我可以使用它像

resources": [ 
{ 
    "name": "someResource", 
    "type": "Microsoft.Resources/deployments", 
    "apiVersion": "[variables('apiVersion').resources.deployments]", 

第一個攔路虎是需要有一個resources部分。這讓我懷疑我是否引用了錯誤的模式或者應該引用一個。如果我創建了一些我認爲是虛擬資源的東西,並提供了這個想法,那麼azuredeploy.json應如何引用此文件?

我可以做類似"[concat(parameters('_artifactsLocation'), '/ProjectName/Templates/azuredeploy-shared-json', parameters('_artifactsLocationSasToken'))]"的東西,但我不知道它在哪裏或如何以及它是否仍然有效。所以,工作指點在這方面表示讚賞。我確實看到了How to pass variables between templates - ARM json,但不幸的是我不明白它應該如何工作,也不知道鏈接的Azure示例。

+0

只是爲了確保我理解你的場景......你是否試圖從2個json文件中提取parametrers /變量 - 一個是共享值,另一個是那個部署特有的值? –

+0

@ bmoore-msft我想創建一個文件「常量」,我可以「包含」在其他文件中,然後用一些常量變量名稱引用常量。我注意到我有很多字符串,例如「apiVersion」:「2015-01-01」,我想立即更新,一旦工具不抱怨,例如在這種情況下,關於使用*「2016- 03-30" *。我害怕我錯過了一些簡單的事情。我設法「包含」其他片段(在那裏使用'concat'),並將參數傳遞給它們,但不能從它們*中*。也許我應該以某種方式利用'outputs'指令..? – Veksi

回答

2

好吧,我認爲你可以使用部署輸出來做到這一點...似乎可能有一個更簡單的解決方案,但我無法想象一個像我瞭解你的場景。

1)部署包含所有的常量的模板,並設置這些常量爲輸出在模板部署中部署

2)要訪問它們,使用引用功能,例如

reference('/subscriptions/{GUID}/resourceGroups/{resourceGroupName}/providers/Microsoft.Resources/deployments/{deploymentName}','2015-01-01').outputs.{nameOfConstant}.value]" 

只需再次使用相同的部署名稱部署步驟1即可更新常量。那是你的追求?

+0

我認爲產出是要走的路。我已經增加了我的模板相當大,所以需要分解一點並測試。感謝您的確認! – Veksi