Sha256: ac90c6d424fe921eefa13db7fa197425dd0bee275a2ecf01fdbefce2968ab5ce

Contents?: true

Size: 1.52 KB

Versions: 8

Compression:

Stored size: 1.52 KB

Contents

require_relative '../control/stack'
require_relative '../dsl/helpers'
require_relative '../model/attributes'
require_relative '../model/template'

module Convection
  module DSL
    ##
    # DSL for Cloudfile
    ##
    module Cloudfile
      include DSL::Helpers

      attribute :name
      attribute :region
      attribute :splay

      ## Helper to define a template in-line
      def template(*args, &block)
        Model::Template.new(*args, &block)
      end

      def attribute(stack, key, value)
        @attributes.set(stack, key, value)
      end

      # Adds a stack with the provided options to the list of stacks.
      #
      # @see Convection::Control::Stack#initialize
      def stack(stack_name, template, options = {}, &block)
        options[:region] ||= region
        options[:cloud] = name
        options[:attributes] = attributes

        @stacks[stack_name] = Control::Stack.new(stack_name, template, options, &block)
        @deck << @stacks[stack_name]
      end

      def stack_group(group_name, group_list)
        @stack_groups[group_name] = group_list
      end
    end
  end

  module Model
    ##
    # Define your Clouds
    ##
    class Cloudfile
      include DSL::Cloudfile

      attr_reader :attributes
      attr_reader :stacks
      attr_reader :deck
      attr_reader :stack_groups

      def initialize(cloudfile)
        @attributes = Model::Attributes.new
        @stacks = {}
        @deck = []
        @stack_groups = {}

        instance_eval(IO.read(cloudfile), cloudfile, 1)
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
convection-0.4.3 lib/convection/model/cloudfile.rb
convection-0.4.2 lib/convection/model/cloudfile.rb
convection-0.4.1 lib/convection/model/cloudfile.rb
convection-0.4.0 lib/convection/model/cloudfile.rb
convection-0.3.3.pre.beta.1 lib/convection/model/cloudfile.rb
convection-0.3.2 lib/convection/model/cloudfile.rb
convection-0.3.1 lib/convection/model/cloudfile.rb
convection-0.3.0 lib/convection/model/cloudfile.rb