class GV::Valley::Balancer

Constants

INDENT

Public Instance Methods

reload(&block) click to toggle source

reloads haproxy config

# File lib/gv/valley/balancer.rb, line 16
def reload &block
  
  @block = block
  
  indicate "Loading Haproxy config"
  
  config = File.read("#{GV::Valley.root}/scripts/haproxy.cfg")
  target_file = "/etc/haproxy/haproxy.cfg"
  acl = ""
  backend = ""
  
  App.all.each do |app|
    
    app["domains"].each do |domain|
      acl << "#{INDENT}use_backend b_#{app["name"]} if { hdr(host) -i #{domain} }\n"
    end
    
    backend << "backend b_#{app["name"]}\n"
    app["ps"].select{|k,v| k =~ /web/}.each do |ps,pdata|
      pdata['containers'].each do |container|
      # app["ps"]["web"]["containers"].each do |container|
        host = container['HostConfig']['PortBindings']["#{App::PORT}/tcp"].first
        backend << "#{INDENT}server srv_#{container['ID'][0..6]} #{host['HostIp']}:#{host['HostPort']}\n"
      end
    end
    
  end
  
  config.gsub!(/^\#FRONT$/,acl) 
  config.gsub!(/^\#BACK$/,backend) 
  
  pipe "rm #{target_file}"
  File.open(target_file,File::RDWR|File::CREAT){|f| f.puts config }
    
  pipe "chmod 0770 #{target_file}"
  pipe "chgrp haproxy #{target_file}"
  pipe "service haproxy reload", &block
  
end