Sha256: 704e71f5f750957dfc96f81c8aa1eb7ffefd3713e085451eeac6d64a27c2ce90

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

class Jets::Cfn::Stack
  class Template
    extend Memoist
    include Jets::AwsServices

    delegate :s3_bucket, to: "Jets.project"

    attr_reader :path, :stack_name
    def initialize(options = {})
      @options = options
      @path = Jets::Names.parent_template_path
      @stack_name = Jets::Names.parent_stack_name
    end

    def template_option
      if upload_to_s3?
        {template_url: url}
      else
        {template_body: body}
      end
    end

    # uploads to s3 lazily on first call
    def url
      s3_key = "jets/cfn/#{File.basename(path)}"
      object = s3_resource.bucket(s3_bucket).object(s3_key)
      object.upload_file(path)
      "https://s3.amazonaws.com/#{s3_bucket}/#{s3_key}"
    end
    memoize :url

    # Only use filesystem on initial bootstrap
    def body
      IO.read(path)
    end
    memoize :body

    private

    # Should not upload template to s3 and always use local template for bootstrap deploy.
    # This is because for finale deletion stack, uploading the parent.yml to s3
    # prevents a clean deletion of the s3 bucket resource since it's not empty.
    def upload_to_s3?
      !@options[:bootstrap]
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
jets-6.0.5 lib/jets/cfn/stack/template.rb
jets-6.0.4 lib/jets/cfn/stack/template.rb
jets-6.0.3 lib/jets/cfn/stack/template.rb
jets-6.0.2 lib/jets/cfn/stack/template.rb