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