Module: CloudFormationDSL::Helpers
- Included in:
- Template
- Defined in:
- lib/cloudformation-dsl/helpers.rb
Instance Method Summary collapse
- #aws_account_id ⇒ Object
- #aws_no_value ⇒ Object
- #aws_notification_arns ⇒ Object
- #aws_stack_id ⇒ Object
- #aws_stack_name ⇒ Object
-
#base64(value) ⇒ Object
Formation helpers.
- #equal(one, two) ⇒ Object
-
#file(filename) ⇒ Object
Read the specified file and return its value as a string literal.
- #find_in_map(map, key, name) ⇒ Object
- #fn_and(*condition_list) ⇒ Object
- #fn_if(cond, if_true, if_false) ⇒ Object
- #fn_not(condition) ⇒ Object
- #fn_or(*condition_list) ⇒ Object
- #get_att(resource, attribute) ⇒ Object
- #get_azs(region = '') ⇒ Object
-
#interpolate(string, locals = {}) ⇒ Object
Interpolates a string like “NAME={ref(‘Service’)}” and returns a CloudFormation “Fn::Join” operation to collect the results.
- #join(delim, *list) ⇒ Object
- #join_interpolate(delim, string) ⇒ Object
-
#join_list(delim, list) ⇒ Object
Variant of join that matches the native CFN syntax.
- #load_from_file(filename) ⇒ Object
-
#no_value ⇒ Object
deprecated, for backward compatibility.
- #not_equal(one, two) ⇒ Object
- #ref(name) ⇒ Object
- #select(index, list) ⇒ Object
Instance Method Details
#aws_account_id ⇒ Object
77 |
# File 'lib/cloudformation-dsl/helpers.rb', line 77 def aws_account_id() ref("AWS::AccountId") end |
#aws_no_value ⇒ Object
81 |
# File 'lib/cloudformation-dsl/helpers.rb', line 81 def aws_no_value() ref("AWS::NoValue") end |
#aws_notification_arns ⇒ Object
79 |
# File 'lib/cloudformation-dsl/helpers.rb', line 79 def aws_notification_arns() ref("AWS::NotificationARNs") end |
#aws_stack_id ⇒ Object
83 |
# File 'lib/cloudformation-dsl/helpers.rb', line 83 def aws_stack_id() ref("AWS::StackId") end |
#aws_stack_name ⇒ Object
85 |
# File 'lib/cloudformation-dsl/helpers.rb', line 85 def aws_stack_name() ref("AWS::StackName") end |
#base64(value) ⇒ Object
Formation helpers
30 |
# File 'lib/cloudformation-dsl/helpers.rb', line 30 def base64(value) { :'Fn::Base64' => value } end |
#equal(one, two) ⇒ Object
49 |
# File 'lib/cloudformation-dsl/helpers.rb', line 49 def equal(one, two) { :'Fn::Equals' => [one, two] } end |
#file(filename) ⇒ Object
Read the specified file and return its value as a string literal
94 |
# File 'lib/cloudformation-dsl/helpers.rb', line 94 def file(filename) File.read(File.absolute_path(filename, File.dirname($PROGRAM_NAME))) end |
#find_in_map(map, key, name) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/cloudformation-dsl/helpers.rb', line 17 def find_in_map(map, key, name) # Eagerly evaluate mappings when all keys are known at template expansion time if map.is_a?(String) && key.is_a?(String) && name.is_a?(String) # We don't know whether the map was built with string keys or symbol keys. Try both. def get(map, key) map[key] || map.fetch(key.to_sym) end get(get(@dict.fetch(:Mappings).fetch(map), key), name) else { :'Fn::FindInMap' => [ map, key, name ] } end end |
#fn_and(*condition_list) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/cloudformation-dsl/helpers.rb', line 61 def fn_and(*condition_list) case condition_list.length when 0..1 then raise "fn_and needs at least 2 items." when 2..10 then { :'Fn::And' => condition_list } else raise "fn_and needs a list of 2-10 items that evaluate to true/false." end end |
#fn_if(cond, if_true, if_false) ⇒ Object
69 |
# File 'lib/cloudformation-dsl/helpers.rb', line 69 def fn_if(cond, if_true, if_false) { :'Fn::If' => [cond, if_true, if_false] } end |
#fn_not(condition) ⇒ Object
51 |
# File 'lib/cloudformation-dsl/helpers.rb', line 51 def fn_not(condition) { :'Fn::Not' => [condition] } end |
#fn_or(*condition_list) ⇒ Object
53 54 55 56 57 58 59 |
# File 'lib/cloudformation-dsl/helpers.rb', line 53 def fn_or(*condition_list) case condition_list.length when 0..1 then raise "fn_or needs at least 2 items." when 2..10 then { :'Fn::Or' => condition_list } else raise "fn_or needs a list of 2-10 items that evaluate to true/false." end end |
#get_att(resource, attribute) ⇒ Object
34 |
# File 'lib/cloudformation-dsl/helpers.rb', line 34 def get_att(resource, attribute) { :'Fn::GetAtt' => [ resource, attribute ] } end |
#get_azs(region = '') ⇒ Object
36 |
# File 'lib/cloudformation-dsl/helpers.rb', line 36 def get_azs(region = '') { :'Fn::GetAZs' => region } end |
#interpolate(string, locals = {}) ⇒ Object
Interpolates a string like “NAME={ref(‘Service’)}” and returns a CloudFormation “Fn::Join” operation to collect the results. Anything between and } is interpreted as a Ruby expression and eval’d. This is especially useful with Ruby “here” documents. Local variables may also be exposed to the string via the locals hash.
100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/cloudformation-dsl/helpers.rb', line 100 def interpolate(string, locals={}) list = [] while string.length > 0 head, match, string = string.partition(/\{\{.*?\}\}/) list << head if head.length > 0 list << eval(match[2..-3], nil, 'interpolated string') if match.length > 0 end # Split out strings in an array by newline, for visibility list = list.flat_map {|value| value.is_a?(String) ? value.lines.to_a : value } join('', *list) end |
#join(delim, *list) ⇒ Object
38 39 40 41 42 43 44 |
# File 'lib/cloudformation-dsl/helpers.rb', line 38 def join(delim, *list) case list.length when 0 then '' when 1 then list[0] else join_list(delim,list) end end |
#join_interpolate(delim, string) ⇒ Object
113 114 115 116 |
# File 'lib/cloudformation-dsl/helpers.rb', line 113 def join_interpolate(delim, string) $stderr.puts "join_interpolate(delim,string) has been deprecated; use interpolate(string) instead" interpolate(string) end |
#join_list(delim, list) ⇒ Object
Variant of join that matches the native CFN syntax.
47 |
# File 'lib/cloudformation-dsl/helpers.rb', line 47 def join_list(delim, list) { :'Fn::Join' => [ delim, list ] } end |
#load_from_file(filename) ⇒ Object
3 4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/cloudformation-dsl/helpers.rb', line 3 def load_from_file(filename) file = File.open(filename) # Figure out what the file extension is and process accordingly. case File.extname(filename) when ".rb"; eval(file.read, nil, filename) when ".json"; JSON.load(file) when ".yaml"; YAML::load(file) else raise("Do not recognize extension of #{filename}.") end ensure file.close end |
#no_value ⇒ Object
deprecated, for backward compatibility
88 89 90 91 |
# File 'lib/cloudformation-dsl/helpers.rb', line 88 def no_value() warn_deprecated('no_value()', 'aws_no_value()') aws_no_value() end |
#not_equal(one, two) ⇒ Object
71 |
# File 'lib/cloudformation-dsl/helpers.rb', line 71 def not_equal(one, two) fn_not(equal(one,two)) end |
#ref(name) ⇒ Object
75 |
# File 'lib/cloudformation-dsl/helpers.rb', line 75 def ref(name) { :Ref => name } end |
#select(index, list) ⇒ Object
73 |
# File 'lib/cloudformation-dsl/helpers.rb', line 73 def select(index, list) { :'Fn::Select' => [ index, list ] } end |