代码之家  ›  专栏  ›  技术社区  ›  Gregory Suvalian

如何预防Microsoft.Automation/automationAccounts/Compilationjobs总是在ARM部署中运行?

  •  0
  • Gregory Suvalian  · 技术社区  · 7 年前

    "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')]"
                        }
                      }
                    }
                  ]
                }
              ]
            }
          }
        }
    
    0 回复  |  直到 7 年前
        1
  •  0
  •   KrishnaG    7 年前

    简言之,你应该能够用“条件”来控制这种行为。

    为了详细解释,DSC compilation jobs资源总是在每个部署上运行,因为当我们使用DSC compilation jobs资源(即。,Microsoft.Automation/automationAccounts/compilationjobs)在ARM模板中,IMHO在后面做的是,基本上单击DSC配置的Compile按钮。

    所以这就是编译作业总是在每个部署上运行的原因。

    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 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
    }
    

    希望这有帮助!!干杯!!:)