Class: OsVm::MachineConfig

Inherits:
Object
  • Object
show all
Defined in:
lib/osvm/machine_config.rb

Direct Known Subclasses

NixosMachineConfig, VpsadminosMachineConfig

Defined Under Namespace

Classes: BridgeNetwork, Cpu, Disk, Network, SocketNetwork, UserNetwork

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(cfg) ⇒ MachineConfig

Returns a new instance of MachineConfig.

Parameters:

  • cfg (Hash)


260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
# File 'lib/osvm/machine_config.rb', line 260

def initialize(cfg)
  @spin = cfg.fetch('spin', 'vpsadminos')
  @qemu = cfg.fetch('qemu')
  @boot_mode = cfg.fetch('bootMode', 'direct')
  @boot_order = cfg['bootOrder']
  @extra_qemu_options = cfg.fetch('extraQemuOptions', [])
  @virtiofsd = cfg.fetch('virtiofsd')
  @kernel = cfg['kernel']
  @initrd = cfg['initrd']
  @kernel_params = cfg.fetch('kernelParams', [])
  @toplevel = cfg['toplevel']
  @disks = cfg.fetch('disks', []).map { |disk_cfg| Disk.new(disk_cfg) }
  @memory = cfg.fetch('memory')
  @cpus = cfg.fetch('cpus')
  @cpu = Cpu.new(cfg.fetch('cpu'))
  @shared_filesystems = cfg.fetch('sharedFileSystems', {})
  @networks = cfg.fetch('networks', [{ 'type' => 'user' }]).each_with_index.map do |net_cfg, i|
    Network.from_config(i, net_cfg)
  end
  @tags = cfg.fetch('tags', [])
  @labels = cfg.fetch('labels', {})

  unless %w[direct firmware].include?(@boot_mode)
    raise ArgumentError, "unsupported boot mode #{@boot_mode.inspect}"
  end

  return unless @boot_mode == 'direct'

  %w[kernel initrd toplevel].each do |v|
    next if cfg[v]

    raise ArgumentError, "missing #{v.inspect} for direct boot machine"
  end
end

Instance Attribute Details

#boot_mode'direct', 'firmware' (readonly)

Returns:

  • ('direct', 'firmware')


212
213
214
# File 'lib/osvm/machine_config.rb', line 212

def boot_mode
  @boot_mode
end

#boot_orderString? (readonly)

Returns:

  • (String, nil)


215
216
217
# File 'lib/osvm/machine_config.rb', line 215

def boot_order
  @boot_order
end

#cpuCpu (readonly)

Returns:



245
246
247
# File 'lib/osvm/machine_config.rb', line 245

def cpu
  @cpu
end

#cpusInteger (readonly)

Returns:

  • (Integer)


242
243
244
# File 'lib/osvm/machine_config.rb', line 242

def cpus
  @cpus
end

#disksArray<Disk> (readonly)

Returns:



236
237
238
# File 'lib/osvm/machine_config.rb', line 236

def disks
  @disks
end

#extra_qemu_optionsArray<String> (readonly)

Returns:

  • (Array<String>)


218
219
220
# File 'lib/osvm/machine_config.rb', line 218

def extra_qemu_options
  @extra_qemu_options
end

#initrdString (readonly)

Returns path to initrd.

Returns:

  • (String)

    path to initrd



227
228
229
# File 'lib/osvm/machine_config.rb', line 227

def initrd
  @initrd
end

#kernelString (readonly)

Returns path to kernel bzImage.

Returns:

  • (String)

    path to kernel bzImage



224
225
226
# File 'lib/osvm/machine_config.rb', line 224

def kernel
  @kernel
end

#kernel_paramsArray<String> (readonly)

Returns kernel parameters.

Returns:

  • (Array<String>)

    kernel parameters



230
231
232
# File 'lib/osvm/machine_config.rb', line 230

def kernel_params
  @kernel_params
end

#labelsHash<String, String> (readonly)

Returns:

  • (Hash<String, String>)


257
258
259
# File 'lib/osvm/machine_config.rb', line 257

def labels
  @labels
end

#memoryInteger (readonly)

Returns system memory in MiB.

Returns:

  • (Integer)

    system memory in MiB



239
240
241
# File 'lib/osvm/machine_config.rb', line 239

def memory
  @memory
end

#networksArray<Network> (readonly)

Returns:



251
252
253
# File 'lib/osvm/machine_config.rb', line 251

def networks
  @networks
end

#qemuString (readonly)

Returns path to qemu package.

Returns:

  • (String)

    path to qemu package



209
210
211
# File 'lib/osvm/machine_config.rb', line 209

def qemu
  @qemu
end

#shared_filesystemsHash<String, String> (readonly)

Returns fs name => host directory.

Returns:

  • (Hash<String, String>)

    fs name => host directory



248
249
250
# File 'lib/osvm/machine_config.rb', line 248

def shared_filesystems
  @shared_filesystems
end

#spinString (readonly)

Returns:

  • (String)


206
207
208
# File 'lib/osvm/machine_config.rb', line 206

def spin
  @spin
end

#tagsArray<String> (readonly)

Returns:

  • (Array<String>)


254
255
256
# File 'lib/osvm/machine_config.rb', line 254

def tags
  @tags
end

#toplevelString (readonly)

Returns path to system top level.

Returns:

  • (String)

    path to system top level



233
234
235
# File 'lib/osvm/machine_config.rb', line 233

def toplevel
  @toplevel
end

#virtiofsdString (readonly)

Returns path to virtiofsd package.

Returns:

  • (String)

    path to virtiofsd package



221
222
223
# File 'lib/osvm/machine_config.rb', line 221

def virtiofsd
  @virtiofsd
end

Class Method Details

.from_config(cfg) ⇒ MachineConfig

Build machine config from hash

Parameters:

  • cfg (Hash)

Returns:



192
193
194
195
196
197
198
199
200
201
202
203
# File 'lib/osvm/machine_config.rb', line 192

def self.from_config(cfg)
  spin = cfg.fetch('spin', 'vpsadminos')

  case spin
  when 'vpsadminos'
    VpsadminosMachineConfig.new(cfg)
  when 'nixos'
    NixosMachineConfig.new(cfg)
  else
    raise ArgumentError, "Unknown machine spin #{spin.inspect}"
  end
end

.load_file(path) ⇒ MachineConfig

Load machine config from file

Parameters:

  • path (String)

Returns:



184
185
186
187
# File 'lib/osvm/machine_config.rb', line 184

def self.load_file(path)
  cfg = JSON.parse(File.read(path))
  from_config(cfg)
end