Module: ForemanFogProxmox::ProxmoxVmNew
Constant Summary
ProxmoxVmHelper::GIGA, ProxmoxVmHelper::KILO, ProxmoxVmHelper::MEGA
Instance Method Summary
collapse
#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_node ⇒ Object
95
96
97
|
# File 'app/models/foreman_fog_proxmox/proxmox_vm_new.rb', line 95
def default_node
nodes.first
end
|
#default_node_id ⇒ Object
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_vmid ⇒ Object
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_defaults ⇒ Object
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_defaults ⇒ Object
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_defaults ⇒ Object
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
|