fixed several bugs at ha cookbooks

Change-Id: I2bb16dcb60a7b51d76a7337ce1be1fe5a6c8aabf
This commit is contained in:
SamSu 2014-03-25 14:35:46 -07:00
parent 88e6bd9d54
commit 66177e0196
5 changed files with 122 additions and 25 deletions

View File

@ -79,12 +79,15 @@ default['haproxy']['source']['use_pcre'] = false
default['haproxy']['source']['use_openssl'] = false
default['haproxy']['source']['use_zlib'] = false
default['haproxy']['enable_services'] = []
default['haproxy']['listeners'] = {
'listen' => {},
'frontend' => {},
'backend' => {}
}
default['haproxy']['services'] = {
"dashboard_http" => {
"role" => "os-compute-single-controller",
@ -96,8 +99,9 @@ default['haproxy']['services'] = {
"mode http", \
"option forwardfor", \
"option httpchk", \
"option httpclose", \
"rspidel ^Set-cookie:\ IP="]
"option httpclose"
# "rspidel ^Set-cookie:\ IP="
]
},
"dashboard_https" => {
"role" => "os-compute-single-controller",

View File

@ -19,16 +19,19 @@
package "haproxy"
directory node['haproxy']['conf_dir']
template "/etc/init.d/haproxy" do
source "haproxy-init.erb"
owner "root"
group "root"
mode 00755
variables(
:hostname => node['hostname'],
:conf_dir => node['haproxy']['conf_dir'],
:prefix => "/usr"
)
case node['platform_family']
when "debian"
directory node['haproxy']['conf_dir']
template "/etc/init.d/haproxy" do
source "haproxy-init.erb"
owner "root"
group "root"
mode 00755
variables(
:hostname => node['hostname'],
:conf_dir => node['haproxy']['conf_dir'],
:prefix => "/usr"
)
end
end

View File

@ -17,7 +17,38 @@
# limitations under the License.
#
defaultbag = "openstack"
if !Chef::DataBag.list.key?(defaultbag)
Chef::Application.fatal!("databag '#{defaultbag}' doesn't exist.")
return
end
myitem = node.attribute?('cluster')? node['cluster']:"env_default"
if !search(defaultbag, "id:#{myitem}")
Chef::Application.fatal!("databagitem '#{myitem}' doesn't exist.")
return
end
mydata = data_bag_item(defaultbag, myitem)
if mydata['ha']['status'].eql?('enable')
node.set['haproxy']['incoming_address'] = mydata['ha']['haproxy']['vip']
mydata['ha']['haproxy']['roles'].each do |role, services|
services.each do |service|
node.set['haproxy']['services'][service]['role'] = role
unless node['haproxy']['enable_services'].include?(service)
node.set['haproxy']['enable_services'] << service
end
end
end
end
node['haproxy']['services'].each do |name, service|
unless node['haproxy']['enable_services'].include?(name)
next
end
pool_members = search("node", "role:#{service['role']} AND chef_environment:#{node.chef_environment}") || []
# load balancer may be in the pool
@ -44,7 +75,7 @@ node['haproxy']['services'].each do |name, service|
pool = ["options httpchk #{node['haproxy']['httpchk']}"] if node['haproxy']['httpchk']
pool = service[:options]
servers = pool_members.uniq.map do |s|
"#{s[:hostrame]} #{s[:ipaddress]}:#{service[:backend_port]} check inter 2000 rise 2 fall 5"
"#{s[:hostname]} #{s[:ipaddress]}:#{service[:backend_port]} check inter 2000 rise 2 fall 5"
end
haproxy_lb name do
@ -72,4 +103,3 @@ service "haproxy" do
supports :restart => true, :status => true, :reload => true
action [:enable, :start]
end

View File

@ -1,4 +1,4 @@
default['keepalived']['shared_address'] = false
default['keepalived']['shared_address'] = true
default['keepalived']['global']['notification_emails'] = 'admin@example.com'
default['keepalived']['global']['notification_email_from'] = "keepalived@#{node['domain'] || 'example.com'}"
default['keepalived']['global']['smtp_server'] = '127.0.0.1'
@ -18,20 +18,23 @@ default['keepalived']['check_scripts'] = {
default['keepalived']['instance_defaults']['state'] = 'MASTER'
default['keepalived']['instance_defaults']['priority'] = 100
default['keepalived']['instance_defaults']['virtual_router_id'] = 10
default['keepalived']['vip'] = {
"eth0" => "10.145.88.161"
}
default['keepalived']['instances'] = {
"openstack" => {
"virtual_router_id" => "50",
"advert_int" => "1",
"priorities" => {
"centos-10-145-88-152" => "110",
"centos-10-145-88-153" => "101"
"centos-10-145-88-152" => 110,
"centos-10-145-88-153" => 101
},
"states" => {
"centos-10-145-88-152" => "BACKUP",
"centos-10-145-88-153" => "MASTER"
},
"interface" => "eth0",
"ip_addresses" => ["192.168.220.40 dev eth0"],
"ip_addresses" => ["#{node['keepalived']['vip']['eth0']} dev eth0"],
"track_script" => "haproxy"
}
}

View File

@ -17,16 +17,73 @@
# limitations under the License.
#
require 'chef/util/file_edit'
defaultbag = "openstack"
if !Chef::DataBag.list.key?(defaultbag)
Chef::Application.fatal!("databag '#{defaultbag}' doesn't exist.")
return
end
myitem = node.attribute?('cluster')? node['cluster']:"env_default"
if !search(defaultbag, "id:#{myitem}")
Chef::Application.fatal!("databagitem '#{myitem}' doesn't exist.")
return
end
mydata = data_bag_item(defaultbag, myitem)
if mydata['ha']['status'].eql?('enable')
mydata['ha']['keepalived']['router_ids'].each do |nodename, routerid|
node.override['keepalived']['global']['router_ids']["#{nodename}"] = routerid
end
mydata['ha']['keepalived']['instance_name']['priorities'].each do |nodename, priority|
node.override['keepalived']['instances']['openstack']['priorities']["#{nodename}"] = priority
end
mydata['ha']['keepalived']['instance_name']['states'].each do |nodename, status|
node.override['keepalived']['instances']['openstack']['states']["#{nodename}"] = status
end
interface = node['keepalived']['instances']['openstack']['interface']
node.override['keepalived']['instances']['openstack']['ip_addresses'] = [
"#{mydata['ha']['keepalived']['instance_name']['vip']} dev #{interface}" ]
end
package "keepalived"
if node['keepalived']['shared_address']
file '/etc/sysctl.d/60-ip-nonlocal-bind.conf' do
mode 0644
content "net.ipv4.ip_nonlocal_bind=1\n"
end
case node['platform_family']
when "debian"
file '/etc/sysctl.d/60-ip-nonlocal-bind.conf' do
mode 0644
content "net.ipv4.ip_nonlocal_bind=1\n"
end
service 'procps' do
action :start
service 'procps' do
action :start
end
when "rhel"
ruby_block "update sysctl" do
block do
fe = Chef::Util::FileEdit.new('/etc/sysctl.conf')
fe.search_file_delete_line(/^net.ipv4.ip_nonlocal_bind\s*=\s*0/)
fe.write_file
fe.insert_line_if_no_match(/^net.ipv4.ip_nonlocal_bind\s*=s*1/,
"net.ipv4.ip_nonlocal_bind = 1")
fe.write_file
end
not_if %Q|grep "^net.ipv4.ip_nonlocal_bind[[:space:]]*=[[:space:]]*1" /etc/sysctl.conf|
notifies :run, "execute[apply sysctl]", :immediately
end
execute "apply sysctl" do
command "sysctl -p"
action :nothing
end
end
end