Module: ProxmoxServerHelper

Included in:
ForemanFogProxmox::Proxmox
Defined in:
app/helpers/proxmox_server_helper.rb

Constant Summary collapse

KILO =
1024
MEGA =
KILO * KILO
GIGA =
KILO * MEGA

Instance Method Summary collapse

Instance Method Details

#parse_server_cdrom(args) ⇒ Object



94
95
96
97
98
99
100
101
# File 'app/helpers/proxmox_server_helper.rb', line 94

def parse_server_cdrom(args)
  cdrom = args['cdrom']
  cdrom_image = args['cdrom_iso']
  volid = cdrom_image.empty? ? cdrom : cdrom_image
  return {} unless volid
  cdrom = "#{volid},media=cdrom"
  {ide2: cdrom}
end

#parse_server_cpu(args) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'app/helpers/proxmox_server_helper.rb', line 78

def parse_server_cpu(args)
  return {} unless args['cpu_type']
  cpu = "cputype=#{args['cpu_type']}"
  spectre = args['spectre'].to_i == 1
  pcid = args['pcid'].to_i == 1
  cpu += ",flags=" if spectre || pcid
  cpu += "+spec-ctrl" if spectre
  cpu += ";" if spectre && pcid
  cpu += "+pcid" if pcid      
  args.delete_if { |key,value| %w[cpu_type spectre pcid].include?(key) || ForemanFogProxmox::Value.empty?(value) }
  args.each_value { |value| value.to_i }
  parsed_cpu = { cpu: cpu }.merge(args)
  logger.debug("parse_server_cpu(): #{parsed_cpu}")
  parsed_cpu
end

#parse_server_interface(args) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'app/helpers/proxmox_server_helper.rb', line 140

def parse_server_interface(args)
  args.delete_if { |_key,value| ForemanFogProxmox::Value.empty?(value) }
  nic = {}
  id = args['id']
  logger.debug("parse_server_interface(): id=#{id}")
  delete = args['_delete'].to_i == 1
  if delete
    logger.debug("parse_server_interface(): delete id=#{id}")
    nic.store(:delete, id)
    nic
  else
    nic.store(:id, id)
    nic.store(:tag, args['tag'].to_i) if args['tag']
    nic.store(:model, args['model'].to_s)
    nic.store(:bridge, args['bridge'].to_s) if args['bridge']
    nic.store(:firewall, args['firewall'].to_i) if args['firewall']
    nic.store(:rate, args['rate'].to_i) if args['rate']
    nic.store(:link_down, args['link_down'].to_i) if args['link_down']
    nic.store(:queues, args['queues'].to_i) if args['queues']
    logger.debug("parse_server_interface(): add nic=#{nic}")
    Fog::Proxmox::NicHelper.flatten(nic)
  end 
end

#parse_server_interfaces(args) ⇒ Object



133
134
135
136
137
138
# File 'app/helpers/proxmox_server_helper.rb', line 133

def parse_server_interfaces(args)
  nics = []
  args.each_value { |value| nics.push(parse_server_interface(value))} if args
  logger.debug("parse_server_interfaces(): nics=#{nics}")
  nics
end

#parse_server_memory(args) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
# File 'app/helpers/proxmox_server_helper.rb', line 65

def parse_server_memory(args)
  memory = { }
  memory.store(:memory,args['memory'].to_i) if args['memory']
  ballooned = args['balloon'].to_i == 1
  if ballooned
    memory.store(:shares,args['shares'].to_i) if args['shares']
    memory.store(:min_memory,args['min_memory'].to_i) if args['min_memory']
  end
  memory.store(:balloon,args['balloon'].to_i) if args['balloon']
  logger.debug("parse_server_memory(): #{memory}")
  memory
end

#parse_server_vm(args) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'app/helpers/proxmox_server_helper.rb', line 30

def parse_server_vm(args)
  args = ActiveSupport::HashWithIndifferentAccess.new(args)
  return {} unless args
  return {} if args.empty?
  return {} unless args['type'] == 'qemu'
  config = args['config_attributes']
  main_a = %w[name type node vmid]
  config = args.reject { |key,_value| main_a.include? key } unless config
  cdrom_a = %w[cdrom cdrom_storage cdrom_iso]
  cdrom = parse_server_cdrom(config.select { |key,_value| cdrom_a.include? key })
  vols = args['volumes_attributes']
  volumes = parse_server_volumes(vols)
  cpu_a = %w[cpu_type spectre pcid]
  cpu = parse_server_cpu(config.select { |key,_value| cpu_a.include? key })
  memory_a = %w[memory min_memory balloon shares]
  memory = parse_server_memory(config.select { |key,_value| memory_a.include? key })
  interfaces_attributes = args['interfaces_attributes']
  networks = parse_server_interfaces(interfaces_attributes)
  general_a = %w[node type config_attributes volumes_attributes interfaces_attributes firmware_type provision_method container_volumes server_volumes]
  logger.debug("general_a: #{general_a}")
  parsed_vm = args.reject { |key,value| general_a.include?(key) || ForemanFogProxmox::Value.empty?(value) }
  config_a = []
  config_a += cpu_a
  config_a += cdrom_a
  config_a += memory_a
  config_a += general_a
  parsed_config = config.reject { |key,value| config_a.include?(key) || ForemanFogProxmox::Value.empty?(value) }
  logger.debug("parse_server_config(): #{parsed_config}")
  parsed_vm = parsed_vm.merge(parsed_config).merge(cpu).merge(memory).merge(cdrom)
  networks.each { |network| parsed_vm = parsed_vm.merge(network) }
  volumes.each { |volume| parsed_vm = parsed_vm.merge(volume) }
  logger.debug("parse_server_vm(): #{parsed_vm}")
  parsed_vm
end

#parse_server_volume(args) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
# File 'app/helpers/proxmox_server_helper.rb', line 103

def parse_server_volume(args)
  disk = {}
  id = args['id']
  id = "#{args['controller']}#{args['device']}" if args.has_key?('controller') && args.has_key?('device') && !id
  return args if ForemanFogProxmox::Value.empty?(id) || id == 'rootfs'
  delete = args['_delete'].to_i == 1
  args.delete_if { |_key,value| ForemanFogProxmox::Value.empty?(value) }
  if delete
    logger.debug("parse_server_volume(): delete id=#{id}")
    disk.store(:delete, id)
    disk
  else
    disk.store(:id, id)
    disk.store(:volid, args['volid']) if args.has_key?('volid')
    disk.store(:storage, args['storage'].to_s) if args.has_key?('storage')
    disk.store(:size, args['size'].to_i) if args.has_key?('size')
    options = args.reject { |key,_value| %w[id volid controller device storage size _delete].include? key}
    disk.store(:options, options)
    logger.debug("parse_server_volume(): add disk=#{disk}")
    Fog::Proxmox::DiskHelper.flatten(disk)
  end 
end

#parse_server_volumes(args) ⇒ Object



126
127
128
129
130
131
# File 'app/helpers/proxmox_server_helper.rb', line 126

def parse_server_volumes(args)
  volumes = []
  args.each_value { |value| volumes.push(parse_server_volume(value))} if args
  logger.debug("parse_server_volumes(): volumes=#{volumes}")
  volumes
end