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 |