Sha256: 67b8fe10358ef2ced5e6ec927758f59204f989c2f38db88348b3a37c3bfaea95

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

module Clusterfuck
  class QuaggaBGPRouter < BGPPeer
    def build(config)
      super(config)

      config.vm.define(name) do |box|
        box.vm.provision :shell, inline: <<-EOS
  mkdir -p /tmp/quagga
  chown -R vagrant /tmp/quagga

  apt-get update
  apt-get -y install quagga
  EOS

        # TODO should be configured from BGP module if enabled
        # TODO have to move to /tmp/ first and then later to /etc/quagga because
        # Vagrant doens't copy as root.
        box.vm.provision :file,
          source: tmp_daemons_config,
          destination: "/tmp/quagga/daemons"

        box.vm.provision :file,
          source: tmp_zebra_config,
          destination: "/tmp/quagga/zebra.conf"

        box.vm.provision :file,
          source: tmp_bgp_config,
          destination: "/tmp/quagga/bgpd.conf"

        box.vm.provision :shell, inline: <<-EOS
  echo net.ipv4.ip_forward=1 > /etc/sysctl.d/60-clusterfuck.conf
  sysctl -p /etc/sysctl.d/60-clusterfuck.conf

  mv /tmp/quagga/* /etc/quagga
  chown quagga.quagga /etc/quagga/*.conf
  chmod 640 /etc/quagga/*.conf

  service quagga restart
EOS
      end
    end

    private
    # TODO clean up these messy functions
    def tmp_zebra_config
      File.expand_path("../../../templates/quagga.zebra.conf", __FILE__)
    end

    def tmp_daemons_config
      File.expand_path("../../../templates/quagga.daemons", __FILE__)
    end

    def tmp_bgp_config
      temp = Tempfile.new("routes")
      ObjectSpace.undefine_finalizer(temp) # finalizer removes it, nthx
      temp.write(bgp_config)
      temp.path
    end

    def bgp_config
      path = File.expand_path("../../../templates/quagga.bgpd.conf.erb", __FILE__)
      ERB.new(File.read(path)).result(binding)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
vagrant-clusterfuck-0.0.2 lib/clusterfuck/quagga_bgp_router.rb