From 630ebbc87472d0240f28b628d77bbcb96711449c Mon Sep 17 00:00:00 2001 From: Christopher Brown Date: Thu, 9 Mar 2017 17:40:44 +0000 Subject: [PATCH] Adds snapshot_image_format configuration Some filesystems deal better with snapshots in a particular format to handle deduplication and cloning. This adds support for configuring this. Change-Id: Ic3027ac4bb89e8d596a92ba0d517f80a69c65214 Implements: add_snapshot_image_format Closes-Bug: #1671575 --- manifests/compute/libvirt.pp | 29 ++++++++++++++--------- spec/classes/nova_compute_libvirt_spec.rb | 11 +++++++++ 2 files changed, 29 insertions(+), 11 deletions(-) diff --git a/manifests/compute/libvirt.pp b/manifests/compute/libvirt.pp index c5965e9eb..774f22fd8 100644 --- a/manifests/compute/libvirt.pp +++ b/manifests/compute/libvirt.pp @@ -33,6 +33,11 @@ # cpu_mode="custom" and virt_type="kvm|qemu". # Defaults to undef # +# [*libvirt_snapshot_image_format*] +# (optional) Format to save snapshots to. Some filesystems +# have a preference and only operate on raw or qcow2 +# Defaults to $::os_service_default +# # [*libvirt_disk_cachemodes*] # (optional) A list of cachemodes for different disk types, e.g. # ["file=directsync", "block=none"] @@ -128,6 +133,7 @@ class nova::compute::libvirt ( $migration_support = false, $libvirt_cpu_mode = false, $libvirt_cpu_model = undef, + $libvirt_snapshot_image_format = $::os_service_default, $libvirt_disk_cachemodes = [], $libvirt_hw_disk_discard = $::os_service_default, $libvirt_hw_machine_type = $::os_service_default, @@ -197,17 +203,18 @@ class nova::compute::libvirt ( } nova_config { - 'DEFAULT/compute_driver': value => $compute_driver; - 'DEFAULT/preallocate_images': value => $preallocate_images; - 'vnc/vncserver_listen': value => $vncserver_listen; - 'libvirt/virt_type': value => $libvirt_virt_type; - 'libvirt/cpu_mode': value => $libvirt_cpu_mode_real; - 'libvirt/inject_password': value => $libvirt_inject_password; - 'libvirt/inject_key': value => $libvirt_inject_key; - 'libvirt/inject_partition': value => $libvirt_inject_partition; - 'libvirt/hw_disk_discard': value => $libvirt_hw_disk_discard; - 'libvirt/hw_machine_type': value => $libvirt_hw_machine_type; - 'libvirt/enabled_perf_events': value => $libvirt_enabled_perf_events; + 'DEFAULT/compute_driver': value => $compute_driver; + 'DEFAULT/preallocate_images': value => $preallocate_images; + 'vnc/vncserver_listen': value => $vncserver_listen; + 'libvirt/virt_type': value => $libvirt_virt_type; + 'libvirt/cpu_mode': value => $libvirt_cpu_mode_real; + 'libvirt/snapshot_image_format': value => $libvirt_snapshot_image_format; + 'libvirt/inject_password': value => $libvirt_inject_password; + 'libvirt/inject_key': value => $libvirt_inject_key; + 'libvirt/inject_partition': value => $libvirt_inject_partition; + 'libvirt/hw_disk_discard': value => $libvirt_hw_disk_discard; + 'libvirt/hw_machine_type': value => $libvirt_hw_machine_type; + 'libvirt/enabled_perf_events': value => $libvirt_enabled_perf_events; } # cpu_model param is only valid if cpu_mode=custom diff --git a/spec/classes/nova_compute_libvirt_spec.rb b/spec/classes/nova_compute_libvirt_spec.rb index d501291ae..4066043d7 100644 --- a/spec/classes/nova_compute_libvirt_spec.rb +++ b/spec/classes/nova_compute_libvirt_spec.rb @@ -50,6 +50,7 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('kvm')} it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-model')} it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')} + it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')} it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_ensure('absent')} it { is_expected.to contain_nova_config('libvirt/inject_password').with_value(false)} it { is_expected.to contain_nova_config('libvirt/inject_key').with_value(false)} @@ -67,6 +68,7 @@ describe 'nova::compute::libvirt' do :vncserver_listen => '0.0.0.0', :libvirt_cpu_mode => 'host-passthrough', :libvirt_cpu_model => 'kvm64', + :libvirt_snapshot_image_format => 'raw', :libvirt_disk_cachemodes => ['file=directsync','block=none'], :libvirt_hw_disk_discard => 'unmap', :libvirt_hw_machine_type => 'x86_64=machinetype1,armv7l=machinetype2', @@ -91,6 +93,7 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/virt_type').with_value('qemu')} it { is_expected.to contain_nova_config('libvirt/cpu_mode').with_value('host-passthrough')} it { is_expected.to contain_nova_config('libvirt/cpu_model').with_ensure('absent')} + it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_ensure('absent')} it { is_expected.to contain_nova_config('libvirt/disk_cachemodes').with_value('file=directsync,block=none')} it { is_expected.to contain_nova_config('libvirt/hw_disk_discard').with_value('unmap')} it { is_expected.to contain_nova_config('libvirt/hw_machine_type').with_value('x86_64=machinetype1,armv7l=machinetype2')} @@ -130,6 +133,14 @@ describe 'nova::compute::libvirt' do it { is_expected.to contain_nova_config('libvirt/cpu_model').with_value('kvm64')} end + describe 'with qcow2 as snapshot_image_format' do + let :params do + { :libvirt_snapshot_image_format => 'qcow2' } + end + + it { is_expected.to contain_nova_config('libvirt/snapshot_image_format').with_value('qcow2')} + end + describe 'with qemu as virt_type' do let :params do { :libvirt_virt_type => 'qemu' }