Sha256: 953cb3119d80f9b38637c98a254cd572f97e6f6c299e0387e4730630f5aafc8d

Contents?: true

Size: 1.8 KB

Versions: 2

Compression:

Stored size: 1.8 KB

Contents

require 'cloud_shaped/dsl'

module CloudShaped

  # A {http://en.wikipedia.org/wiki/Builder_pattern builder} for CloudFormation templates.
  #
  class TemplateBuilder

    def initialize(settings = {})
      @parameters = {}
      @resources = {}
      @outputs = {}
    end

    # @return [Hash] a CloudFormation template as Ruby data
    #
    def template
      {
        "AWSTemplateFormatVersion" => '2010-09-09',
        "Parameters" => parameters,
        "Resources" => resources,
        "Outputs" => outputs
      }
    end

    include CloudShaped::DSL

    # Declares a Parameter.
    #
    # @param name [String] the parameter name
    # @option options [String] :type ("String") the parameter type
    # @option options [String] :description parameter description
    # @option options [String] :default a default value
    #
    # @example
    #   def_parameter "appName"
    #   def_parameter "minInstances", :type => "Number"
    #
    def def_parameter(name, options = {})
      parameters[name] = parameter(options)
    end

    # Declares a Resource.
    #
    # @param name [String] the resource name
    # @param type [String, Symbol] the resource type
    # @param args [Hash] resource properties
    #
    def def_resource(name, type, *args, &block)
      resources[name] = if type.is_a?(Symbol)
        send(type, *args, &block)
      else
        resource(type, *args, &block)
      end
    end

    # Declares an Output.
    #
    # @param name [String] the output name
    # @param value the output value (usually a reference to a resource)
    #
    # @example
    #   def_output "loadBalancerName", ref("loadBalancer")
    #
    def def_output(name, value)
      outputs[name] = output(value)
    end

    protected

    attr_reader :parameters
    attr_reader :resources
    attr_reader :outputs

  end

end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
cloud_shaped-0.1.0 lib/cloud_shaped/template_builder.rb
cloud_shaped-0.0.2 lib/cloud_shaped/template_builder.rb