Module: ProxmoxVMVolumesHelper

Includes:
ProxmoxVMCdromHelper, ProxmoxVMCloudinitHelper
Included in:
ProxmoxVMHelper
Defined in:
app/helpers/proxmox_vm_volumes_helper.rb

Overview

Convert a foreman form server hash into a fog-proxmox server attributes hash

Instance Method Summary collapse

Methods included from ProxmoxVMCloudinitHelper

#attach_cloudinit_iso, #check_template_format, #create_cloudinit_iso, #create_temp_directory, #default_iso_path, #delete_temp_dir, #generate_iso_command, #parse_cloudinit_config, #parse_server_cloudinit, #update_boot_order, #vm_ssh

Methods included from ProxmoxVMCdromHelper

#parse_server_cdrom

Instance Method Details

#add_disk_options(disk, args) ⇒ Object



30
31
32
33
34
35
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 30

def add_disk_options(disk, args)
  options = ForemanFogProxmox::HashCollection.new_hash_reject_keys(args,
    ['id', 'volid', 'controller', 'device', 'storage', 'size', '_delete', 'storage_type'])
  ForemanFogProxmox::HashCollection.remove_empty_values(options)
  disk[:options] = options
end

#add_typed_volume(volumes, value, type) ⇒ Object



106
107
108
109
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 106

def add_typed_volume(volumes, value, type)
  volume = parse_typed_volume(value, type)
  volumes.push(volume) unless ForemanFogProxmox::Value.empty?(volume)
end

#parse_hard_disk_volume(args) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 51

def parse_hard_disk_volume(args)
  logger.debug(format(_('parse_hard_disk_volume(): args=%<args>s'), args: args))
  disk = {}
  rootfs_volume = rootfs_volume?(args)
  set_disk_attributes(disk, args)
  if rootfs_volume
    args.delete('backup')
  elsif args['backup'].nil?
    args['backup'] = '1'
  end
  if args.key?('options')
    options = args['options']
    if rootfs_volume && options.respond_to?(:delete)
      options = options.dup
      options.delete('backup')
    end
    disk[:options] = options
  else
    add_disk_options(disk, args)
  end
  disk.key?(:storage) ? disk : {}
end

#parse_typed_volume(args, type) ⇒ Object



95
96
97
98
99
100
101
102
103
104
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 95

def parse_typed_volume(args, type)
  return if Foreman::Cast.to_bool(args['_delete'])
  logger.debug("parse_typed_volume(#{type}): args=#{args}")
  disk = parse_hard_disk_volume(args) if volume_type?(args,
    'hard_disk') || volume_type?(args, 'mp') || volume_type?(args, 'rootfs')
  disk = parse_server_cloudinit(args) if volume_type?(args, 'cloud_init')
  disk = parse_server_cdrom(args) if volume_type?(args, 'cdrom')
  logger.debug("parse_typed_volume(#{type}): disk=#{disk}")
  Fog::Proxmox::DiskHelper.flatten(disk) unless disk.empty?
end

#parse_typed_volumes(args, type) ⇒ Object



111
112
113
114
115
116
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 111

def parse_typed_volumes(args, type)
  logger.debug("parse_typed_volumes(#{type}): args=#{args}")
  volumes = []
  args&.each_value { |value| add_typed_volume(volumes, value, type) }
  volumes
end

#parsed_typed_volumes(args, type, parsed_vm) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 37

def parsed_typed_volumes(args, type, parsed_vm)
  logger.debug("parsed_typed_volumes(#{type}): args=#{args}")
  volumes_attributes = args['volumes_attributes']
  unless ForemanFogProxmox::Value.empty?(args['config_attributes'])
    volumes_attributes ||= args['config_attributes']['volumes_attributes']
  end
  unless ForemanFogProxmox::Value.empty?(args['vm_attrs'])
    volumes_attributes ||= args['vm_attrs']['volumes_attributes']
  end
  volumes = parse_typed_volumes(volumes_attributes, type)
  volumes.each { |volume| parsed_vm = parsed_vm.merge(volume) }
  parsed_vm
end

#remove_volume_keys(args) ⇒ Object



118
119
120
121
122
123
124
125
126
127
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 118

def remove_volume_keys(args)
  if args.key?('volumes_attributes')
    args['volumes_attributes'].delete_if do |_index, volume_attributes|
      Foreman::Cast.to_bool(volume_attributes['_delete'])
    end
    args['volumes_attributes'].each_value do |volume_attributes|
      ForemanFogProxmox::HashCollection.remove_keys(volume_attributes, ['_delete'])
    end
  end
end

#rootfs_volume?(args) ⇒ Boolean

Returns:

  • (Boolean)


74
75
76
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 74

def rootfs_volume?(args)
  args['storage_type'] == 'rootfs' || args['id'] == 'rootfs'
end

#set_disk_attributes(disk, args) ⇒ Object



78
79
80
81
82
83
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 78

def set_disk_attributes(disk, args)
  disk[:id] = args['id'] if args.key?('id')
  disk[:volid] = args['volid'] if args.key?('volid') && !args['volid'].empty?
  disk[:storage] = args['storage'].to_s if args.key?('storage') && !args['storage'].empty?
  disk[:size] = args['size'].to_i if args.key?('size') && !args['size'].empty?
end

#volume_type?(args, type) ⇒ Boolean

Returns:

  • (Boolean)


85
86
87
88
89
90
91
92
93
# File 'app/helpers/proxmox_vm_volumes_helper.rb', line 85

def volume_type?(args, type)
  if args.key?('storage_type')
    args['storage_type'] == type
  else
    Fog::Proxmox::DiskHelper.cloud_init?(args['volid']) if type == 'cloud_init'
    Fog::Proxmox::DiskHelper.cdrom?(args['volid']) if type == 'cdrom'
    Fog::Proxmox::DiskHelper.disk?(args['id']) if ['hard_disk', 'rootfs', 'mp'].include?(type)
  end
end