ADO Terraform 管道。一个订阅中的虚拟机,另一订阅中的 DNS 记录

问题描述 投票:0回答:1

我对使用 ADO 创建管道还很陌生,需要一些艺术建议。

我有一个管道,可以在我的“订阅 A”中的 Azure 中创建虚拟机。作为此过程中的一个步骤,我想在我的 DNS 中创建一个“A RECORD”,但我的 DNS 位于“subscription-B”中。

也许最好的方法是拥有一个单独的“DNS 管道”,仅负责创建记录,但从逻辑上讲,单个管道应该能够一次性完成此设置似乎是有意义的。

现在我的 virtual-machine-terraform-yaml 被这样调用:

    - task: TerraformCLI@0
      displayName: 'Terraform Init'
      inputs:
        command: init
        workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
        backendType: azurerm
        backendServiceArm: sc-my-vm-subscription-A

我可以创建第二个 terraform 目录,以及用于 DNS 订阅的第二个服务连接,假设我用于 DNS 工作的 git 存储库和我的 yaml 如下所示:

    - task: TerraformCLI@0
      displayName: 'Terraform Init'
      inputs:
        command: init
        workingDirectory: '$(System.DefaultWorkingDirectory)/terraform'
        backendType: azurerm
        backendServiceArm: sc-gypsy-150dev

    - task: TerraformCLI@0
      displayName: 'Terraform Init'
      inputs:
        command: init
        workingDirectory: '$(System.DefaultWorkingDirectory)/terraform-dns'
        backendType: azurerm
        backendServiceArm: sc-DNS-subscription-B

这个 Azure 布局适用于我的家庭项目。办公室里的事情要复杂得多。也许有人有一些很棒的 Azure/ADO 家庭实验室蓝图?我试图找到最简单、最干净的布局。感谢您的任何意见。 -斯科特

我一直在各种帖子中寻找,但我发现没有任何内容涵盖这一点。

azure-devops terraform
1个回答
0
投票
能够

将 terraform 模板中的资源部署到单个管道中的不同 Azure 订阅中。 以您的场景为例,您的存储库的 2 个文件夹中有 2 个

terraform templates

,我们需要运行

terraform init
(->
terraform validate
->
terraform plan
->)
terraform apply
命令两次,每个命令通过设置
workingDirectory
的任务属性,我们可以使用不同的
Azure Resource Manager
服务连接来决定部署的目标订阅。

作为优化,如果您购买了多个管道并行作业,您可以考虑通过 2 个代理作业

同时

部署两个模板。这是一个示例 YAML 管道供您参考。 图片

trigger: none pool: vmImage: ubuntu-latest variables: ARMSvcCnnSubA: ARMSvcCnnAutoSub7 backendStateRgA: rg-azstorageaccount backendStateStorageA: storageaccounta backendStatecontainerA: containertf ARMSvcCnnSubB: ARMSvcCnnAutoSub8 backendStateRgB: rg-azstorageaccount backendStateStorageB: storageaccountb backendStatecontainerB: containertf jobs: - job: TFDeploymentToSubA steps: - task: TerraformInstaller@2 inputs: terraformVersion: 'latest' displayName: Install Terraform on MS-hosted agent - task: TerraformCLI@2 inputs: command: 'init' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubA' backendType: 'azurerm' backendServiceArm: '$(ARMSvcCnnSubA)' # Save the backend state file in the storage account from SubA backendAzureRmResourceGroupName: '$(backendStateRgA)' backendAzureRmStorageAccountName: '$(backendStateStorageA)' backendAzureRmContainerName: '$(backendStatecontainerA)' backendAzureRmKey: 'deploytosuba.tfstate' allowTelemetryCollection: true displayName: Terraform init - task: TerraformCLI@2 inputs: command: 'validate' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubA' allowTelemetryCollection: true displayName: Terraform validate - task: TerraformCLI@2 inputs: command: 'plan' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubA' environmentServiceName: '$(ARMSvcCnnSubA)' commandOptions: '-input=false -var "RGNAME=subA-rg-tfdemo-$(Build.BuildId)"' allowTelemetryCollection: true displayName: Terraform plan - task: TerraformCLI@2 inputs: command: 'apply' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubA' environmentServiceName: '$(ARMSvcCnnSubA)' commandOptions: '-input=false -var "RGNAME=subA-rg-tfdemo-$(Build.BuildId)"' allowTelemetryCollection: true displayName: Terraform apply - job: TFDeploymentToSubB steps: - task: TerraformInstaller@2 inputs: terraformVersion: 'latest' displayName: Install Terraform on MS-hosted agent - task: TerraformCLI@2 inputs: command: 'init' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubB' backendType: 'azurerm' backendServiceArm: '$(ARMSvcCnnSubB)' # Save the backend state file in the storage account from SubA backendAzureRmResourceGroupName: '$(backendStateRgB)' backendAzureRmStorageAccountName: '$(backendStateStorageB)' backendAzureRmContainerName: '$(backendStatecontainerB)' backendAzureRmKey: 'deploytosubb.tfstate' allowTelemetryCollection: true displayName: Terraform init - task: TerraformCLI@2 inputs: command: 'validate' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubB' allowTelemetryCollection: true displayName: Terraform validate - task: TerraformCLI@2 inputs: command: 'plan' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubB' environmentServiceName: '$(ARMSvcCnnSubB)' commandOptions: '-input=false -var "RGNAME=subB-rg-tfdemo-$(Build.BuildId)"' allowTelemetryCollection: true displayName: Terraform plan - task: TerraformCLI@2 inputs: command: 'apply' workingDirectory: '$(System.DefaultWorkingDirectory)/Terraform-DeployToSubB' environmentServiceName: '$(ARMSvcCnnSubB)' commandOptions: '-input=false -var "RGNAME=subB-rg-tfdemo-$(Build.BuildId)"' allowTelemetryCollection: true displayName: Terraform apply

© www.soinside.com 2019 - 2024. All rights reserved.