使用Terraform在VirtualBox创建Ubuntu虚拟机报错求助
问题:Terraform创建VirtualBox Ubuntu虚拟机失败,OS显示为Other/Unknown
我尝试用Terraform在Oracle VM VirtualBox中创建2台Ubuntu虚拟机,对应的main.tf配置如下:
terraform { required_providers { virtualbox = { source = "shekeriev/virtualbox" version = "0.0.4" } } } resource "virtualbox_vm" "vm1" { count = 2 name = format("node-%02d", count.index + 1) image = "https://app.vagrantup.com/ubuntu/boxes/bionic64/versions/20180903.0.0/providers/virtualbox.box" cpus = 2 memory = "512 mib" # user_data = file("${path.module}/user_data") network_adapter { type = "bridge" # device = "IntelPro1000MTDesktop" # host_interface = "vboxnet1" # On Windows use this instead host_interface = "VirtualBox Host-Only Ethernet Adapter" } output "IPAddress" { value = element(virtualbox_vm.vm1.*.network_adapter.0.ipv4_address, 1) }
执行terraform apply时持续报错,错误信息如下:
│ Error: can't set up VM properties: exit status 1 │ │ with virtualbox_vm.vm1[0], │ on main.tf line 15, in resource "virtualbox_vm" "vm1": │ 15: resource "virtualbox_vm" "vm1" { │ ╵ ╷ │ Error: can't set up VM properties: exit status 1 │ │ with virtualbox_vm.vm1[1], │ on main.tf line 15, in resource "virtualbox_vm" "vm1": │ 15: resource "virtualbox_vm" "vm1" { │ ╵ 2023-02-07T17:06:10.579+0100 [TRACE] statemgr.Filesystem: removing lock metadata file .terraform.tfstate.lock.info 2023-02-07T17:06:10.580+0100 [TRACE] statemgr.Filesystem: unlocked by closing terraform.tfstate 2023-02-07T17:06:10.581+0100 [DEBUG] provider.stdio: received EOF, stopping recv loop: err="rpc error: code = Unavailable desc = error reading from server: EOF" 2023-02-07T17:06:10.591+0100 [DEBUG] provider: plugin process exited: path=.terraform/providers/registry.terraform.io/shekeriev/virtualbox/0.0.4/windows_amd64/terraform-provider-virtualbox.exe pid=28956 2023-02-07T17:06:10.591+0100 [DEBUG] provider: plugin exited
同时VirtualBox管理器中显示这些虚拟机的操作系统为Other/Unknown。
解决方案
显式指定操作系统类型
shekeriev的virtualbox provider不会自动识别Vagrant镜像的OS类型,必须在virtualbox_vm资源块中添加os_type_id字段,Ubuntu 18.04(bionic64)对应的类型为Ubuntu_64:resource "virtualbox_vm" "vm1" { # 其他配置... os_type_id = "Ubuntu_64" # 其他配置... }修正网络适配器配置冲突
你当前的配置同时设置了type = "bridge"和host_interface = "VirtualBox Host-Only Ethernet Adapter",这两种模式不兼容,二选一调整:- 若使用桥接模式:删除
host_interface配置,让VirtualBox自动选择物理网卡network_adapter { type = "bridge" } - 若使用Host-Only模式:将
type改为hostonlynetwork_adapter { type = "hostonly" host_interface = "VirtualBox Host-Only Ethernet Adapter" }
- 若使用桥接模式:删除
升级VirtualBox Provider版本
0.0.4版本属于早期版本,存在较多兼容性问题,建议升级到最新稳定版,修改terraform块中的版本约束:terraform { required_providers { virtualbox = { source = "shekeriev/virtualbox" version = "~> 0.2.0" # 可根据实际兼容情况调整为最新版 } } }修改后执行
terraform init -upgrade完成版本升级。清理残留资源后重新部署
- 打开VirtualBox管理器,手动删除已创建的错误虚拟机
- 执行
terraform destroy清理Terraform状态文件 - 重新执行
terraform init && terraform apply
内容的提问来源于stack exchange,提问作者Abdulsalam Al Mahdi
相关产品推荐
相关产品推荐

