Class: Pvectl::Models::Volume

Inherits:
Base
  • Object
show all
Defined in:
lib/pvectl/models/volume.rb

Overview

Represents a virtual disk (volume) attached to a VM or container.

Volumes can originate from two data sources:

  • VM/CT config (has name like “scsi0”, parsed from config values)

  • Storage content API (has volid, content type)

Examples:

From VM config

Volume.new(name: "scsi0", storage: "local-lvm", volume_id: "vm-100-disk-0",
           size: "32G", resource_type: "vm", resource_id: 100, node: "pve1")

From storage content API

Volume.new(volid: "local-lvm:vm-100-disk-0", size: "32G", format: "raw",
           content: "images", resource_type: "vm", resource_id: 100, node: "pve1")

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attrs = {}) ⇒ Volume

Creates a new Volume instance.

Parameters:

  • attrs (Hash) (defaults to: {})

    volume attributes

Options Hash (attrs):

  • :name (String)

    disk name from config

  • :storage (String)

    storage name

  • :volume_id (String)

    volume identifier within storage

  • :volid (String)

    full volume identifier

  • :size (String)

    volume size

  • :format (String)

    disk format

  • :resource_type (String)

    resource type (“vm” or “ct”)

  • :resource_id (Integer)

    VMID or CTID

  • :node (String)

    Proxmox node name

  • :content (String)

    storage content type

  • :cache (String)

    cache mode

  • :discard (String)

    discard mode

  • :ssd (Integer)

    SSD emulation flag (1/0)

  • :iothread (Integer)

    IO thread flag (1/0)

  • :backup (Integer)

    backup inclusion flag (1/0)

  • :mp (String)

    mount point path



87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/pvectl/models/volume.rb', line 87

def initialize(attrs = {})
  super
  @name = attributes[:name]
  @storage = attributes[:storage]
  @volume_id = attributes[:volume_id]
  @volid = attributes[:volid] || construct_volid
  @size = attributes[:size]
  @format = attributes[:format]
  @resource_type = attributes[:resource_type]
  @resource_id = attributes[:resource_id]
  @node = attributes[:node]
  @content = attributes[:content]
  @cache = attributes[:cache]
  @discard = attributes[:discard]
  @ssd = attributes[:ssd]
  @iothread = attributes[:iothread]
  @backup = attributes[:backup]
  @mp = attributes[:mp]
end

Instance Attribute Details

#backupInteger? (readonly)

Returns backup inclusion flag (1/0).

Returns:

  • (Integer, nil)

    backup inclusion flag (1/0)



63
64
65
# File 'lib/pvectl/models/volume.rb', line 63

def backup
  @backup
end

#cacheString? (readonly)

Returns cache mode (e.g., “writeback”, “none”).

Returns:

  • (String, nil)

    cache mode (e.g., “writeback”, “none”)



51
52
53
# File 'lib/pvectl/models/volume.rb', line 51

def cache
  @cache
end

#contentString? (readonly)

Returns storage content type (e.g., “images”, “rootdir”).

Returns:

  • (String, nil)

    storage content type (e.g., “images”, “rootdir”)



48
49
50
# File 'lib/pvectl/models/volume.rb', line 48

def content
  @content
end

#discardString? (readonly)

Returns discard mode (e.g., “on”, “ignore”).

Returns:

  • (String, nil)

    discard mode (e.g., “on”, “ignore”)



54
55
56
# File 'lib/pvectl/models/volume.rb', line 54

def discard
  @discard
end

#formatString? (readonly)

Returns disk format (e.g., “raw”, “qcow2”).

Returns:

  • (String, nil)

    disk format (e.g., “raw”, “qcow2”)



36
37
38
# File 'lib/pvectl/models/volume.rb', line 36

def format
  @format
end

#iothreadInteger? (readonly)

Returns IO thread flag (1/0).

Returns:

  • (Integer, nil)

    IO thread flag (1/0)



60
61
62
# File 'lib/pvectl/models/volume.rb', line 60

def iothread
  @iothread
end

#mpString? (readonly)

Returns mount point path (containers only).

Returns:

  • (String, nil)

    mount point path (containers only)



66
67
68
# File 'lib/pvectl/models/volume.rb', line 66

def mp
  @mp
end

#nameString? (readonly)

Returns disk name from config (e.g., “scsi0”, “rootfs”).

Returns:

  • (String, nil)

    disk name from config (e.g., “scsi0”, “rootfs”)



21
22
23
# File 'lib/pvectl/models/volume.rb', line 21

def name
  @name
end

#nodeString? (readonly)

Returns Proxmox node name.

Returns:

  • (String, nil)

    Proxmox node name



45
46
47
# File 'lib/pvectl/models/volume.rb', line 45

def node
  @node
end

#resource_idInteger? (readonly)

Returns VMID or CTID.

Returns:

  • (Integer, nil)

    VMID or CTID



42
43
44
# File 'lib/pvectl/models/volume.rb', line 42

def resource_id
  @resource_id
end

#resource_typeString? (readonly)

Returns resource type (“vm” or “ct”).

Returns:

  • (String, nil)

    resource type (“vm” or “ct”)



39
40
41
# File 'lib/pvectl/models/volume.rb', line 39

def resource_type
  @resource_type
end

#sizeString? (readonly)

Returns volume size (e.g., “32G”).

Returns:

  • (String, nil)

    volume size (e.g., “32G”)



33
34
35
# File 'lib/pvectl/models/volume.rb', line 33

def size
  @size
end

#ssdInteger? (readonly)

Returns SSD emulation flag (1/0).

Returns:

  • (Integer, nil)

    SSD emulation flag (1/0)



57
58
59
# File 'lib/pvectl/models/volume.rb', line 57

def ssd
  @ssd
end

#storageString? (readonly)

Returns storage name (e.g., “local-lvm”).

Returns:

  • (String, nil)

    storage name (e.g., “local-lvm”)



24
25
26
# File 'lib/pvectl/models/volume.rb', line 24

def storage
  @storage
end

#volidString? (readonly)

Returns full volume identifier (e.g., “local-lvm:vm-100-disk-0”).

Returns:

  • (String, nil)

    full volume identifier (e.g., “local-lvm:vm-100-disk-0”)



30
31
32
# File 'lib/pvectl/models/volume.rb', line 30

def volid
  @volid
end

#volume_idString? (readonly)

Returns volume identifier within storage (e.g., “vm-100-disk-0”).

Returns:

  • (String, nil)

    volume identifier within storage (e.g., “vm-100-disk-0”)



27
28
29
# File 'lib/pvectl/models/volume.rb', line 27

def volume_id
  @volume_id
end

Instance Method Details

#container?Boolean

Checks if volume belongs to a container.

Returns:

  • (Boolean)


117
118
119
# File 'lib/pvectl/models/volume.rb', line 117

def container?
  resource_type == "ct"
end

#vm?Boolean

Checks if volume belongs to a VM.

Returns:

  • (Boolean)


110
111
112
# File 'lib/pvectl/models/volume.rb', line 110

def vm?
  resource_type == "vm"
end