Puppet Class: libvirt::kvm

Inherits:
libvirt
Defined in:
manifests/kvm.pp

Overview

Set up libvirt to use KVM

Parameters:

  • package_list (Any)

    List of packages to be managed for KVM

    • Defaults in module data

  • package_ensure (Any) (defaults to: $::libvirt::package_ensure)
  • manage_sysctl (Any) (defaults to: $::libvirt::manage_sysctl)
  • load_kernel_modules (Any) (defaults to: $::libvirt::load_kernel_modules)

Author:



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'manifests/kvm.pp', line 14

class libvirt::kvm (
  $package_list,
  $package_ensure      = $::libvirt::package_ensure,
  $manage_sysctl       = $::libvirt::manage_sysctl,
  $load_kernel_modules = $::libvirt::load_kernel_modules
) inherits libvirt {

  ensure_packages($package_list, { ensure => $package_ensure } )

  if $load_kernel_modules {
    $_kvm_kmod = $facts['cpuinfo']['processor0']['vendor_id'] ? {
      'AuthenticAMD' => 'kvm_amd',
      'GenuineIntel' => 'kvm_intel',
      default        => fail('libvirt: Unknown CPU vendor_id')
    }

    kmod::load { $_kvm_kmod:
      before => Package[$package_list]
    }
  }

  if $manage_sysctl {
    sysctl {
      default: ensure => 'present';

      # Enable Forwarding
      'net.ipv4.conf.all.forwarding': value => '1';
      'net.ipv4.ip_forward':          value => '1';
    }

    unless $facts['libvirt_br_netfilter_loaded'] {
      if $load_kernel_modules {
        kmod::load { 'br_netfilter': }

        Kmod::Load['br_netfilter'] -> Sysctl['net.bridge.bridge-nf-call-arptables']
        Kmod::Load['br_netfilter'] -> Sysctl['net.bridge.bridge-nf-call-iptables']

        if $facts['ipv6_enabled'] {
          Kmod::Load['br_netfilter'] -> Sysctl['net.bridge.bridge-nf-call-ip6tables']
        }
      }
    }

    sysctl {
      default: ensure => 'present';

      # Bypass the base hosts's IPTables
      'net.bridge.bridge-nf-call-arptables': value => '0';
      'net.bridge.bridge-nf-call-iptables':  value => '0';
    }

    if $facts['ipv6_enabled'] {
      sysctl { 'net.bridge.bridge-nf-call-ip6tables':
        ensure => 'present',
        value  => '0'
      }
    }
    else {
      sysctl { 'net.bridge.bridge-nf-call-ip6tables':
        ensure => 'absent'
      }
    }
  }
}