Module: CfnDsl::Functions

Included in:
JSONable, JSONable
Defined in:
lib/cfndsl/jsonable.rb

Overview

These functions are available anywhere inside a block for a JSONable object.

Instance Method Summary collapse

Instance Method Details

#FnAnd(array) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::And



40
41
42
43
44
45
# File 'lib/cfndsl/jsonable.rb', line 40

def FnAnd(array)
  if !array || array.count < 2 || array.count > 10
    raise 'The array passed to Fn::And must have at least 2 elements and no more than 10'
  end
  Fn.new('And', array)
end

#FnBase64(value) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::Base64



15
16
17
# File 'lib/cfndsl/jsonable.rb', line 15

def FnBase64(value)
  Fn.new('Base64', value)
end

#FnEquals(value1, value2) ⇒ Object

Equivalent to the Cloudformation template built in function Fn::Equals



48
49
50
# File 'lib/cfndsl/jsonable.rb', line 48

def FnEquals(value1, value2)
  Fn.new('Equals', [value1, value2])
end

#FnFindInMap(map, key, value) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::FindInMap



20
21
22
# File 'lib/cfndsl/jsonable.rb', line 20

def FnFindInMap(map, key, value)
  Fn.new('FindInMap', [map, key, value])
end

#FnFormat(string, *arguments) ⇒ Object

Usage

FnFormat('This is a %0. It is 100%% %1', 'test', 'effective')

or

FnFormat('This is a %{test}. It is 100%% %{effective}',
          :test => 'test",
          :effective => 'effective')

These will each generate a call to Fn::Join that when evaluated will produce the string “This is a test. It is 100% effective.”

Think of this as %0, %1, etc in the format string being replaced by the corresponding arguments given after the format string. ‘%%’ is replaced by the ‘%’ character.

The actual Fn::Join call corresponding to the above FnFormat call would be [“”,[“This is a ”,“test”,“. It is 100”,“%”,“ ”,“effective”]]

If no arguments are given, or if a hash is given and the format variable name does not exist in the hash, it is used as a Ref to an existing resource or parameter.

TODO Can we simplyfy this somehow? rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity



99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# File 'lib/cfndsl/jsonable.rb', line 99

def FnFormat(string, *arguments)
  array = []

  if arguments.empty? || (arguments.length == 1 && arguments[0].instance_of?(Hash))
    hash = arguments[0] || {}
    string.scan(/(.*?)(?:%(%|\{([\w:]+)\})|\z)/m) do |x, y, z|
      array.push x if x && !x.empty?

      next unless y

      array.push(y == '%' ? '%' : (hash[z] || hash[z.to_sym] || Ref(z)))
    end
  else
    string.scan(/(.*?)(?:%(%|\d+)|\z)/m) do |x, y|
      array.push x if x && !x.empty?

      next unless y

      array.push(y == '%' ? '%' : arguments[y.to_i])
    end
  end
  Fn.new('Join', ['', array])
end

#FnGetAtt(logical_resource, attribute) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::GetAtt



25
26
27
# File 'lib/cfndsl/jsonable.rb', line 25

def FnGetAtt(logical_resource, attribute)
  Fn.new('GetAtt', [logical_resource, attribute])
end

#FnGetAZs(region) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::GetAZs



30
31
32
# File 'lib/cfndsl/jsonable.rb', line 30

def FnGetAZs(region)
  Fn.new('GetAZs', region)
end

#FnIf(condition_name, true_value, false_value) ⇒ Object

Equivalent to the Cloudformation template built in function Fn::If



53
54
55
# File 'lib/cfndsl/jsonable.rb', line 53

def FnIf(condition_name, true_value, false_value)
  Fn.new('If', [condition_name, true_value, false_value])
end

#FnJoin(string, array) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::Join



35
36
37
# File 'lib/cfndsl/jsonable.rb', line 35

def FnJoin(string, array)
  Fn.new('Join', [string, array])
end

#FnNot(value) ⇒ Object

Equivalent to the Cloudformation template built in function Fn::Not



58
59
60
# File 'lib/cfndsl/jsonable.rb', line 58

def FnNot(value)
  Fn.new('Not', value)
end

#FnOr(array) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::Or



63
64
65
66
67
68
# File 'lib/cfndsl/jsonable.rb', line 63

def FnOr(array)
  if !array || array.count < 2 || array.count > 10
    raise 'The array passed to Fn::Or must have at least 2 elements and no more than 10'
  end
  Fn.new('Or', array)
end

#FnSelect(index, array) ⇒ Object

Equivalent to the CloudFormation template built in function Fn::Select



71
72
73
# File 'lib/cfndsl/jsonable.rb', line 71

def FnSelect(index, array)
  Fn.new('Select', [index, array])
end

#Ref(value) ⇒ Object

Equivalent to the CloudFormation template built in function Ref



10
11
12
# File 'lib/cfndsl/jsonable.rb', line 10

def Ref(value)
  RefDefinition.new(value)
end