Module: ForemanFogProxmox::ProxmoxVmNew

Includes:
ProxmoxVmHelper
Included in:
Proxmox
Defined in:
app/models/foreman_fog_proxmox/proxmox_vm_new.rb

Constant Summary

Constants included from ProxmoxVmHelper

ProxmoxVmHelper::GIGA, ProxmoxVmHelper::KILO, ProxmoxVmHelper::MEGA

Instance Method Summary collapse

Methods included from ProxmoxVmHelper

#add_cdrom_to_config_server, #convert_memory_size, #convert_memory_sizes, #convert_sizes, #convert_volumes_size, #disk_to_cdrom, #object_to_config_hash, #remove_deletes

Instance Method Details

#default_nodeObject



95
96
97
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 95

def default_node
  nodes.first
end

#default_node_idObject



99
100
101
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 99

def default_node_id
  default_node.node
end

#interface_container_defaults(id = 'net0') ⇒ Object



68
69
70
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 68

def interface_container_defaults(id = 'net0')
  { id: id, name: 'eth0', bridge: bridges.first.identity.to_s, dhcpv4: 1, dhcpv6: 1 }
end

#interface_defaults(id = 'net0') ⇒ Object



60
61
62
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 60

def interface_defaults(id = 'net0')
  { id: id, model: 'virtio', name: 'eth0', bridge: bridges.first.identity.to_s }
end

#interface_server_defaults(id = 'net0') ⇒ Object



64
65
66
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 64

def interface_server_defaults(id = 'net0')
  { id: id, model: 'virtio', bridge: bridges.first.identity.to_s }
end

#new_container_interface(attr = {}) ⇒ Object



89
90
91
92
93
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 89

def new_container_interface(attr = {})
  logger.debug('new_container_interface')
  opts = interface_container_defaults.merge(attr.to_h).deep_symbolize_keys
  Fog::Proxmox::Compute::Interface.new(opts)
end

#new_container_vm(new_attr = {}) ⇒ Object



156
157
158
159
160
161
162
163
164
165
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 156

def new_container_vm(new_attr = {})
  options = new_attr
  node_id = new_attr['node_id']
  node = node_id ? client.nodes.get(node_id) : default_node
  options = options.merge(type: 'lxc').merge(vmid: next_vmid)
  options = vm_container_instance_defaults.merge(options) if new_attr.empty?
  vm = node.containers.new(parse_container_vm(options).deep_symbolize_keys)
  logger.debug(format(_('new_container_vm() vm.config=%<config>s'), config: vm.config.inspect))
  vm
end

#new_interface(attr = {}) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 72

def new_interface(attr = {})
  type = attr['type']
  type ||= 'qemu'
  case type
  when 'lxc'
    new_container_interface(attr)
  when 'qemu'
    new_server_interface(attr)
  end
end

#new_server_interface(attr = {}) ⇒ Object



83
84
85
86
87
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 83

def new_server_interface(attr = {})
  logger.debug('new_server_interface')
  opts = interface_server_defaults.merge(attr.to_h).deep_symbolize_keys
  Fog::Proxmox::Compute::Interface.new(opts)
end

#new_server_vm(new_attr = {}) ⇒ Object



167
168
169
170
171
172
173
174
175
176
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 167

def new_server_vm(new_attr = {})
  options = new_attr
  node_id = new_attr['node_id']
  node = node_id ? client.nodes.get(node_id) : default_node
  options = options.merge(type: 'qemu').merge(vmid: next_vmid)
  options = vm_server_instance_defaults.merge(options) if new_attr.empty?
  vm = node.servers.new(parse_server_vm(options).deep_symbolize_keys)
  logger.debug(format(_('new_server_vm() vm.config=%<config>s'), config: vm.config.inspect))
  vm
end

#new_vm(new_attr = {}) ⇒ Object



142
143
144
145
146
147
148
149
150
151
152
153
154
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 142

def new_vm(new_attr = {})
  new_attr = ActiveSupport::HashWithIndifferentAccess.new(new_attr)
  type = new_attr['type']
  type ||= 'qemu'
  case type
  when 'lxc'
    vm = new_container_vm(new_attr)
  when 'qemu'
    vm = new_server_vm(new_attr)
  end
  logger.debug(format(_('new_vm() vm.config=%<config>s'), config: vm.config.inspect))
  vm
end

#new_volume(attr = {}) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 37

def new_volume(attr = {})
  type = attr['type']
  type ||= 'qemu'
  case type
  when 'lxc'
    new_volume_server(attr)
  when 'qemu'
    new_volume_container(attr)
  end
end

#new_volume_container(attr = {}) ⇒ Object



54
55
56
57
58
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 54

def new_volume_container(attr = {})
  opts = volume_container_defaults.merge(attr.to_h).deep_symbolize_keys
  opts[:size] = opts[:size].to_s
  Fog::Proxmox::Compute::Disk.new(opts)
end

#new_volume_server(attr = {}) ⇒ Object



48
49
50
51
52
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 48

def new_volume_server(attr = {})
  opts = volume_server_defaults.merge(attr.to_h).deep_symbolize_keys
  opts[:size] = opts[:size].to_s
  Fog::Proxmox::Compute::Disk.new(opts)
end

#next_vmidObject



103
104
105
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 103

def next_vmid
  default_node.servers.next_id
end

#vm_container_instance_defaultsObject



127
128
129
130
131
132
133
134
135
136
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 127

def vm_container_instance_defaults
  ActiveSupport::HashWithIndifferentAccess.new(
    name: "foreman_#{Time.now.to_i}",
    vmid: next_vmid,
    type: 'lxc',
    node_id: default_node_id,
    memory: 512 * MEGA,
    templated: 0
  ).merge(Fog::Proxmox::DiskHelper.flatten(volume_container_defaults)).merge(Fog::Proxmox::DiskHelper.flatten(volume_server_defaults)).merge(Fog::Proxmox::NicHelper.flatten(interface_defaults))
end

#vm_instance_defaultsObject



138
139
140
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 138

def vm_instance_defaults
  super.merge(vmid: next_vmid, node_id: default_node_id)
end

#vm_server_instance_defaultsObject



107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 107

def vm_server_instance_defaults
  ActiveSupport::HashWithIndifferentAccess.new(
    name: "foreman_#{Time.now.to_i}",
    vmid: next_vmid,
    type: 'qemu',
    node_id: default_node_id,
    cores: 1,
    sockets: 1,
    kvm: 1,
    vga: 'std',
    memory: 512 * MEGA,
    ostype: 'l26',
    keyboard: 'en-us',
    cpu: 'kvm64',
    scsihw: 'virtio-scsi-pci',
    ide2: 'none,media=cdrom',
    templated: 0
  ).merge(Fog::Proxmox::DiskHelper.flatten(volume_server_defaults)).merge(Fog::Proxmox::DiskHelper.flatten(volume_container_defaults)).merge(Fog::Proxmox::NicHelper.flatten(interface_defaults))
end

#volume_container_defaults(id = 'rootfs') ⇒ Object



33
34
35
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 33

def volume_container_defaults(id = 'rootfs')
  { id: id, storage: storages.first.identity.to_s, size: (8 * GIGA), options: {} }
end

#volume_server_defaults(controller = 'scsi', device = 0) ⇒ Object



28
29
30
31
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 28

def volume_server_defaults(controller = 'scsi', device = 0)
  id = "#{controller}#{device}"
  { id: id, storage: storages.first.identity.to_s, size: (8 * GIGA), options: { cache: 'none' } }
end