Sha256: e6f39805e02eb9b301ca1956414e2b44de00d34726715d8dd2948822e3762e0a

Contents?: true

Size: 1.41 KB

Versions: 1

Compression:

Stored size: 1.41 KB

Contents

require 'forwardable'
require 'phut/null_logger'
require 'phut/open_vswitch'

module Phut
  # Parsed DSL data.
  class Configuration
    extend Forwardable

    def_delegators :@all, :fetch

    def initialize(logger = NullLogger.new)
      @all = {}
      @logger = logger
    end

    def vswitches
      @all.values.select { |each| each.is_a? OpenVswitch }
    end

    def vhosts
      @all.values.select { |each| each.is_a? Vhost }
    end

    def links
      @all.values.select { |each| each.is_a? VirtualLink }
    end

    def run
      links.each(&:run)
      vswitches.each(&:run)
      vhosts.each { |each| each.run vhosts }
    end

    def stop
      vswitches.each(&:maybe_stop)
      vhosts.each(&:maybe_stop)
      links.each(&:maybe_stop)
    end

    def add_vswitch(name, attrs)
      check_name_conflict name
      @all[name] = OpenVswitch.new(attrs[:dpid], name, @logger)
    end

    def add_vhost(name, attrs)
      check_name_conflict name
      @all[name] =
        Vhost.new(attrs[:ip], attrs[:mac], attrs[:promisc], name, @logger)
    end

    # This method smells of :reek:LongParameterList
    def add_link(name_a, device_a, name_b, device_b)
      @all[[name_a, name_b]] =
        VirtualLink.new(name_a, device_a, name_b, device_b, @logger)
    end

    private

    def check_name_conflict(name)
      conflict = @all[name]
      fail "The name #{name} conflicts with #{conflict}." if conflict
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
phut-0.2.2 lib/phut/configuration.rb