diff --git a/lib/facter/libvirt_uuid.rb b/lib/facter/libvirt_uuid.rb new file mode 100644 index 000000000..afc90a68b --- /dev/null +++ b/lib/facter/libvirt_uuid.rb @@ -0,0 +1,11 @@ +require 'facter' +Facter.add(:libvirt_uuid) do + setcode do + uuid_file_path = '/etc/libvirt/libvirt_uuid' + if File.file? uuid_file_path + File.read uuid_file_path + else + nil + end + end +end diff --git a/manifests/migration/libvirt.pp b/manifests/migration/libvirt.pp index e47c8c04b..a85e8e60d 100644 --- a/manifests/migration/libvirt.pp +++ b/manifests/migration/libvirt.pp @@ -21,11 +21,16 @@ # (optional) Migration flags to be set for block migration (string value) # Defaults to undef # +# [*override_uuid*] +# (optional) Set uuid not equal to output from dmidecode (boolean) +# Defaults to false +# class nova::migration::libvirt( $use_tls = false, $auth = 'none', $live_migration_flag = undef, $block_migration_flag = undef, + $override_uuid = false, ){ include ::nova::deps @@ -62,6 +67,26 @@ class nova::migration::libvirt( File_line<| tag == 'libvirt-file_line' |> ~> Service['libvirt'] + if $override_uuid { + if ! $::libvirt_uuid { + $host_uuid = generate('/bin/cat', '/proc/sys/kernel/random/uuid') + file { '/etc/libvirt/libvirt_uuid': + content => $host_uuid + } + } else { + $host_uuid = $::libvirt_uuid + } + + augeas { 'libvirt-conf-uuid': + context => '/files/etc/libvirt/libvirtd.conf', + changes => [ + "set host_uuid ${host_uuid}", + ], + notify => Service['libvirt'], + require => Package['libvirt'], + } + } + case $::osfamily { 'RedHat': { file_line { '/etc/libvirt/libvirtd.conf listen_tls': diff --git a/spec/classes/nova_migration_libvirt_spec.rb b/spec/classes/nova_migration_libvirt_spec.rb index 5db587fa8..f1db09526 100644 --- a/spec/classes/nova_migration_libvirt_spec.rb +++ b/spec/classes/nova_migration_libvirt_spec.rb @@ -22,6 +22,14 @@ require 'spec_helper' describe 'nova::migration::libvirt' do + generate = {} + + before(:each) { + Puppet::Parser::Functions.newfunction(:generate, :type => :rvalue) { + |args| generate.call() + } + generate.stubs(:call).returns('0000-111-111') + } let :pre_condition do 'include nova @@ -38,6 +46,19 @@ describe 'nova::migration::libvirt' do it { is_expected.to contain_file_line('/etc/libvirt/libvirtd.conf auth_tcp').with(:line => "auth_tcp = \"none\"") } end + context 'with override_uuid enabled' do + let :params do + { + :override_uuid => true, + } + end + + it { is_expected.to contain_augeas('libvirt-conf-uuid').with({ + :context => '/files/etc/libvirt/libvirtd.conf', + :changes => [ "set host_uuid 0000-111-111" ], + }).that_requires('Package[libvirt]').that_notifies('Service[libvirt]') } + end + context 'with tls enabled' do let :params do {