Skip to content

Split virt into specialized modules #144

Open
@mlow

Description

@mlow
SUMMARY

Currently virt has rather a lot going on.. it's used both to manage resources (libvirt domains) as well as retrieve information of both individual domains of the libvirt node itself (free memory, etc). I think it would be better to split its functionality into a handful of focused modules. These modules could be added without altering any existing functionality. I would image virt eventually being deprecated.

ISSUE TYPE
  • Refactor
COMPONENT NAME
  • virt
ADDITIONAL INFORMATION

This is motivated by recent work I've been doing with community.libvirt (working towards a clean, declarative way to deploy libvirt VMs, that isn't Terraform, and finding that community.libvirt needs some work done to get me there :).

One of the needs I've encountered is the ability to retrieve a domain's interface addresses (also seen in #124). I've got a working prototype of this, but it's challenging to figure out the best way to supply the flag controlling the source of the addressing info (arp, lease, or agent). Meanwhile I can envision a way of implementing this in a separate module which focuses on information retrieval, with a signature of something like:

---
- community.libvirt.domain_info:
    name: my-domain
    interface_addresses:
      source: agent

Which would return something like:

{
  "changed": false,
  "interface_addresses": {
     ... raw libvirt data
  }
}

This scheme allows for getting multiple bits of information about a domain at once, e.g.:

---
- community.libvirt.domain_info:
    name: my-domain
    state:
    interface_addresses:
      source: agent

... in a GraphQL-esque fashion, returning data in the same "shape" it's been requested in:

{
  "changed": false,
  "state": "running",
  "interface_addresses": {
     ... raw libvirt data
  }
}

The other modules I would expect are:

  • domain - focusing on domain management (idempotent XML definition and state (running, stopped) management)
  • node_info - for retrieval of node-wide information (free mem, etc)

I would love for any feedback on the above proposals. If there's agreement that they seem worthwhile, I'll be happy to get started on them.

Cheers

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions