diff --git a/deployment/puppet/openstack_tasks/examples/openstack-network/tasks.yaml b/deployment/puppet/openstack_tasks/examples/openstack-network/tasks.yaml index a303baf65c..11371d79e5 100644 --- a/deployment/puppet/openstack_tasks/examples/openstack-network/tasks.yaml +++ b/deployment/puppet/openstack_tasks/examples/openstack-network/tasks.yaml @@ -142,8 +142,9 @@ $.get('use_ssl'), $.get('region'), $.network_scheme, $.network_metadata, $.neutron_advanced_configuration, $.get('security_groups'), $.network_metadata.nodes.values().where( - $.node_roles.any($.matches('(controller|rabbitmq)'))).network_roles.select( - $.get('mgmt/messaging'))) + $.node_roles.any($.matches('controller|rabbitmq'))).network_roles.select($.get('mgmt/messaging')), + $.get('amqp_hosts')) + refresh_on: [neutron_agent_ovs] parameters: puppet_manifest: /etc/puppet/modules/openstack_tasks/examples/openstack-network/plugins/ml2.pp diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/dhcp.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/dhcp.pp index eb40db3b37..8f6579631f 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/dhcp.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/dhcp.pp @@ -30,4 +30,9 @@ class openstack_tasks::openstack_network::agents::dhcp { name => 'binutils', ensure => 'installed', } + + if is_file_updated('/etc/neutron/neutron.conf', $title) { + notify{'neutron.conf has been changed, going to restart dhcp agent': + } ~> Service['neutron-dhcp-service'] + } } diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/l3.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/l3.pp index cc5a29c1d7..6b47bed378 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/l3.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/l3.pp @@ -53,4 +53,8 @@ class openstack_tasks::openstack_network::agents::l3 { } + if is_file_updated('/etc/neutron/neutron.conf', $title) { + notify{'neutron.conf has been changed, going to restart l3 agent': + } ~> Service['neutron-l3'] + } } diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp index 240a378b79..881deda724 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/agents/metadata.pp @@ -57,4 +57,8 @@ class openstack_tasks::openstack_network::agents::metadata { } + if is_file_updated('/etc/neutron/neutron.conf', $title) { + notify{'neutron.conf has been changed, going to restart neutron metadata': + } ~> Service['neutron-ovs-metadata'] + } } diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/plugins/ml2.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/plugins/ml2.pp index 7dcf7a5a9d..2751780222 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/plugins/ml2.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/plugins/ml2.pp @@ -107,6 +107,11 @@ class openstack_tasks::openstack_network::plugins::ml2 { 'securitygroup/enable_security_group': value => $enable_security_group; } + if is_file_updated('/etc/neutron/neutron.conf', $title) { + notify{'neutron.conf has been changed, going to restart ovs agent': + } ~> Service['neutron-ovs-agent-service'] + } + Neutron_agent_ovs<||> ~> Service['neutron-ovs-agent-service'] class { '::neutron::agents::ml2::ovs': diff --git a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp index 53d0260b7b..64e65d6740 100644 --- a/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp +++ b/deployment/puppet/openstack_tasks/manifests/openstack_network/server_config.pp @@ -246,4 +246,8 @@ class openstack_tasks::openstack_network::server_config { ensure => 'installed', } + if is_file_updated('/etc/neutron/neutron.conf', $title) { + notify{'neutron.conf has been changed, going to restart neutron server': + } ~> Service['neutron-server'] + } } diff --git a/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/is_file_updated.rb b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/is_file_updated.rb new file mode 100644 index 0000000000..5a9b2e983b --- /dev/null +++ b/deployment/puppet/osnailyfacter/lib/puppet/parser/functions/is_file_updated.rb @@ -0,0 +1,28 @@ +require 'digest/md5' + +module Puppet::Parser::Functions + newfunction(:is_file_updated, :type => :rvalue, :arity => 2, + :doc => <<-EOS + Check, that the file was updated since last function execution + for specific entity (e.g. class name) + EOS + ) do |args| + + file = args[0] + entity = args[1] + + store_dir = "/var/cache/fuel/#{entity}" + store_file = "#{File.basename(file).gsub('/','___')}" + fullpath = "#{store_dir}/#{store_file}" + + FileUtils.mkdir_p store_dir + + actual_hash = Digest::MD5.hexdigest(File.read(file)) rescue "" + old_hash = File.read(fullpath) rescue "" + + File.write(fullpath, actual_hash) + + actual_hash != old_hash + + end +end diff --git a/tests/noop/spec/hosts/openstack-network/agents/dhcp_spec.rb b/tests/noop/spec/hosts/openstack-network/agents/dhcp_spec.rb index 9fd149ae2b..92a29e8919 100644 --- a/tests/noop/spec/hosts/openstack-network/agents/dhcp_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/agents/dhcp_spec.rb @@ -12,6 +12,10 @@ describe manifest do MockFunction.new(:is_pkg_installed) do |function| allow(function).to receive(:call).and_return false end + Noop.puppet_function_load :is_file_updated + MockFunction.new('is_file_updated') { |function| + allow(function).to receive(:call).and_return false + } end shared_examples 'catalog' do diff --git a/tests/noop/spec/hosts/openstack-network/agents/l3_spec.rb b/tests/noop/spec/hosts/openstack-network/agents/l3_spec.rb index 914ad3b917..52ed9bbb12 100644 --- a/tests/noop/spec/hosts/openstack-network/agents/l3_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/agents/l3_spec.rb @@ -13,6 +13,10 @@ describe manifest do MockFunction.new(:is_pkg_installed) do |function| allow(function).to receive(:call).and_return false end + Noop.puppet_function_load :is_file_updated + MockFunction.new('is_file_updated') { |function| + allow(function).to receive(:call).and_return false + } end shared_examples 'catalog' do diff --git a/tests/noop/spec/hosts/openstack-network/agents/metadata_spec.rb b/tests/noop/spec/hosts/openstack-network/agents/metadata_spec.rb index 41d6d74b2c..5ecf4adf7d 100644 --- a/tests/noop/spec/hosts/openstack-network/agents/metadata_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/agents/metadata_spec.rb @@ -13,6 +13,10 @@ describe manifest do MockFunction.new(:is_pkg_installed) do |function| allow(function).to receive(:call).and_return false end + Noop.puppet_function_load :is_file_updated + MockFunction.new('is_file_updated') { |function| + allow(function).to receive(:call).and_return false + } end shared_examples 'catalog' do diff --git a/tests/noop/spec/hosts/openstack-network/plugins/ml2_spec.rb b/tests/noop/spec/hosts/openstack-network/plugins/ml2_spec.rb index df80f1c6a0..592c12c347 100644 --- a/tests/noop/spec/hosts/openstack-network/plugins/ml2_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/plugins/ml2_spec.rb @@ -13,6 +13,10 @@ describe manifest do MockFunction.new(:is_pkg_installed) do |function| allow(function).to receive(:call).and_return false end + Noop.puppet_function_load :is_file_updated + MockFunction.new('is_file_updated') { |function| + allow(function).to receive(:call).and_return false + } end shared_examples 'catalog' do @@ -162,5 +166,3 @@ describe manifest do end test_ubuntu_and_centos manifest end - - diff --git a/tests/noop/spec/hosts/openstack-network/server-config_spec.rb b/tests/noop/spec/hosts/openstack-network/server-config_spec.rb index 97690c1820..ee6f00ccd5 100644 --- a/tests/noop/spec/hosts/openstack-network/server-config_spec.rb +++ b/tests/noop/spec/hosts/openstack-network/server-config_spec.rb @@ -12,6 +12,10 @@ describe manifest do MockFunction.new(:is_pkg_installed) do |function| allow(function).to receive(:call).and_return false end + Noop.puppet_function_load :is_file_updated + MockFunction.new('is_file_updated') { |function| + allow(function).to receive(:call).and_return false + } end shared_examples 'catalog' do