Module: CfnDsl::Functions

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

Overview

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

Constant Summary collapse

FN_SUB_SCANNER =

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

/\$\{([^!}]*)\}/.freeze

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



108
109
110
# File 'lib/cfndsl/jsonable.rb', line 108

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

#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], [logical_resource])
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], [], [condition_name])
end

#FnImportValue(value) ⇒ Object

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



103
104
105
# File 'lib/cfndsl/jsonable.rb', line 103

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

Raises:

  • (ArgumentError)


87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/cfndsl/jsonable.rb', line 87

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

  refs = string.scan(FN_SUB_SCANNER).map(&:first).map { |r| r.split('.', 2).first }

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

    refs -= substitutions.keys.map(&:to_s)
    Fn.new('Sub', [string, substitutions], refs)
  else
    Fn.new('Sub', string, refs)
  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