Guest Environments Bundles and Bodies

Table of Contents

See the guest_environments promises documentation for a comprehensive reference on the body types and attributes used here.

To use these bodies, add the following to your policy:

body file control
{
    inputs => { "guest_environments.cf" }
}

environment_resources bodies

kvm

Prototype: kvm(name, arch, cpu_count, mem_kb, disk_file)

Description: An environment_resources body for a KVM virtual machine.

The env_spec attribute is set to a KVM XML specification.

Arguments:

  • name: The name of the virtual machine
  • arch: The architecture
  • cpu_count: The number of CPUs the virtual machine should have
  • mem_kb: The amount of RAM in kilobyte
  • disk_file: The file on the host system for the virtual machine's harddrive

Example:

bundle agent manage_vm
{
guest_environments:
  am_vm_host::
    "db_server"
      environment_host      => atlas,
      environment_type      => "kvm",
      environment_state     => "create",
      environment_resources => kvm("PSQL1, "x86_64", "4", "4096", "/var/lib/libvirt/images/psql1.iso")
}

Implementation:

body environment_resources kvm(name, arch, cpu_count, mem_kb, disk_file)
{
      env_spec =>
      "<domain type='kvm'>
  <name>$(name)</name>
  <memory>$(mem_kb)</memory>
  <currentMemory>$(mem_kb)</currentMemory>
  <vcpu>$(cpu_count)</vcpu>
  <os>
    <type arch='$(arch)'>hvm</type>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <source file='$(disk_file)'/>
      <target dev='vda' bus='virtio'/>
    </disk>
    <interface type='network'>
      <source network='default'/>
    </interface>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
  </devices>
</domain>";
}