我正在尝试将作为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 诊断或其他日志中找到任何有用的命令反馈。
1条答案
按热度按时间brtdzjyr1#
一个可行的解决方案是使用
remote_exec
预配器而不是custom_data
方法。