From 88a7bc8b20e0def798db974fc84a483ed4178b85 Mon Sep 17 00:00:00 2001 From: Giulio Fidente Date: Fri, 16 Dec 2016 21:36:36 +0100 Subject: [PATCH] Add nova::compute::libvirt::qemu class to configure limits This change adds a class meant to configure the max_files and max_processes limits in libvirt/qemu.conf, it uses augeas and supports config cleanup. Change-Id: I5fa423a4b212d14f6e9ff6a270931b569558b54e --- manifests/compute/libvirt/qemu.pp | 55 ++++++++++++++++ .../libvirt-qemu-limits-efb8668de1de48e8.yaml | 5 ++ .../classes/nova_compute_libvirt_qemu_spec.rb | 66 +++++++++++++++++++ 3 files changed, 126 insertions(+) create mode 100644 manifests/compute/libvirt/qemu.pp create mode 100644 releasenotes/notes/libvirt-qemu-limits-efb8668de1de48e8.yaml create mode 100644 spec/classes/nova_compute_libvirt_qemu_spec.rb diff --git a/manifests/compute/libvirt/qemu.pp b/manifests/compute/libvirt/qemu.pp new file mode 100644 index 000000000..cb73eeb2e --- /dev/null +++ b/manifests/compute/libvirt/qemu.pp @@ -0,0 +1,55 @@ +# == Class: nova::compute::libvirt::qemu +# +# Configures qemu limits for use by libvirt +# +# === Parameters: +# +# [*configure_qemu*] +# (optional) Whether or not configure qemu bits. +# Defaults to false. +# +# [*max_files*] +# (optional) Maximum number of opened files, per process. +# Defaults to 1024. +# +# [*max_processes*] +# (optional) Maximum number of processes that can be run by qemu user. +# Defaults to 4096. +# +class nova::compute::libvirt::qemu( + $configure_qemu = false, + $max_files = 1024, + $max_processes = 4096, +){ + + include ::nova::deps + require ::nova::compute::libvirt + + Anchor['nova::config::begin'] + -> Augeas<| tag == 'qemu-conf-augeas'|> + -> Anchor['nova::config::end'] + + Augeas<| tag == 'qemu-conf-augeas'|> + ~> Service['libvirt'] + + if $configure_qemu { + + augeas { 'qemu-conf-limits': + context => '/files/etc/libvirt/qemu.conf', + changes => [ + "set max_files ${max_files}", + "set max_processes ${max_processes}", + ], + tag => 'qemu-conf-augeas', + } + } else { + augeas { 'qemu-conf-limits': + context => '/files/etc/libvirt/qemu.conf', + changes => [ + 'rm max_files', + 'rm max_processes', + ], + tag => 'qemu-conf-augeas', + } + } +} diff --git a/releasenotes/notes/libvirt-qemu-limits-efb8668de1de48e8.yaml b/releasenotes/notes/libvirt-qemu-limits-efb8668de1de48e8.yaml new file mode 100644 index 000000000..73e363e1b --- /dev/null +++ b/releasenotes/notes/libvirt-qemu-limits-efb8668de1de48e8.yaml @@ -0,0 +1,5 @@ +--- +features: + - A new nova::compute::libvirt::qemu class has been added + with the initial purpose of configuring the max_files + and max_processes limits in qemu.conf \ No newline at end of file diff --git a/spec/classes/nova_compute_libvirt_qemu_spec.rb b/spec/classes/nova_compute_libvirt_qemu_spec.rb new file mode 100644 index 000000000..f48ee03da --- /dev/null +++ b/spec/classes/nova_compute_libvirt_qemu_spec.rb @@ -0,0 +1,66 @@ +require 'spec_helper' + +describe 'nova::compute::libvirt::qemu' do + + let :pre_condition do + 'include nova + include nova::compute + include nova::compute::libvirt' + end + + shared_examples_for 'nova compute libvirt with qemu' do + + context 'when not configuring qemu' do + let :params do + { + :configure_qemu => false + } + end + it { is_expected.to contain_augeas('qemu-conf-limits').with({ + :context => '/files/etc/libvirt/qemu.conf', + :changes => [ "rm max_files", "rm max_processes" ], + }).that_notifies('Service[libvirt]') } + end + + context 'when configuring qemu by default' do + let :params do + { + :configure_qemu => true + } + end + it { is_expected.to contain_augeas('qemu-conf-limits').with({ + :context => '/files/etc/libvirt/qemu.conf', + :changes => [ "set max_files 1024", "set max_processes 4096" ], + :tag => 'qemu-conf-augeas', + }).that_notifies('Service[libvirt]') } + end + + context 'when configuring qemu with overriden parameters' do + let :params do + { + :configure_qemu => true, + :max_files => 32768, + :max_processes => 131072, + } + end + it { is_expected.to contain_augeas('qemu-conf-limits').with({ + :context => '/files/etc/libvirt/qemu.conf', + :changes => [ "set max_files 32768", "set max_processes 131072" ], + :tag => 'qemu-conf-augeas', + }).that_notifies('Service[libvirt]') } + end + end + + on_supported_os({ + :supported_os => OSDefaults.get_supported_os + }).each do |os,facts| + context "on #{os}" do + let (:facts) do + facts.merge!(OSDefaults.get_facts()) + end + + it_configures 'nova compute libvirt with qemu' + end + end + +end