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



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

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

  Fn.new('And', array)
end

#FnBase64(value) ⇒ Object

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



17
18
19
# File 'lib/cfndsl/jsonable.rb', line 17

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

#FnCidr(ipblock, count, sizemask) ⇒ Object

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



152
153
154
# File 'lib/cfndsl/jsonable.rb', line 152

def FnCidr(ipblock, count, sizemask)
  Fn.new('Cidr', [ipblock, count, sizemask])
end

#FnEquals(value1, value2) ⇒ Object

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



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

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



22
23
24
# File 'lib/cfndsl/jsonable.rb', line 22

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

#FnFormat(string, *arguments) ⇒ Object

DEPRECATED 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.

rubocop:disable Metrics/AbcSize, Metrics/PerceivedComplexity, Metrics/CyclomaticComplexity



126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
# File 'lib/cfndsl/jsonable.rb', line 126

def FnFormat(string, *arguments)
  warn '`FnFormat` is deprecated and will be removed a future release. Use `FnSub` instead'
  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



27
28
29
# File 'lib/cfndsl/jsonable.rb', line 27

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



32
33
34
# File 'lib/cfndsl/jsonable.rb', line 32

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



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

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

#FnImportValue(value) ⇒ Object

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



98
99
100
# File 'lib/cfndsl/jsonable.rb', line 98

def FnImportValue(value)
  Fn.new('ImportValue', value)
end

#FnJoin(string, array) ⇒ Object

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



37
38
39
# File 'lib/cfndsl/jsonable.rb', line 37

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

#FnNot(value) ⇒ Object

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



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

def FnNot(value)
  if value.is_a?(Array)
    Fn.new('Not', value)
  else
    Fn.new('Not', [value])
  end
end

#FnOr(array) ⇒ Object

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



73
74
75
76
77
# File 'lib/cfndsl/jsonable.rb', line 73

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

  Fn.new('Or', array)
end

#FnSelect(index, array) ⇒ Object

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



80
81
82
# File 'lib/cfndsl/jsonable.rb', line 80

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

#FnSplit(string, array) ⇒ Object

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



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

def FnSplit(string, array)
  Fn.new('Split', [string, array])
end

#FnSub(string, substitutions = nil) ⇒ Object

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

Raises:

  • (ArgumentError)


85
86
87
88
89
90
91
92
93
94
95
# File 'lib/cfndsl/jsonable.rb', line 85

def FnSub(string, substitutions = nil)
  raise ArgumentError, 'The first argument passed to Fn::Sub must be a string' unless string.is_a? String

  if substitutions
    raise ArgumentError, 'The second argument passed to Fn::Sub must be a Hash' unless substitutions.is_a? Hash

    Fn.new('Sub', [string, substitutions])
  else
    Fn.new('Sub', string)
  end
end

#Ref(value) ⇒ Object

Equivalent to the CloudFormation template built in function Ref



12
13
14
# File 'lib/cfndsl/jsonable.rb', line 12

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