]> git.donarmstrong.com Git - dsa-puppet.git/blobdiff - 3rdparty/modules/nova/manifests/compute.pp
try again, with puppetforge modules, correctly included now
[dsa-puppet.git] / 3rdparty / modules / nova / manifests / compute.pp
diff --git a/3rdparty/modules/nova/manifests/compute.pp b/3rdparty/modules/nova/manifests/compute.pp
new file mode 100644 (file)
index 0000000..4afe43e
--- /dev/null
@@ -0,0 +1,222 @@
+# == Class: nova::compute
+#
+# Installs the nova-compute service
+#
+# === Parameters:
+#
+# [*enabled*]
+#   (optional) Whether to enable the nova-compute service
+#   Defaults to false
+#
+# [*manage_service*]
+#   (optional) Whether to start/stop the service
+#   Defaults to true
+#
+# [*ensure_package*]
+#   (optional) The state for the nova-compute package
+#   Defaults to 'present'
+#
+# [*vnc_enabled*]
+#   (optional) Whether to use a VNC proxy
+#   Defaults to true
+#
+# [*vncserver_proxyclient_address*]
+#   (optional) The IP address of the server running the VNC proxy client
+#   Defaults to '127.0.0.1'
+#
+# [*vncproxy_host*]
+#   (optional) The host of the VNC proxy server
+#   Defaults to false
+#
+# [*vncproxy_protocol*]
+#   (optional) The protocol to communicate with the VNC proxy server
+#   Defaults to 'http'
+#
+# [*vncproxy_port*]
+#   (optional) The port to communicate with the VNC proxy server
+#   Defaults to '6080'
+#
+# [*vncproxy_path*]
+#   (optional) The path at the end of the uri for communication with the VNC proxy server
+#   Defaults to '/vnc_auto.html'
+#
+# [*vnc_keymap*]
+#   (optional) The keymap to use with VNC (ls -alh /usr/share/qemu/keymaps to list available keymaps)
+#   Defaults to 'en-us'
+#
+# [*force_config_drive*]
+#   (optional) Whether to force the config drive to be attached to all VMs
+#   Defaults to false
+#
+# [*virtio_nic*]
+#   (optional) Whether to use virtio for the nic driver of VMs
+#   Defaults to false
+#
+# [*neutron_enabled*]
+#   (optional) Whether to use Neutron for networking of VMs
+#   Defaults to true
+#
+# [*network_device_mtu*]
+#   (optional) The MTU size for the interfaces managed by nova
+#   Defaults to undef
+#
+# [*instance_usage_audit*]
+#   (optional) Generate periodic compute.instance.exists notifications.
+#   Defaults to false
+#
+# [*instance_usage_audit_period*]
+#   (optional) Time period to generate instance usages for.
+#   Time period must be hour, day, month or year
+#   Defaults to 'month'
+#
+#  [*force_raw_images*]
+#   (optional) Force backing images to raw format.
+#   Defaults to true
+#
+#  [*reserved_host_memory*]
+#   Reserved host memory
+#   The amount of memory in MB reserved for the host.
+#   Defaults to '512'
+#
+#  [*compute_manager*]
+#   Compute manager
+#   The driver that will manage the running instances.
+#   Defaults to nova.compute.manager.ComputeManager
+#
+#  [*pci_passthrough_whitelist*]
+#   (optional) Pci passthrough hash in format of:
+#   Defaults to undef
+#   Example
+#  "[ { 'vendor_id':'1234','product_id':'5678' },
+#     { 'vendor_id':'4321','product_id':'8765','physical_network':'default' } ] "
+#
+#  [*default_availability_zone*]
+#   (optional) Default compute node availability zone.
+#   Defaults to nova
+#
+#  [*default_schedule_zone*]
+#   (optional) Availability zone to use when user doesn't specify one.
+#   Defaults to undef
+#
+#  [*internal_service_availability_zone*]
+#   (optional) The availability zone to show internal services under.
+#   Defaults to internal
+#
+class nova::compute (
+  $enabled                            = false,
+  $manage_service                     = true,
+  $ensure_package                     = 'present',
+  $vnc_enabled                        = true,
+  $vncserver_proxyclient_address      = '127.0.0.1',
+  $vncproxy_host                      = false,
+  $vncproxy_protocol                  = 'http',
+  $vncproxy_port                      = '6080',
+  $vncproxy_path                      = '/vnc_auto.html',
+  $vnc_keymap                         = 'en-us',
+  $force_config_drive                 = false,
+  $virtio_nic                         = false,
+  $neutron_enabled                    = true,
+  $network_device_mtu                 = undef,
+  $instance_usage_audit               = false,
+  $instance_usage_audit_period        = 'month',
+  $force_raw_images                   = true,
+  $reserved_host_memory               = '512',
+  $compute_manager                    = 'nova.compute.manager.ComputeManager',
+  $pci_passthrough                    = undef,
+  $default_availability_zone          = 'nova',
+  $default_schedule_zone              = undef,
+  $internal_service_availability_zone = 'internal',
+) {
+
+  include nova::params
+
+  nova_config {
+    'DEFAULT/reserved_host_memory_mb':  value => $reserved_host_memory;
+    'DEFAULT/compute_manager':          value => $compute_manager;
+  }
+
+  if ($vnc_enabled) {
+    include ::nova::vncproxy::common
+  }
+
+  nova_config {
+    'DEFAULT/vnc_enabled':                   value => $vnc_enabled;
+    'DEFAULT/vncserver_proxyclient_address': value => $vncserver_proxyclient_address;
+    'DEFAULT/vnc_keymap':                    value => $vnc_keymap;
+  }
+
+  if $neutron_enabled != true {
+    # Install bridge-utils if we use nova-network
+    package { 'bridge-utils':
+      ensure => present,
+      before => Nova::Generic_service['compute'],
+    }
+  }
+
+  nova::generic_service { 'compute':
+    enabled        => $enabled,
+    manage_service => $manage_service,
+    package_name   => $::nova::params::compute_package_name,
+    service_name   => $::nova::params::compute_service_name,
+    ensure_package => $ensure_package,
+    before         => Exec['networking-refresh']
+  }
+
+  if $force_config_drive {
+    nova_config { 'DEFAULT/force_config_drive': value => true }
+  } else {
+    nova_config { 'DEFAULT/force_config_drive': ensure => absent }
+  }
+
+  if $virtio_nic {
+    # Enable the virtio network card for instances
+    nova_config { 'DEFAULT/libvirt_use_virtio_for_bridges': value => true }
+  }
+
+  if $network_device_mtu {
+    nova_config {
+      'DEFAULT/network_device_mtu':   value => $network_device_mtu;
+    }
+  } else {
+    nova_config {
+      'DEFAULT/network_device_mtu':   ensure => absent;
+    }
+  }
+
+  if $instance_usage_audit and $instance_usage_audit_period in ['hour', 'day', 'month', 'year'] {
+    nova_config {
+      'DEFAULT/instance_usage_audit':        value => $instance_usage_audit;
+      'DEFAULT/instance_usage_audit_period': value => $instance_usage_audit_period;
+    }
+  } else {
+    nova_config {
+      'DEFAULT/instance_usage_audit':        ensure => absent;
+      'DEFAULT/instance_usage_audit_period': ensure => absent;
+    }
+  }
+
+  package { 'pm-utils':
+    ensure => present,
+  }
+
+  nova_config {
+    'DEFAULT/force_raw_images': value => $force_raw_images;
+  }
+
+  if ($pci_passthrough) {
+    nova_config {
+      'DEFAULT/pci_passthrough_whitelist': value => check_array_of_hash($pci_passthrough);
+    }
+  }
+
+  nova_config {
+    'DEFAULT/default_availability_zone':          value => $default_availability_zone;
+    'DEFAULT/internal_service_availability_zone': value => $internal_service_availability_zone;
+  }
+
+  if $default_schedule_zone {
+    nova_config {
+      'DEFAULT/default_schedule_zone': value => $default_schedule_zone;
+    }
+  }
+}