class Momo::Resource

Attributes

condition[RW]
deletion_policy[RW]
dependencies[RW]
metadata[RW]
name[RW]
props[RW]
type[RW]

Public Class Methods

new(type, name, stack) click to toggle source
# File lib/momo/resource.rb, line 9
def initialize(type, name, stack)
        @type = type
        @name = name
        @metadata = nil
        @props = {}
        @condition = nil
        @dependencies = []
        @complete = false
        @deletion_policy = nil
        @stack = stack
end

Public Instance Methods

add_thing(group, name, thing) click to toggle source
# File lib/momo/resource.rb, line 81
def add_thing(group, name, thing)
        init_group(group)
        
        if !@metadata["AWS::CloudFormation::Init"]["config"][group][name]
                @metadata["AWS::CloudFormation::Init"]["config"][group][name] = []
        end

        @metadata["AWS::CloudFormation::Init"]["config"][group][name] << thing
end
complete!() click to toggle source
# File lib/momo/resource.rb, line 43
def complete!
        @complete = true
end
depends_on(resource) click to toggle source
# File lib/momo/resource.rb, line 159
def depends_on(resource)
        if resource.is_a? String
                @dependencies << args[0]
        elsif resource.is_a? Resource
                @dependencies << resource.name
        else
                raise "Invalid argument to depends_on: #{resource[0]}"
        end
end
file(name, options={}) click to toggle source
# File lib/momo/resource.rb, line 120
def file(name, options={})
        info = {
                "content" => "",
                "group" => "root",
                "owner" => "root",
                "mode" => "000600",
                "context" => {},
        }

        if options[:content] and options[:source]
                raise "Momo CFL Resource: Please specify only file content or source and not both"
        end

        info["content"] = options[:content] if options[:content]
        info["source"] = options[:source] if options[:source]
        info["group"] = options[:group] if options[:group]
        info["mode"] = options[:mode] if options[:mode]
        info["owner"] = options[:owner] if options[:owner]
        info["context"] = Momo.resolve(options[:context], stack: @stack, resource: name) if options[:context]

        set_thing2("files", name, info)
end
gem(package) click to toggle source
# File lib/momo/resource.rb, line 112
def gem(package)
        set_thing("packages", "rubygems", package, [])
end
init_cfinit!() click to toggle source
# File lib/momo/resource.rb, line 54
def init_cfinit!
        init_metadata!
        
        if !@metadata["AWS::CloudFormation::Init"]
                @metadata["AWS::CloudFormation::Init"] = {}
        end
                 
        if !@metadata["AWS::CloudFormation::Init"]["config"]
                @metadata["AWS::CloudFormation::Init"]["config"] = {
                        "packages" => {},
                        "groups" => {},
                        "users" => {},
                        "sources" => {},
                        "files" => {},
                        "commands" => {},
                        "services" => {}
                }
        end
end
init_group(group) click to toggle source
# File lib/momo/resource.rb, line 74
def init_group(group)
        init_cfinit!
        if !@metadata["AWS::CloudFormation::Init"]["config"][group] 
                @metadata["AWS::CloudFormation::Init"]["config"][group] = {}
        end
end
init_metadata!() click to toggle source
# File lib/momo/resource.rb, line 47
def init_metadata!

        if !@metadata 
                @metadata = {}
        end
end
method_missing(name, *args, &block) click to toggle source
# File lib/momo/resource.rb, line 21
def method_missing(name, *args, &block)

        if !@complete
                if /^[[:upper:]]/.match(name) == nil
                        raise "Invalid property name: #{name}"
                end
                @props[name] = Momo.resolve(args[0], resource: name, stack: @stack, &block)

        else
                if /^[[:upper:]]/.match(name) == nil
                        raise "Invalid attribute name: #{name}"
                end
                # For get attributes when the resource is completed
                # TODO: should instead instance eval with a different class
                MemberReference.new @name, name, @stack
        end
end
rpm(package) click to toggle source
# File lib/momo/resource.rb, line 116
def rpm(package)
        set_thing("packages", "rpm", package, [])
end
service(service_name) click to toggle source
# File lib/momo/resource.rb, line 143
def service(service_name)
        set_thing("services", "sysvinit", service_name, {enabled: true, ensureRunning: true})
end
set_deletion_policy(value) click to toggle source
# File lib/momo/resource.rb, line 39
def set_deletion_policy(value)
        @deletion_policy = value
end
set_thing(group, subgroup, name, thing) click to toggle source
# File lib/momo/resource.rb, line 92
def set_thing(group, subgroup, name, thing)
        init_group(group)
        
        if !@metadata["AWS::CloudFormation::Init"]["config"][group][subgroup]
                @metadata["AWS::CloudFormation::Init"]["config"][group][subgroup] = {}
        end

        @metadata["AWS::CloudFormation::Init"]["config"][group][subgroup][name] = thing
end
set_thing2(group, name, thing) click to toggle source
# File lib/momo/resource.rb, line 102
def set_thing2(group, name, thing)
        init_group(group)

        @metadata["AWS::CloudFormation::Init"]["config"][group][name] = thing
end
tag(key, value, options={}) click to toggle source
# File lib/momo/resource.rb, line 148
def tag(key, value, options={})
        if !@props["Tags"]
                @props["Tags"] = []
        end

        theTag = { "Key" => key, "Value" => Momo.resolve(value) }
        theTag["PropagateAtLaunch"] = options[:propagate_at_launch] if options[:propagate_at_launch]

        @props["Tags"] << theTag
end
yum(package) click to toggle source
# File lib/momo/resource.rb, line 108
def yum(package)
        set_thing("packages", "yum", package, [])
end