ARM 模板创建和发布 Azure Runbook

ARM Template create and publish Azure Runbook

我的场景:

我在 github(AUri、BUri、CUri)中托管了三个运行手册(A、B 和 C)。我正在使用 ARM 模板来创建自动化帐户、凭证、三个运行手册,然后使用其中一个(运行手册 C)创建一个作业。

Runbook C 是主要的,A 和 B 在 C 内部被调用。

问题是要从 C 调用 A 和 B,需要先发布它们。

有没有办法通过我当前的 ARM 模板直接发布它们?

解决方法是将我的所有代码压缩到 runbook C 中,但我更愿意将它们分开。

目前的代码:

{
  "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
   .......
  },
  "variables": {
   ........
  },
  "resources": [
    {
   "name": "[parameters('accountName')]",
  "apiVersion": "2015-10-31",
  "type": "Microsoft.Automation/AutomationAccounts",
  "location": "westeurope",
  "properties": {
    "sku": {
      "name": "Basic"
    }
  },
  "resources": [
    {
      "apiVersion": "2015-10-31",
      "dependsOn": [
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]"
      ],
      "location": "westeurope",
      "name": "[variables('A')]",
      "properties": {
        "runbookType": "Script",
        "logProgress": "false",
        "logVerbose": "false",
        "description": "[variables('runbookDescription')]",
        "publishContentLink": {
          "uri": "[variables('AUri')]",
          "version": "1.0.0.0"
        }
      },
      "type": "runbooks"
    },

    {
      "apiVersion": "2015-10-31",
      "dependsOn": [
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]"
      ],
      "location": "westeurope",
      "name": "[variables('B')]",
      "properties": {
        "runbookType": "Script",
        "logProgress": "false",
        "logVerbose": "false",
        "description": "[variables('runbookDescription')]",
        "publishContentLink": {
          "uri": "[variables('BUri')]",
          "version": "1.0.0.0"
        }
      },
      "type": "runbooks"
    },

    {
      "apiVersion": "2015-10-31",
      "dependsOn": [
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]"
      ],
      "location": "westeurope",
      "name": "[variables('C')]",
      "properties": {
        "runbookType": "Script",
        "logProgress": "false",
        "logVerbose": "false",
        "description": "[variables('runbookDescription')]",
        "publishContentLink": {
          "uri": "[variables('CUri')]",
          "version": "1.0.0.0"
        }
      },
      "type": "runbooks"
    },

    {
      "name": "[parameters('credentialName')]",
      "type": "credentials",
      "apiVersion": "2015-10-31",
      "location": "westeurope",
      "dependsOn": [
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]"
      ],
      "tags": { },
      "properties": {
        "userName": "[parameters('userName')]",
        "password": "[parameters('password')]"
      }
    }
    //optional code that runs the runbook created, yo need unique Guid value for "name" key
    ,
    {
      "name": "Unique GUID Here",
      "type": "jobs",
      "apiVersion": "2015-10-31",
      "location": "westeurope",
      "dependsOn": [
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]",
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/credentials/', parameters('credentialName'))]",
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/runbooks/',variables('A'))]",
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/runbooks/',variables('B'))]",
        "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/runbooks/',variables('C'))]"
      ],
      "tags": {
        "key": "value"
      },
      "properties": {
        "runbook": {
          "name": "[variables('C')]"
        }
      }
    } ]
}

看起来您已经通过模板正确发布了运行手册,因为您提供了 publishContentLink。您的问题很可能是您没有将 Runbook C 标记为依赖于 Runbook A 和 B,因此 C 可能在 A 和 B 之前发布,并且当前在 Azure Automation 中,无论何时发布 Runbook,它所依赖的任何子 Runbook 都必须至少先发布一次。

解决方案是使 C runbook 的 dependsOn 字段看起来像:

"dependsOn": [ "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'))]", "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/runbooks/', variables('B'))]", "[concat('Microsoft.Automation/automationAccounts/', parameters('accountName'), '/runbooks/', variables('A'))]" ]