Class: Pvectl::Services::Cloudinit
- Inherits:
-
Object
- Object
- Pvectl::Services::Cloudinit
- Defined in:
- lib/pvectl/services/cloudinit.rb
Overview
Orchestrates cloud-init operations on VMs.
Provides three operations:
-
regenerate— rebuild the cloud-init ISO from current config -
pending— list configuration changes not yet applied -
dump— retrieve the auto-generated cloud-init YAML
Operations are VM-only — LXC containers do not expose cloud-init endpoints. When the vmid resolves to a non-QEMU resource, the service raises Pvectl::ResourceNotFoundError.
Constant Summary collapse
- VALID_DUMP_TYPES =
Cloud-init config types supported by the
dumpoperation. %w[user network meta].freeze
Instance Method Summary collapse
-
#dump(vmid, type, node: nil) ⇒ String
Dumps the auto-generated cloud-init configuration.
-
#initialize(vm_repository:, resource_resolver:) ⇒ Cloudinit
constructor
Creates a new Cloudinit service.
-
#pending(vmid, node: nil) ⇒ Array<Hash{Symbol => untyped}>
Returns pending cloud-init configuration changes.
-
#regenerate(vmid, node: nil) ⇒ Hash{Symbol => untyped}
Regenerates the cloud-init ISO for the given VM.
Constructor Details
#initialize(vm_repository:, resource_resolver:) ⇒ Cloudinit
Creates a new Cloudinit service.
31 32 33 34 |
# File 'lib/pvectl/services/cloudinit.rb', line 31 def initialize(vm_repository:, resource_resolver:) @vm_repository = vm_repository @resolver = resource_resolver end |
Instance Method Details
#dump(vmid, type, node: nil) ⇒ String
Dumps the auto-generated cloud-init configuration.
67 68 69 70 71 72 73 74 75 |
# File 'lib/pvectl/services/cloudinit.rb', line 67 def dump(vmid, type, node: nil) unless VALID_DUMP_TYPES.include?(type) raise ArgumentError, "Invalid cloud-init dump type: #{type.inspect} " \ "(valid: #{VALID_DUMP_TYPES.join(', ')})" end node ||= resolve_node!(vmid) @vm_repository.cloudinit_dump(node, vmid, type) end |
#pending(vmid, node: nil) ⇒ Array<Hash{Symbol => untyped}>
Returns pending cloud-init configuration changes.
54 55 56 57 |
# File 'lib/pvectl/services/cloudinit.rb', line 54 def pending(vmid, node: nil) node ||= resolve_node!(vmid) @vm_repository.cloudinit_pending(node, vmid) end |
#regenerate(vmid, node: nil) ⇒ Hash{Symbol => untyped}
Regenerates the cloud-init ISO for the given VM.
42 43 44 45 46 |
# File 'lib/pvectl/services/cloudinit.rb', line 42 def regenerate(vmid, node: nil) node ||= resolve_node!(vmid) @vm_repository.cloudinit_regenerate(node, vmid) { vmid: vmid, node: node } end |