dmacvicar / terraform-provider-libvirt

Terraform provider to provision infrastructure with Linux's KVM using libvirt
Apache License 2.0
1.59k stars 458 forks source link

libvirt_network terraform import crash #790

Closed Nassiel closed 2 years ago

Nassiel commented 4 years ago

System Information

Linux distribution

Archlinux

Terraform version

Terraform v0.13.3
+ provider registry.terraform.io/dmacvicar/libvirt v0.6.2
+ provider registry.terraform.io/hashicorp/template v2.1.2
+ provider registry.terraform.io/hashicorp/vault v2.14.0

Provider and libvirt versions

0.6.2


Checklist

Description of Issue/Question

Create in the destination machine QEMU a network, then reproduce the same configuration in terraform and try to import into the current state.

Setup

resource "libvirt_network" "public" {
  name = "public"
  mode = "bridge"
  dev = "br0"
  bridge = "br0"
}

Steps to Reproduce Issue

terraform import libvirt_network.public <network UUID>

Error: rpc error: code = Unavailable desc = transport is closing

panic: runtime error: invalid memory address or nil pointer dereference
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0xec0d3a]
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: 
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: goroutine 82 [running]:
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: github.com/dmacvicar/terraform-provider-libvirt/libvirt.resourceLibvirtNetworkRead(0xc0000d2770, 0xf59b60, 0xc000582060, 0x0, 0x0)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/libvirt/resource_libvirt_network.go:556 +0x33a
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: github.com/hashicorp/terraform-plugin-sdk/helper/schema.(*Resource).RefreshWithoutUpgrade(0xc0000c6a80, 0xc0004a4320, 0xf59b60, 0xc000582060, 0xc0000be310, 0x0, 0x0)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/github.com/hashicorp/terraform-plugin-sdk/helper/schema/resource.go:455 +0x129
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: github.com/hashicorp/terraform-plugin-sdk/internal/helper/plugin.(*GRPCProviderServer).ReadResource(0xc0000be060, 0x130c720, 0xc0007361b0, 0xc0004a40a0, 0xc0000be060, 0xc0007361b0, 0xc0004a8a48)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/github.com/hashicorp/terraform-plugin-sdk/internal/helper/plugin/grpc_provider.go:525 +0x3dd
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: github.com/hashicorp/terraform-plugin-sdk/internal/tfplugin5._Provider_ReadResource_Handler(0x1121a80, 0xc0000be060, 0x130c720, 0xc0007361b0, 0xc000048720, 0x0, 0x130c720, 0xc0007361b0, 0xc0001ae000, 0xac)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/github.com/hashicorp/terraform-plugin-sdk/internal/tfplugin5/tfplugin5.pb.go:3153 +0x214
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: google.golang.org/grpc.(*Server).processUnaryRPC(0xc0000a3c80, 0x1316360, 0xc0006c2900, 0xc00073c000, 0xc00007e6c0, 0x18ccf70, 0x0, 0x0, 0x0)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/google.golang.org/grpc/server.go:1007 +0x482
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: google.golang.org/grpc.(*Server).handleStream(0xc0000a3c80, 0x1316360, 0xc0006c2900, 0xc00073c000, 0x0)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/google.golang.org/grpc/server.go:1287 +0xd34
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: google.golang.org/grpc.(*Server).serveStreams.func1.1(0xc0003721a0, 0xc0000a3c80, 0x1316360, 0xc0006c2900, 0xc00073c000)
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/google.golang.org/grpc/server.go:722 +0xa5
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt: created by google.golang.org/grpc.(*Server).serveStreams.func1
2020-10-03T20:16:25.794+0200 [DEBUG] plugin.terraform-provider-libvirt:         $HOME/Code/GO/terraform-provider-libvirt/vendor/google.golang.org/grpc/server.go:720 +0xa5
2020/10/03 20:16:25 [ERROR] eval: *terraform.EvalRefresh, err: rpc error: code = Unavailable desc = transport is closing
2020/10/03 20:16:25 [ERROR] eval: *terraform.EvalSequence, err: rpc error: code = Unavailable desc = transport is closing
2020/10/03 20:16:25 [TRACE] [walkImport] Exiting eval tree: import libvirt_network.public result
2020-10-03T20:16:25.795+0200 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/registry.terraform.io/dmacvicar/libvirt/0.6.2/linux_amd64/terraform-provider-libvirt pid=63114 error="exit status 2"
2020/10/03 20:16:25 [TRACE] vertex "import libvirt_network.public result": visit complete
2020/10/03 20:16:25 [TRACE] vertex "libvirt_network.public (import id \"91a7c7a5-04af-44c7-b270-ec74ff095ee1\")": dynamic subgraph encountered errors
2020/10/03 20:16:25 [TRACE] vertex "libvirt_network.public (import id \"91a7c7a5-04af-44c7-b270-ec74ff095ee1\")": visit complete
2020-10-03T20:16:25.985+0200 [DEBUG] plugin.terraform-provider-vault_v2.14.0_x4: 2020/10/03 20:16:25 [INFO] Using Vault token with the following policies: terraform
2020/10/03 20:16:25 [TRACE] [walkImport] Exiting eval tree: provider["registry.terraform.io/hashicorp/vault"]
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/vault\"]": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "data.vault_generic_secret.something"
2020/10/03 20:16:25 [TRACE] vertex "data.vault_generic_secret.something": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "data.vault_generic_secret.something": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "data.vault_generic_secret.something"
2020/10/03 20:16:25 [TRACE] vertex "data.vault_generic_secret.something": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "data.vault_generic_secret.something": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "data.template_file.ansible_centos_user_data"
2020/10/03 20:16:25 [TRACE] vertex "data.template_file.ansible_centos_user_data": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "data.template_file.ansible_centos_user_data": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "data.template_file.ansible_fedora_user_data"
2020/10/03 20:16:25 [TRACE] vertex "data.template_file.ansible_fedora_user_data": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "provider[\"registry.terraform.io/hashicorp/vault\"] (close)"
2020/10/03 20:16:25 [TRACE] vertex "data.template_file.ansible_fedora_user_data": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "libvirt_cloudinit_disk.commoninit-centos"
2020/10/03 20:16:25 [TRACE] vertex "libvirt_cloudinit_disk.commoninit-centos": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "libvirt_cloudinit_disk.commoninit-centos": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "libvirt_cloudinit_disk.commoninit-fedora"
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "libvirt_domain.domain-centos"
2020/10/03 20:16:25 [TRACE] vertex "libvirt_cloudinit_disk.commoninit-fedora": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "libvirt_domain.domain-centos": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "libvirt_domain.domain-centos": visit complete
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/vault\"] (close)": starting visit (*terraform.graphNodeCloseProvider)
2020/10/03 20:16:25 [TRACE] vertex "libvirt_cloudinit_disk.commoninit-fedora": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "provider[\"registry.terraform.io/hashicorp/template\"] (close)"
2020/10/03 20:16:25 [TRACE] dag/walk: visiting "libvirt_domain.domain-fedora"
2020/10/03 20:16:25 [TRACE] vertex "libvirt_domain.domain-fedora": starting visit (*terraform.NodeAbstractResource)
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/vault\"] (close)": evaluating
2020/10/03 20:16:25 [TRACE] vertex "libvirt_domain.domain-fedora": visit complete
2020/10/03 20:16:25 [TRACE] [walkImport] Entering eval tree: provider["registry.terraform.io/hashicorp/vault"] (close)
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/template\"] (close)": starting visit (*terraform.graphNodeCloseProvider)
2020/10/03 20:16:25 [TRACE] eval: *terraform.EvalCloseProvider
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/template\"] (close)": evaluating
2020/10/03 20:16:25 [TRACE] [walkImport] Entering eval tree: provider["registry.terraform.io/hashicorp/template"] (close)
2020/10/03 20:16:25 [TRACE] GRPCProvider: Close
2020/10/03 20:16:25 [TRACE] dag/walk: upstream of "provider[\"registry.terraform.io/dmacvicar/libvirt\"] (close)" errored, so skipping
2020/10/03 20:16:25 [TRACE] eval: *terraform.EvalCloseProvider
2020-10-03T20:16:25.990+0200 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/registry.terraform.io/hashicorp/vault/2.14.0/linux_amd64/terraform-provider-vault_v2.14.0_x4 pid=63132
2020-10-03T20:16:25.990+0200 [DEBUG] plugin: plugin exited
2020/10/03 20:16:25 [TRACE] [walkImport] Exiting eval tree: provider["registry.terraform.io/hashicorp/vault"] (close)
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/vault\"] (close)": visit complete
2020/10/03 20:16:25 [TRACE] GRPCProvider: Close
2020-10-03T20:16:25.994+0200 [DEBUG] plugin: plugin process exited: path=.terraform/plugins/registry.terraform.io/hashicorp/template/2.1.2/linux_amd64/terraform-provider-template_v2.1.2_x4 pid=63095
2020-10-03T20:16:25.994+0200 [DEBUG] plugin: plugin exited
2020/10/03 20:16:25 [TRACE] [walkImport] Exiting eval tree: provider["registry.terraform.io/hashicorp/template"] (close)
2020/10/03 20:16:25 [TRACE] vertex "provider[\"registry.terraform.io/hashicorp/template\"] (close)": visit complete
2020/10/03 20:16:25 [TRACE] dag/walk: upstream of "root" errored, so skipping
2020-10-03T20:16:25.995+0200 [DEBUG] plugin: plugin exited

Additional information:

No.

MalloZup commented 3 years ago

hi @Nassiel thx for issue.

I don't remember if we support the operation of import. I remember in past we had similar issue

Are you willing to drive this research task and help the provider?

So we would need:

I can give additional pointer in case. Tia

rombert commented 3 years ago

I've been trying to run an import as well, and had reasonable success with

$ terraform version
Terraform v0.13.4
+ provider registry.terraform.io/dmacvicar/libvirt v0.6.2
+ provider registry.terraform.io/hashicorp/template v2.2.0

I've hit a couple of problems though:

It gets me closer since I am at least able to get the outputs from terraform, but it's not working perfectly. In case it matters, I ran the import after (somehow) the terraform state stored on an s3 bucket became unusable.

Nassiel commented 3 years ago

@MalloZup If import is not supported, then is now way to keep a configuration like mine. Because I cannot create neither maintain later, so seems is needed to add more parameters inside the module.

If you don't mind, I'll take a look of how to do it to prepare a pull request with the item supported in creation. One day we could add the import functionality.

MalloZup commented 3 years ago

sure thx @Nassiel :love_you_gesture:

Nassiel commented 3 years ago

Hi @MalloZup I have the pull request almost ready. But I'd appreciate some help, I want to avoid some combinations like add extra interfaces and put bridge at the same time. On the tests, the test fail if I do that and the condition is being evaluated correctly but for some reason, Terraform plan says "yeah, all fine, go on" and of course later the apply fails.

Any idea?? Here is the branch.

Nassiel commented 2 years ago

@abdullahchaudhry @MalloZup Many things have happened since then, but, AFAIK, the issue on this topic wasn't addressed. I'll update it with the latest commits and see if it's solved. If not, I'm happy to retake it if someone can also take a look at the error.

Nassiel commented 2 years ago

Hi, @abdullahchaudhry seems solved, now they use a function to iterate lookupMachineand there it searches by canonical name or name. So I'd consider this solved.