如何将Linux VM添加到Terraform中的Azure DevOps环境?

sdnqo3pr  于 2023-05-01  发布在  Linux
关注(0)|答案(1)|浏览(150)

我正在尝试将作为Terraform脚本的一部分创建的Linux Ubuntu VM注册到名为“Production”的现有Azure DevOps环境。为此,我尝试使用Azure DevOps提供的脚本作为custom_data条目的一部分:

locals {
  custom_data = <<CUSTOM_DATA
#!/bin/bash

sudo apt update

mkdir azagent;cd azagent;curl -fkSL -o vstsagent.tar.gz https://vstsagentpackage.azureedge.net/agent/3.220.0/vsts-agent-linux-x64-3.220.0.tar.gz;tar -zxvf vstsagent.tar.gz; if [ -x "$(command -v systemctl)" ]; then ./config.sh --unattended --environment --environmentname "Production" --acceptteeeula --agent $HOSTNAME --url https://dev.azure.com/my-dev-ops/ --work _work --projectname 'My Project' --auth PAT --token <snip> --runasservice; sudo ./svc.sh install; sudo ./svc.sh start; else ./config.sh --environment --environmentname "Production" --acceptteeeula --agent $HOSTNAME --url https://dev.azure.com/my-dev-ops/ --work _work --projectname 'My Project' --auth PAT --token <snip>; ./run.sh; fi

sudo apt install docker.io -y 

sudo apt install azure-cli -y

  CUSTOM_DATA
}

resource "azurerm_linux_virtual_machine" "primary_vm" {
  name                            = "vmname"
  location                        = "uksouth"
  resource_group_name             = azurerm_resource_group.rg.name
  size                            = "Standard_B1s"
  admin_username                  = "user"
  admin_password                  = "pass"
  disable_password_authentication = false
  network_interface_ids           = [azurerm_network_interface.vm_nic.id]
  custom_data                     = base64encode(local.custom_data)
  
  boot_diagnostics {
    storage_account_uri = null
  }

  os_disk {
    name                 = "vmname"
    caching              = "ReadWrite"
    storage_account_type = "Premium_LRS"
  }

  source_image_reference {
    publisher = "canonical"
    offer     = "0001-com-ubuntu-server-focal"
    sku       = "20_04-lts-gen2"
    version   = "latest"
  }

  identity {
    type = "SystemAssigned"
  }
}

请注意,文件中还有更多内容,但它们应该是相关的部分。
结果是使用docker和azure-cli创建的VM,但该VM未注册到环境中。VM甚至不包含名为azagent的文件夹。
如果我使用azagent命令并在SSH会话中自己在VM上运行它,它会像预期的那样在无人值守模式下工作,没有错误。
方法有问题吗?我还没有能够在 Boot 诊断或其他日志中找到任何有用的命令反馈。

brtdzjyr

brtdzjyr1#

一个可行的解决方案是使用remote_exec预配器而不是custom_data方法。

resource "azurerm_linux_virtual_machine" "primary_vm" {
//
  provisioner "remote-exec" {
    inline = [
      "The script"
    ]

    connection {
     //SSH Connection Details
    }
  }
}

相关问题