Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 18 additions & 2 deletions libvirt/resource_libvirt_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ import (
"github.com/davecgh/go-spew/spew"
libvirt "github.com/digitalocean/go-libvirt"
"github.com/dmacvicar/terraform-provider-libvirt/libvirt/helper/suppress"
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
"libvirt.org/go/libvirtxml"
Expand Down Expand Up @@ -771,9 +772,24 @@ func resourceLibvirtDomainRead(ctx context.Context, d *schema.ResourceData, meta

virConn := meta.(*Client).libvirt

uuid := parseUUID(d.Id())
var domain libvirt.Domain
var err error

// Try to parse as UUID first, fallback to name lookup if that fails
if uuid, parseErr := uuid.Parse(d.Id()); parseErr == nil {
// ID is a valid UUID, lookup by UUID
domain, err = virConn.DomainLookupByUUID(libvirt.UUID(uuid))
} else {
// ID is not a UUID, assume it's a domain name
log.Printf("[DEBUG] ID '%s' is not a UUID, looking up domain by name", d.Id())
domain, err = virConn.DomainLookupByName(d.Id())

// If we found the domain by name, update the ID to use the UUID for consistency
if err == nil {
d.SetId(uuidString(domain.UUID))
}
}

domain, err := virConn.DomainLookupByUUID(uuid)
if err != nil {
if isError(err, libvirt.ErrNoDomain) {
d.SetId("")
Expand Down