无法从 terraform 在 azure VM 中执行自定义数据

萨维什·谢蒂

我正在尝试使用 terraform 创建 azure vm。但无法从 terraform 执行自定义数据。Customdata.bin 文件是在服务器上创建的。还尝试了供应商资源,但没有运气。

main.tf 文件 azure vm 资源语法:

resource "azurerm_virtual_machine" "avmweb0" {
  name                  = "${var.env}-${var.bu}-${var.company_name}-media-vm"
  location              = "${var.region}"
  resource_group_name   = "${module.network.resource-grp-name}"
  network_interface_ids = ["${azurerm_network_interface.nicweb0.id}"]
  vm_size               = "${var.vm_size}"


  storage_image_reference {
    publisher       = "${var.vm_publisher}"
    offer           = "${var.vm_offer}"
    sku             = "${var.vm_sku}"
    version         = "${var.vm_version}"

  }

  storage_os_disk {
    name              = "${var.env}-${var.bu}-${var.company_name}-media-osdisk"
    caching           = "ReadWrite"
    create_option     = "FromImage"
    managed_disk_type = "Standard_LRS"
  }



  os_profile {
    computer_name  = "${var.env}-${var.vm_computer_name}"
    admin_username = "${var.vm_admin_username}"
    admin_password = "${var.vm_admin_password}"
    custom_data    = "${data.template_file.userdata.rendered}" 
  }

   os_profile_windows_config{
     winrm {
       protocol="http"
     }

    }

   /* 
     connection {
      type     = "winrm"
      user     = "${var.vm_admin_username}"
      password = "${var.vm_admin_password}"
      host     = "${azurerm_public_ip.mediapubip.ip_address}"
      port     = 5985
      https    = false
      insecure = true
      timeout      = "15m"
      # cacert       = ""
    } */

   /* provisioner "file" {
    content      = "${data.template_file.userdata.rendered}"
    destination = "C:\\AzureData\\initdata.ps1"

    connection {
      type     = "winrm"
      user     = "${var.vm_admin_username}"
      password = "${var.vm_admin_password}"
    }
  }
   provisioner "remote-exec" {


    inline = [ "powershell.exe -ExecutionPolicy unrestricted -NoProfile -NonInteractive -File \"C:\\AzureData\\initdata.ps1\""]


  }  */

  /* provisioner "file" {
    content      = "${data.template_file.userdata.rendered}"
    destination = "C:\\AzureData\\initdata.ps1"
  }

   provisioner "local-exec" {
    command = "powershell.exe -ExecutionPolicy RemoteSigned -File \"C:\\AzureData\\initdata.ps1\" -NoProfile -NonInteractive "
  } */

  tags {
        Name            = "${var.env}-${var.bu}-${var.company_name}-media"
        BussinessUnit   = "${var.bu}"
        Environment     = "${var.env}"
        CompanyName     = "${var.company_name}"
        Application     = "${var.appname}"
   }
}

------------自定义数据文件 ---------------------------------

Set-ExecutionPolicy unrestricted
netsh advfirewall firewall add rule name="http" dir=in action=allow protocol=TCP localport=80

write-host "running init script"
if(!(test-path -Path "c:\temp"))
  {    
    New-Item -ItemType directory -Path "C:\temp"
    write-host "created temp directory"
  }
$client = new-object System.Net.WebClient
$client.DownloadFile("https://downloads.puppetlabs.com/windows/puppet5/puppet-agent-5.0.0-x64.msi","c:\temp\puppet.msi")
cd "c:\temp"
pwd
echo "`nx.x.x.x puppet"  | Out-File -FilePath "C:\Windows\System32\drivers\etc\hosts" -Append -Encoding ascii
msiexec /qn /norestart /i "c:\temp\puppet.msi" 
if(test-path -path "C:\ProgramData\PuppetLabs\facter\facts.d")
  {
    echo "`nhello"  | Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Encoding ascii
    echo "`nconsolename : ${consolename}" | Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii
    echo "`nbu : ${bu}" | Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii
    echo "`nenv : ${env}" | Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii            
    echo "`ncompany_name : ${company_name}" | Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii
    echo "`napplication : ${application}" |  Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii
    echo "`nservertype : ${servertype}" |  Out-File -FilePath "C:\ProgramData\PuppetLabs\facter\facts.d\facts.yaml" -Append -Encoding ascii
 }

使用供应商资源时出错:发生 1 个错误:

  • azurerm_virtual_machine.avmweb0:发生 1 个错误:

  • 未知错误 Post http://xxxx:5985/wsman : dial tcp xxxx:5985: connectex: 连接尝试失败,因为连接方在一段时间后没有正确响应,或者建立连接失败,因为连接的主机没有响应.

Terraform 不会在遇到错误时自动回滚。相反,您的 Terraform 状态文件已使用成功完成的任何资源进行了部分更新。请解决上述错误并再次申请以逐步更改您的基础设施。[0m[0m]

代码 :

resource "azurerm_virtual_machine_extension" "avmme0" {
  name                 = "${var.env}-${var.vm_computer_name}-config"
  location             = "West US"
  resource_group_name  = "${module.network.resource-grp-name}"
  virtual_machine_name = "${azurerm_virtual_machine.avmweb0.name}"
  publisher            = "Microsoft.Compute"
  type                 = "CustomScriptExtension"
  type_handler_version = "1.8"

  settings = <<SETTINGS
    {
        "fileUris": ["https://raw.githubusercontent.com/saveshnshetty/devops/master/userdata.ps1"],
        "commandToExecute": "powershell.exe -ExecutionPolicy unrestricted -NoProfile -NonInteractive -File userdata.ps1"
    }
SETTINGS

  tags {
        Name            = "${var.env}-${var.bu}-${var.company_name}-media"
        BussinessUnit   = "${var.bu}"
        Environment     = "${var.env}"
        CompanyName     = "${var.company_name}"
        Application     = "${var.appname}"
   }
}

错误:[0m[1mazurerm_virtual_machine_extension.avmme0:仍在创建...(25m20s 已过)[0m[0m [31mError 应用计划:

发生了 1 个错误:

  • azurerm_virtual_machine_extension.avmme0:发生 1 个错误:

  • azurerm_virtual_machine_extension.avmme0:compute.VirtualMachineExtensionsClient#CreateOrUpdate:发送请求失败:StatusCode=200——原始错误:长时间运行的操作以状态“失败”终止:代码=“VMAgentStatusCommunicationError”消息=“VM”dev-it-mactores-media- vm' 未报告 VM 代理或扩展的状态。请验证 VM 是否有正在运行的 VM 代理,并且可以建立到 Azure 存储的出站连接。”

我可以使用以下命令从服务器下载: $client = new-object System.Net.WebClient $client.DownloadFile(" https://raw.githubusercontent.com/saveshnshetty/devops/master/userdata.ps1 ", "c:\temp\userdata.ps1")

入站和出站规则对 5985 开放。

Tf var file  details :
region                  ="West US"
storage_account_type    =""
vm.size                 ="Standard_DS1_v2"
location                ="West US"
appname                 ="xxx"
bu                      ="it"
company_name            ="xxxx"
env                     ="dev"
tenant_id               =""
client_secret           =""
client_id               =""
storage_account_type    ="Standard_LRS"
vm_size                 = "Standard_DS1_v2"
vm_publisher            = "MicrosoftWindowsServer"
vm_offer                = "WindowsServer"
vm_sku                  = "2012-R2-Datacenter"
vm_version              = "latest"
vm_computer_name        = "web-media"
vm_admin_username       = "xxxx"
vm_admin_password       = "xxxx"
Shui shengbao

错误日志的原因是您没有在 Azure NSG 上打开端口 5985。因此,您的脚本无法连接到 Azure VM。对于Azure的VM,我建议你可以使用Custom Script Extension,而不是winrm你的虚拟机。

自定义脚本扩展下载并在 Azure 虚拟机上执行脚本。此扩展对于部署后配置、软件安装或任何其他配置/管理任务非常有用。

Terraform 还支持自定义脚本扩展。请参阅此链接根据您的情况,建议您将自定义数据保存为ps1文件,上传到GitHub或Azure存储账户。你可以参考我的回答Windows 自定义脚本扩展应该使用如下:

resource "azurerm_virtual_machine_extension" "test" {
  name                 = "hostname"
  location             = "West US"
  resource_group_name  = "${azurerm_resource_group.test.name}"
  virtual_machine_name = "${azurerm_virtual_machine.test.name}"
  publisher            = "Microsoft.Compute"
  type                 = "CustomScriptExtension"
  type_handler_version = "1.8"

   settings = <<SETTINGS
    {
        "fileUris": ["https://raw.githubusercontent.com/saveshnshetty/devops/master/userdata.ps1"],
        "commandToExecute": "powershell.exe -ExecutionPolicy unrestricted -NoProfile -NonInteractive -File userdata.ps1"
    }
SETTINGS

你可以检查我的vm.tf

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Terraform Azure VM SSH密钥

来自分类Dev

无法从映像旋转 Azure 中的 VM

来自分类Dev

Azure Terraform-加密VM OS磁盘

来自分类Dev

Azure 上的 Terraform 配置私有 VM

来自分类Dev

无法使用Terraform停止GCP VM

来自分类Dev

Azure上的Terraform:使用变量作为参数从本地文件执行Windows VM的Powershell脚本

来自分类Dev

无法捕获Azure VM的映像

来自分类Dev

无法ping通到Azure VM

来自分类Dev

无法 scp 到 Azure 的 VM

来自分类Dev

Azure 上的 Terraform,VM 名称和托管数据磁盘未对齐

来自分类Dev

如何从下面的 terraform 代码中获取 azure VM 的公共 IP

来自分类Dev

无法登录在Azure中打包程序创建的ubuntu vm

来自分类Dev

无法连接到Microsoft Azure中的linux VM

来自分类Dev

无法从 Windows Azure VM 连接 Linux Azure VM

来自分类Dev

使用Azure Windows VM运行PowerSell脚本的自定义数据

来自分类Dev

具有多个自定义域的 Azure VM

来自分类Dev

Terraform和Azure:无法设置存储帐户

来自分类Dev

我似乎无法从Azure Linux VM连接到MySQL服务器的Azure数据库

来自分类Dev

无法将Azure WebJob连接到Azure VM上的SQL数据库

来自分类Dev

无法使用Terraform在自定义VPC中创建Elastic Beanstalk应用程序

来自分类Dev

Azure 上 Windows Server 2012 R2 数据中心 VM 上 SQL Server 2014 的 Terraform 脚本

来自分类Dev

您的凭据无法使用Azure VM

来自分类Dev

VMAccessForLinux无法在Azure RM VM上置备

来自分类Dev

无法在Azure VM上更新ubuntu

来自分类Dev

Azure VM无法接收传入的SIP请求

来自分类Dev

错误:Azure VM无法获取结构URI

来自分类Dev

无法采用RDP的VM在Azure上运行

来自分类Dev

Terraform Azure应用程序网关无法与密钥库中的证书关联

来自分类Dev

远程客户端无法连接到在Azure VM中运行的Redisai Docker容器

Related 相关文章

  1. 1

    Terraform Azure VM SSH密钥

  2. 2

    无法从映像旋转 Azure 中的 VM

  3. 3

    Azure Terraform-加密VM OS磁盘

  4. 4

    Azure 上的 Terraform 配置私有 VM

  5. 5

    无法使用Terraform停止GCP VM

  6. 6

    Azure上的Terraform:使用变量作为参数从本地文件执行Windows VM的Powershell脚本

  7. 7

    无法捕获Azure VM的映像

  8. 8

    无法ping通到Azure VM

  9. 9

    无法 scp 到 Azure 的 VM

  10. 10

    Azure 上的 Terraform,VM 名称和托管数据磁盘未对齐

  11. 11

    如何从下面的 terraform 代码中获取 azure VM 的公共 IP

  12. 12

    无法登录在Azure中打包程序创建的ubuntu vm

  13. 13

    无法连接到Microsoft Azure中的linux VM

  14. 14

    无法从 Windows Azure VM 连接 Linux Azure VM

  15. 15

    使用Azure Windows VM运行PowerSell脚本的自定义数据

  16. 16

    具有多个自定义域的 Azure VM

  17. 17

    Terraform和Azure:无法设置存储帐户

  18. 18

    我似乎无法从Azure Linux VM连接到MySQL服务器的Azure数据库

  19. 19

    无法将Azure WebJob连接到Azure VM上的SQL数据库

  20. 20

    无法使用Terraform在自定义VPC中创建Elastic Beanstalk应用程序

  21. 21

    Azure 上 Windows Server 2012 R2 数据中心 VM 上 SQL Server 2014 的 Terraform 脚本

  22. 22

    您的凭据无法使用Azure VM

  23. 23

    VMAccessForLinux无法在Azure RM VM上置备

  24. 24

    无法在Azure VM上更新ubuntu

  25. 25

    Azure VM无法接收传入的SIP请求

  26. 26

    错误:Azure VM无法获取结构URI

  27. 27

    无法采用RDP的VM在Azure上运行

  28. 28

    Terraform Azure应用程序网关无法与密钥库中的证书关联

  29. 29

    远程客户端无法连接到在Azure VM中运行的Redisai Docker容器

热门标签

归档