creating different configurations on each node using capistrano

This is probably in the top ten lamest hacks of my life. But I blame capistrano for not being what I want it to be.

This replaces BINDIPADDRESS in the configuration file with the IP address of eth0 on each host.

def get_ip_address (ethernet_device = "eth0")
  ip_addresses = Hash.new
  run("/sbin/ifconfig #{ethernet_device} | grep inet | grep -v inet6") do |ch, stream, data|
    case data
    when /s*inet addr:((d+.){3}d+)s+.*/
      ip_addresses["#{ch[:host]}"] = $1
    end
  end
  return ip_addresses
end  
task :put_auto_install_xml, :roles => :app do
    ip_addresses = get_ip_address()
    auto_install =
      IO.read(
        File.join(File.dirname(__FILE__), "files", "#{application}", "#{application}_auto_install_#{env}.xml")
      )
    put(
      auto_install,
      "/tmp/#{application}_auto_install-#{env}-#{build}.xml",
      :mode => 0644
    )
    run("/bin/bash") do |ch, stream, data|
      ch.send_data "/bin/sed -i -e 's/BINDIPADDRESS/#{ip_addresses[ch[:host]]}/' /tmp/#{application}_auto_install-#{env}-#{build}.xmln"
      ch.send_data "exitn"
    end
  end

Leave a Reply

Your email address will not be published. Required fields are marked *

Time limit is exhausted. Please reload the CAPTCHA.