azure - Terraform 配置程序无法在 Azure 上 winrm 到新建的 Windows VM
问题描述
我正在尝试使用 Terraform 在 Azure 上配置 Windows VM 并同时引导它。我能想到的方式是 terraform provisioner。出于测试目的,我这样写了provisioner:
provisioner "remote-exec" {
inline = [
"md c:/terraform",
]
connection {
type = "winrm"
host = "${azurerm_network_interface.vmstamp.private_ip_address}"
user = "${var.admin_username}"
password = "${var.admin_password}"
https = false
insecure = true
timeout = "1m"
}
}
模板成功预配了 VM,但在尝试将 VM 与 WinRM 连接时产生错误。
azurerm_virtual_machine.vmstamp: Still creating... (5m50s elapsed)
azurerm_virtual_machine.vmstamp (remote-exec): Connecting to remote host via WinRM...
azurerm_virtual_machine.vmstamp (remote-exec): Host: 10.237.249.146
azurerm_virtual_machine.vmstamp (remote-exec): Port: 5985
azurerm_virtual_machine.vmstamp (remote-exec): User: azadmin
azurerm_virtual_machine.vmstamp (remote-exec): Password: true
azurerm_virtual_machine.vmstamp (remote-exec): HTTPS: true
azurerm_virtual_machine.vmstamp (remote-exec): Insecure: true
azurerm_virtual_machine.vmstamp (remote-exec): NTLM: false
azurerm_virtual_machine.vmstamp (remote-exec): CACert: false
azurerm_virtual_machine.vmstamp: Still creating... (6m0s elapsed)
Error: Error applying plan:
1 error(s) occurred:
* azurerm_virtual_machine.vmstamp: timeout - last error: unknown error Post https://10.237.249.146:5985/wsman: dial tcp 10.237.249.146:5985: connectex: A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.
我尝试过的几件事:
1)正在考虑防火墙问题。但是 packer 可以使用以下代码启动连接到同一台笔记本电脑上新建的 windows VM:
"communicator": "winrm",
"winrm_use_ssl": "true",
"winrm_insecure": "true",
"winrm_timeout": "3m",
"winrm_username": "packer",
2) 试过https=true
和https=false
,都失败了。
3) 试过use_ntlm=true
和use_ntlm=false
,都失败了。
4) 试过port=5985
和port=5986
,都失败了。5986 实际上没有从市场映像中侦听新的 Windows VM。
terraform provisioner 的正确配置是什么?
解决方案
对于你的问题,我做了测试。您可以通过 Packer 查看 windows 图像的结果:
可以看到winrm也有超时。另一个 Terraform 测试我也得到了 winrm 的超时。因此,我建议您可以使用 vm 扩展启用 winrm,确保端口 5985 已打开,然后使用配置程序执行您想要的操作。
更新
也许有什么遗漏了,所以我没有像你一样成功。但是有一个过程要注意Packer设置证书的URL。此处的文档还显示了如果要使用它,如何使用证书的 URL 启用 winrm。所以我认为 Packer 只是自己做,但 Terraform 不会为你做。
推荐阅读
- amazon-s3 - AWS Glue - getSink() 在glue_context.purge_s3_path 之后立即抛出“没有这样的文件或目录”
- c# - 在不同的 using-statment 中使用相同的一次性对象两次
- java - Android Room:使用 ViewModel、Repository、Database 插入多对多关系实体
- python - 错误说我有 NaN、无穷大或对于 dtype('float64') 来说太大的值
- python - 如何将矩阵转换为邻接矩阵?
- pyspark - 检查 groupBy 的结果,然后是 spark 中的 orderBy
- android - Android仪表视图
- swift - type() 不能符合 View;只有结构/枚举/类类型可以符合协议
- c++ - 无法让 Boost Beast Websocket 服务器识别 SSL 证书
- docker - 如何在 docker 中使用入口点/cmd?