diff --git a/CHANGELOG.md b/CHANGELOG.md index 72e3ef7..e95dd5c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,11 @@ cookbook-keepalived CHANGELOG =============== +## 0.1.0 + + - David Vanhoucke + - [cfd2c8a] trigger notify scripts to add or remove iptables rules + ## 0.0.2 - Miguel Negron diff --git a/resources/metadata.rb b/resources/metadata.rb index 995e937..3c219ad 100644 --- a/resources/metadata.rb +++ b/resources/metadata.rb @@ -4,4 +4,4 @@ maintainer_email 'dvanhoucke@redborder.com' license 'All rights reserved' description 'Installs/Configures cookbook-keepalived' -version '0.0.2' +version '0.1.0' diff --git a/resources/providers/config.rb b/resources/providers/config.rb index 2fd41dd..bc99c45 100644 --- a/resources/providers/config.rb +++ b/resources/providers/config.rb @@ -40,6 +40,28 @@ notifies :reload, 'service[keepalived]', :delayed end + unless virtual_ips['external']['webui']['ip'].nil? + template '/usr/lib/redborder/bin/rb_keepalived_master_notify_webui.sh' do + cookbook 'keepalived' + source 'notify.erb' + owner 'root' + group 'root' + mode '0755' + retries 2 + variables(vip: virtual_ips['external']['webui']['ip']) + end + + template '/usr/lib/redborder/bin/rb_keepalived_backup_notify_webui.sh' do + cookbook 'keepalived' + source 'notify.erb' + owner 'root' + group 'root' + mode '0755' + retries 2 + variables(vip: virtual_ips['external']['webui']['ip']) + end + end + template '/etc/keepalived/keepalived.conf' do cookbook 'keepalived' source 'keepalived.conf.erb' diff --git a/resources/templates/default/keepalived.conf.erb b/resources/templates/default/keepalived.conf.erb index d12de06..b5eef4a 100644 --- a/resources/templates/default/keepalived.conf.erb +++ b/resources/templates/default/keepalived.conf.erb @@ -10,7 +10,7 @@ global_defs { } notification_email_from redborder router_id redborder_manager_cluster - script_user keepalived + script_user root enable_script_security } @@ -44,7 +44,7 @@ vrrp_instance vi_<%= ip %> { state BACKUP interface <%= iface %> virtual_router_id <%= ((@start_id.nil? ? 111 : @start_id.to_i) + index).to_s %> - priority <%= ( services.select{ |x| x["service"]=="postgresql" }.nil? ? "100" : (File.exists?("/opt/rb/var/pgdata/postgresql.conf") ? "100" : "50" ) ) %> + priority <%= 50+@managers.size-@managers.index { |m| m.name == node.name } %> advert_int 1 nopreempt <% if !node["redborder"].nil? and !node["redborder"]["dmidecode"].nil? and !node["redborder"]["dmidecode"]["manufacturer"].nil? and node["redborder"]["dmidecode"]["manufacturer"].to_s.downcase == "xen" %> @@ -91,6 +91,10 @@ vrrp_instance vi_<%= ip %> { virtual_ipaddress { <%= ip %>/32 } + <% if services.select{ |x| x["service"]=="webui" } %> + notify_master "/usr/lib/redborder/bin/rb_keepalived_master_notify_webui.sh" + notify_backup "/usr/lib/redborder/bin/rb_keepalived_backup_notify_webui.sh" + <% end %> } <% end %> <% end %> diff --git a/resources/templates/default/notify.erb b/resources/templates/default/notify.erb new file mode 100644 index 0000000..65b14dc --- /dev/null +++ b/resources/templates/default/notify.erb @@ -0,0 +1,9 @@ +#!/bin/bash + +if hostname -I | grep -q <%= @vip %>; then + iptables -t nat -D PREROUTING -d <%= @vip %> -j REDIRECT &>/dev/null +else + if ! iptables -t nat -C PREROUTING -d <%= @vip %> -j REDIRECT 2>/dev/null; then + iptables -t nat -A PREROUTING -d <%= @vip %> -j REDIRECT + fi +fi \ No newline at end of file