如何在copyIndex(数组)资源上使用dependsOn?

时间:2019-11-18 18:12:00

标签: azure azure-resource-manager arm-template

我正在使用手臂模板来部署主题和订阅。我要部署的资源属于Microsoft.Resources/deployments类型,因为我的目标是部署所在外部的资源组。

如果主题已经存在,则该模板有效。 由于arm模板资源是并行部署的,因此我需要让主题之前部署-this ordering is made possible by dependsOn

我遇到的问题是,因为主题的"name"值具有copyIndex(),所以我不确定如何定位主题资源。

在我尝试过的很多东西中,有一些:

  • [concat(parameters('serviceBusNamespaceName'), '/', parameters('subscriptions')[copyIndex()].topic)]
  • [resourceId('Microsoft.Resources/deployments', parameters('topics'))]
  • ["topicLoop"]

这是模板中的主题和订阅资源对象:

        {
            "apiVersion": "2018-02-01",
            "type": "Microsoft.Resources/deployments",
            "name": "[concat(parameters('serviceBusNamespaceName'), copyIndex())]",
            "resourceGroup": "[parameters('sharedResourcesResourceGroupName')]",
            "copy": {
                "name": "topicLoop",
                "count": "[length(parameters('topics'))]"
            },
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "2018-05-01",
                    "contentVersion": "1.0.0.0",
                    "resources": [
                        {
                            "type": "Microsoft.ServiceBus/namespaces/topics",
                            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('topics')[copyIndex()])]",
                            "apiVersion": "2017-04-01",
                            "location": "[resourceGroup().location]",
                            "properties": {}                  
                        }
                    ]
                }
            }
        },
        {
            "apiVersion": "2018-02-01",
            "type": "Microsoft.Resources/deployments",
            "name": "[concat(parameters('subscriptions')[copyIndex()].topic, copyIndex())]",
            "resourceGroup": "[parameters('sharedResourcesResourceGroupName')]",
            "copy": {
                "name": "subscriptionLoop",
                "count": "[length(parameters('subscriptions'))]"
            },
            "properties": {
                "mode": "Incremental",
                "template": {
                    "$schema": "2018-05-01",
                    "contentVersion": "1.0.0.0",
                    "resources": [
                        {
                            "type": "Microsoft.ServiceBus/namespaces/topics/subscriptions",
                            "name": "[concat(parameters('serviceBusNamespaceName'), '/', parameters('subscriptions')[copyIndex()].topic, '/', parameters('subscriptions')[copyIndex()].subscription)]",
                            "apiVersion": "2017-04-01",
                            "location": "[resourceGroup().location]",
                            "properties": {}          
                        }
                    ]
                }
            },
            "dependsOn": [
                // what goes here?! I need to have this depend on the topics 
            ]
        }

2 个答案:

答案 0 :(得分:0)

是的,如果可以生成每个资源的名称,则可以对每个资源使用dependsOn。或者您可以对它们进行硬编码。无论哪种方式,您都可以dependsOn通过使用其名称来#include <iostream> #include <fstream> using namespace std; string decimalToHex(int); void subtraction(string, string) int hexadecimalToDecimal(char hexVal); int fullSubtractor(int tempOp1, int tempOp2) int main() { ifstream myFile; string l1, l2, l3, l4, l5, l6, l7, l8; //lines string l1op1, l1op2, l2op1, l2op2, l3op1, l3op2, l4op1, l4op2, l5op1, l5op2, l6op1, l6op2, l7op1, l7op2, l8op1, l8op2; //parsed operators myFile.open("data.txt"); if (myFile.is_open()) //check if file opened { cout << "File opened successfully. " << endl; } else { cerr << "File failed to open." << endl; return 1; } while (!myFile.eof()) { myFile >> l6 >> l7; //read in line by line } l6op1 = l6.substr(0, l6.find("-")); l6op2 = l6.substr(l6.find("-") + 1); l6op2 = l6op2.substr(0, l6op2.length() - 1); std::string l6op2_zeros = std::string((l6op1.length()) - l6op2.length(), '0') + l6op2; cout << l6; // << subtraction(l6op1, l6op2_zeros) << endl; subtraction(l6op1, l6op2_zeros); cout << endl; l7op1 = l7.substr(0, l7.find("-")); l7op2 = l7.substr(l7.find("-") + 1); l7op2 = l7op2.substr(0, l7op2.length() - 1); std::string l7op2_zeros = std::string((l7op1.length()) - l7op2.length(), '0') + l7op2; //appends zeros to front of second operand to make it same length as operand 1 cout << l7; // << subtraction(l7op1, l7op2) << endl; subtraction(l7op1, l7op2_zeros); cout << endl; myFile.close(); return 0; } int fullSubtractor(int tempOp1, int tempOp2) { static int borrow; int result = 0; if ((tempOp1 < tempOp2) || ((tempOp1 == 0) && (borrow == 1))) { tempOp1 += 16; result = tempOp1 - borrow - tempOp2; borrow = 1; } else { result = tempOp1 - tempOp2; borrow = 0; } return result; } void subtraction(string op1, string op2) { string result; int tempDifference = 0, tempHex = 0; int j = op2.length() - 1; for (int i = op1.length() - 1; i >= 0; i--) { int temp1 = hexadecimalToDecimal(op1[i]); int temp2 = hexadecimalToDecimal(op2[j]); tempHex = fullSubtractor(temp1, temp2); result = decimalToHex(tempHex) + result; cout << result << " "; j--; } cout << result << endl; //return result; } int hexadecimalToDecimal(char hexVal) { int base = 1; int dec_val = 0; if (hexVal >= '0' && hexVal <= '9') { dec_val += (hexVal - 48) * base; base *= 16; } else if (hexVal >= 'A' && hexVal <= 'F') { dec_val += (hexVal - 55) * base; // incrementing base by power base *= 16; } return dec_val; } string decimalToHex(int decNum) { stringstream ss; ss << hex << decNum; string hexNum(ss.str()); //cout << hexNum << endl; return hexNum; } ,也可以通过使用其名称引用它们来在循环中使用单个资源

答案 1 :(得分:0)

dependsOn的值很简单:

"dependsOn" : ["topicLoop"]

但是它必须位于最外部的资源上,而不是嵌套模板上。

相关问题