class MasterTemplate

Public Class Methods

new(params) click to toggle source
# File lib/gantree/cfn/master.rb, line 3
def initialize params
  @stack_name = params[:stack_name]
  @rds = params[:rds]
  @rds_enabled = params[:rds?]
  @env = params[:env]
  @bucket = params[:cfn_bucket]
  @requirements = params[:requirements]
end

Public Instance Methods

create() click to toggle source
# File lib/gantree/cfn/master.rb, line 12
def create
  "#{@requirements}
  template do 
    value :AWSTemplateFormatVersion => '2010-09-09'
    value :Description => '#{@stack_name} Master Template'

    parameter 'ResourcesTemplate',
              :Description => 'The key of the template for the resources required to run the app',
              :Type => 'String',
              :Default => '#{@stack_name}-resources.cfn.json'

    parameter 'AppTemplate',
              :Description => 'The key of the template for the EB app/env substack',
              :Type => 'String',
              :Default => '#{@stack_name}-beanstalk.cfn.json'

    parameter 'KeyName',
              :Type => 'String',
              :Default => 'default'

    parameter 'ApplicationName',
              :Type => 'String',
              :Default => '#{@stack_name}'

    parameter 'Environment',
              :Type => 'String',
              :Default => '#{@env_type}'

    parameter 'IamInstanceProfile',
              :Type => 'String',
              :Default => 'EbApp'

    resource 'AppResources', :Type => 'AWS::CloudFormation::Stack', :Properties => {
        :TemplateURL => join('/', 'http://s3.amazonaws.com', '#{@bucket}', '#{@stack_name}', ref('ResourcesTemplate')),
        :Parameters => { :ApplicationName => ref('ApplicationName') },
    }

    resource 'App', :Type => 'AWS::CloudFormation::Stack', :Properties => {
        :TemplateURL => join('/', 'http://s3.amazonaws.com','#{@bucket}', '#{@stack_name}', ref('AppTemplate')),
        :Parameters => {
            :KeyName => ref('KeyName'),
            :InstanceSecurityGroup => get_att('AppResources', 'Outputs.InstanceSecurityGroup'),
            :ApplicationName => ref('ApplicationName'),
            :Environment => ref('Environment'),
            :IamInstanceProfile => ref('IamInstanceProfile'),
            #{":RDSHostURLPass => get_att('AppResources','Outputs.RDSHostURL')," if @rds_enabled}
        },
    }

    output 'URL',
           :Description => 'URL of the AWS Elastic Beanstalk Environment',
           :Value => get_att('App', 'Outputs.URL')

  end.exec!"
end