Как запретить Microsoft.Automation / AutomationAccounts / Compilationjobs всегда работать в развертывании ARM? - PullRequest
0 голосов
/ 04 февраля 2019

Мой шаблон ARM ниже, который является вложенным шаблоном в большем шаблоне ARM.По какой-то причине задание DSC Compilation всегда запускается при каждом развертывании.Я ожидал, что он не будет запущен, если он уже был запущен раньше.Как мне контролировать это поведение?Я попытался использовать "incrementNodeConfigurationBuild": "false", но это не сработало.

 {
      "name": "WorkerNodeDscConfiguration",
      "type": "Microsoft.Resources/deployments",
      "apiVersion": "2017-05-10",
      "resourceGroup": "[parameters('automationAccountRGName')]",
      "dependsOn": [],
      "properties": {
        "mode": "Incremental",
        "template": {
          "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
          "contentVersion": "1.0.0.1",
          "resources": [
            {
              "apiversion": "2015-10-31",
              "location": "[reference(variables('automationAccountResourceId'), '2018-01-15','Full').location]",
              "name": "[parameters('automationAccountName')]",
              "type": "Microsoft.Automation/automationAccounts",
              "properties": {
                "sku": {
                  "name": "Basic"
                }
              },
              "tags": {},
              "resources": [
                {
                  "name": "workernode",
                  "type": "configurations",
                  "apiVersion": "2018-01-15",
                  "location": "[reference(variables('automationAccountResourceId'), '2018-01-15','Full').location]",
                  "dependsOn": [
                    "[concat('Microsoft.Automation/automationAccounts/', parameters('AutomationAccountName'))]"
                  ],
                  "properties": {
                    "state": "Published",
                    "overwrite": "false",
                    "incrementNodeConfigurationBuild": "false",
                    "Source": {
                      "Version": "1.2",
                      "type": "uri",
                      "value": "[parameters('WorkerNodeDSCConfigURL')]"
                    }
                  }
                },
                {
                  "name": "[guid(resourceGroup().id, deployment().name)]",
                  "type": "Compilationjobs",
                  "apiVersion": "2018-01-15",
                  "tags": {},
                  "dependsOn": [
                    "[concat('Microsoft.Automation/automationAccounts/', parameters('AutomationAccountName'))]",
                    "[concat('Microsoft.Automation/automationAccounts/', parameters('AutomationAccountName'),'/Configurations/workernode')]"
                  ],
                  "properties": {
                    "configuration": {
                      "name": "workernode"
                    },
                    "incrementNodeConfigurationBuild": "false",
                    "parameters": {
                      "WebServerContentURL": "[parameters('WebServerContentURL')]"
                    }
                  }
                }
              ]
            }
          ]
        }
      }
    }

1 Ответ

0 голосов
/ 18 февраля 2019

Короче говоря, AFAIK, вы должны иметь возможность контролировать это поведение с помощью «условия».

Чтобы объяснить это подробно, ресурс заданий компиляции DSC всегда запускается при каждом развертывании, потому что когда мы используем задания компиляции DSCресурс (т. е. Microsoft.Automation / AutomationAccounts / compilationjobs) в шаблоне ARM, IMHO, для чего он предназначен, в основном нажимает кнопку «Компилировать» конфигурации DSC.

Если вы нажмете на этоКнопка «Скомпилировать», компиляция работы происходит точно, даже если она уже скомпилирована.Вы также можете проверить ту же часть вручную.

Таким образом, AFAIK, который послужил причиной задания компиляции, всегда выполнялся при каждом развертывании.

Что вы могли бы сделать, обновить шаблон ARM с помощью условия'(Для получения дополнительной информации обратитесь к https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-templates-resources#condition и https://docs.microsoft.com/en-us/azure/architecture/building-blocks/extending-templates/conditional-deploy), а затем оберните ваш шаблон приведенным ниже примером кода PowerShell, который определит, выполнена ли уже Компиляция задания для конкретной конфигурации DSC, и затем развернитешаблон путем передачи значения встроенного параметра или путем обновления параметра условия в файле шаблона параметров, соответственно, новым или существующим значением. (Для получения дополнительной информации см. https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-template-deploy#pass-parameter-values)

$DscCompilationJob = Get-AzAutomationDscCompilationJob -AutomationAccountName AUTOMATIONACCOUNTNAME -ResourceGroupName RESOURCEGROUPNAME|Sort-Object -Descending -Property CreationTime|Select -First 1| Select Status
$DscCompilationJobStatus = $DscCompilationJob.Status
if ($DscCompilationJobStatus -ne "Completed"){
    $DscCompilationJobStatusInlineParameter = "new"
    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName testgroup -TemplateFile TEMPLATEFILEPATH\demotemplate.json -exampleString $DscCompilationJobStatusInlineParameter
    #or update condition parameter in parameters template file with new value accordingly and use below command to deploy the template
    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup -TemplateFile TEMPLATEFILEPATH\demotemplate.json -TemplateParameterFile TEMPLATEFILEPATH\demotemplate.parameters.json
}else{
    $DscCompilationJobStatusInlineParameter = "existing"
    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName testgroup -TemplateFile TEMPLATEFILEPATH\demotemplate.json -exampleString $DscCompilationJobStatusInlineParameter
    #or update condition parameter in parameters template file with existing value accordingly and use below command to deploy the template
    New-AzResourceGroupDeployment -Name ExampleDeployment -ResourceGroupName ExampleResourceGroup -TemplateFile TEMPLATEFILEPATH\demotemplate.json -TemplateParameterFile TEMPLATEFILEPATH\demotemplate.parameters.json
}

А что касается свойства incrementNodeConfigurationBuild, ИМХО это свойство являетсяпросто что касается создания новой версии сборки, требуется или нет конфигурация узла, т. е. когда инкрементная сборка конфигурации узла установлена ​​в false, она не отменяет ранее существующую конфигурацию узла, создавая новую конфигурацию узла с помощьюth имя CONFIGNAME [<2>] (номер версии увеличивается на основе уже существующего номера версии).

Надеюсь, это поможет !!Ура !!:)

...