bosh-template 2.0.0 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +10 -8
- data/lib/bosh/template/evaluation_context.rb +59 -33
- data/lib/bosh/template/evaluation_link.rb +23 -8
- data/lib/bosh/template/evaluation_link_instance.rb +7 -5
- data/lib/bosh/template/manual_link_dns_encoder.rb +1 -1
- data/lib/bosh/template/renderer.rb +1 -1
- data/lib/bosh/template/test/job.rb +3 -1
- data/lib/bosh/template/test/link.rb +4 -2
- data/lib/bosh/template/test/template.rb +2 -2
- data/lib/bosh/template/version.rb +1 -1
- metadata +6 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 01d5f8a545ae5989e1e3aaf8f44100cb936157c1aab72a852b71d2033ab034ad
|
4
|
+
data.tar.gz: 88ced16b9df4bdadd6e355778ef69128911d9a63c50bf67a2c7abe4ccc3de93e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 924d88d24c9ddf8966abed228557e520835872f2064eb3ce15be7445624a626a09593e97fb45969a94f7e13a08a6d448add538dcdaa889d7f373b6152f05df3c
|
7
|
+
data.tar.gz: 92b8857af18937f7c93928c0a70a5c010603800d3cd4d463f8b363b6de1f9b08215cc55e352fc5e711b32af75aa4033375158c319923b94905c8ae9a7f8afc70
|
data/README.md
CHANGED
@@ -21,19 +21,21 @@ When you create your own release, you can likewise create a tests folder in your
|
|
21
21
|
```ruby
|
22
22
|
let(:job) {release.job('JOB-NAME')} # e.g. 'web-server;
|
23
23
|
let(:template) {job.template('PATH-TO-TEMPLATE')} # e.g. 'config/config-with-nested'
|
24
|
-
let(:manifest)
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
let(:manifest) do
|
25
|
+
{
|
26
|
+
'cert' => '----- BEGIN ... -----',
|
27
|
+
'port' => 42,
|
28
|
+
}
|
29
|
+
end
|
28
30
|
let(:instance) { InstanceSpec.new(name:'instance-name', az: 'az1', bootstrap: true) }
|
29
31
|
let(:link_instance) { InstanceSpec.new(name:'link-instance-name', az: 'az2') }
|
30
|
-
let(:link_properties)
|
31
|
-
|
32
|
-
|
32
|
+
let(:link_properties) do
|
33
|
+
{ 'link-key' => 'link-value' }
|
34
|
+
end
|
33
35
|
let(:link) { Link.new(name:'link-name', instances:[link_instance], properties: link_properties)}
|
34
36
|
|
35
37
|
|
36
38
|
rendered_template = JSON.parse(template.render(manifest, spec: instance, consumes: [link]))
|
37
39
|
```
|
38
40
|
|
39
|
-
And then check that their template rendered as they expected.
|
41
|
+
And then check that their template rendered as they expected.
|
@@ -51,6 +51,13 @@ module Bosh
|
|
51
51
|
@links = spec['links'] || {}
|
52
52
|
end
|
53
53
|
|
54
|
+
def ==(other)
|
55
|
+
public_members = %w[spec raw_properties name index properties]
|
56
|
+
public_members.all? do |member|
|
57
|
+
other.respond_to?(member) && send(member) == other.send(member)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
54
61
|
# @return [Binding] Template binding
|
55
62
|
def get_binding
|
56
63
|
binding.taint
|
@@ -95,34 +102,6 @@ module Bosh
|
|
95
102
|
raise UnknownProperty.new(names)
|
96
103
|
end
|
97
104
|
|
98
|
-
def link(name)
|
99
|
-
link_spec = lookup_property(@links, name)
|
100
|
-
raise UnknownLink.new(name) if link_spec.nil?
|
101
|
-
|
102
|
-
if link_spec.has_key?('instances')
|
103
|
-
link_instances = link_spec['instances'].map do |instance_link_spec|
|
104
|
-
EvaluationLinkInstance.new(instance_link_spec['name'], instance_link_spec['index'], instance_link_spec['id'], instance_link_spec['az'], instance_link_spec['address'], instance_link_spec['properties'], instance_link_spec['bootstrap'])
|
105
|
-
end
|
106
|
-
|
107
|
-
if link_spec.has_key?('address')
|
108
|
-
encoder_to_inject = ManualLinkDnsEncoder.new(link_spec['address'])
|
109
|
-
else
|
110
|
-
encoder_to_inject = @dns_encoder
|
111
|
-
end
|
112
|
-
|
113
|
-
return EvaluationLink.new(
|
114
|
-
link_instances,
|
115
|
-
link_spec['properties'],
|
116
|
-
link_spec['instance_group'],
|
117
|
-
link_spec['default_network'],
|
118
|
-
link_spec['deployment_name'],
|
119
|
-
link_spec['domain'],
|
120
|
-
encoder_to_inject,
|
121
|
-
)
|
122
|
-
end
|
123
|
-
raise UnknownLink.new(name)
|
124
|
-
end
|
125
|
-
|
126
105
|
# Run a block of code if all given properties are defined
|
127
106
|
# @param [Array<String>] names Property names
|
128
107
|
# @yield [Object] property values
|
@@ -137,6 +116,17 @@ module Bosh
|
|
137
116
|
InactiveElseBlock.new
|
138
117
|
end
|
139
118
|
|
119
|
+
def link(name)
|
120
|
+
link_spec = lookup_property(@links, name)
|
121
|
+
raise UnknownLink.new(name) if link_spec.nil?
|
122
|
+
|
123
|
+
if link_spec.has_key?('instances')
|
124
|
+
return create_evaluation_link(link_spec)
|
125
|
+
end
|
126
|
+
|
127
|
+
raise UnknownLink.new(name)
|
128
|
+
end
|
129
|
+
|
140
130
|
# Run a block of code if the link given exists
|
141
131
|
# @param [String] name of the link
|
142
132
|
# @yield [Object] link, which is an array of instances
|
@@ -145,17 +135,53 @@ module Bosh
|
|
145
135
|
if link_spec.nil? || !link_spec.has_key?('instances')
|
146
136
|
return ActiveElseBlock.new(self)
|
147
137
|
else
|
148
|
-
|
149
|
-
EvaluationLinkInstance.new(instance_link_spec['name'], instance_link_spec['index'], instance_link_spec['id'], instance_link_spec['az'], instance_link_spec['address'], instance_link_spec['properties'], instance_link_spec['bootstrap'])
|
150
|
-
end
|
151
|
-
|
152
|
-
yield EvaluationLink.new(link_instances, link_spec['properties'], link_spec['instance_group'], link_spec['default_network'], link_spec['deployment_name'], link_spec['root_domain'], @dns_encoder)
|
138
|
+
yield create_evaluation_link(link_spec)
|
153
139
|
InactiveElseBlock.new
|
154
140
|
end
|
155
141
|
end
|
156
142
|
|
157
143
|
private
|
158
144
|
|
145
|
+
def create_evaluation_link(link_spec)
|
146
|
+
link_instances = link_spec['instances'].map do |instance_link_spec|
|
147
|
+
EvaluationLinkInstance.new(
|
148
|
+
instance_link_spec['name'],
|
149
|
+
instance_link_spec['index'],
|
150
|
+
instance_link_spec['id'],
|
151
|
+
instance_link_spec['az'],
|
152
|
+
instance_link_spec['address'],
|
153
|
+
instance_link_spec['properties'],
|
154
|
+
instance_link_spec['bootstrap'],
|
155
|
+
)
|
156
|
+
end
|
157
|
+
|
158
|
+
if link_spec.has_key?('address')
|
159
|
+
encoder_to_inject = ManualLinkDnsEncoder.new(link_spec['address'])
|
160
|
+
else
|
161
|
+
encoder_to_inject = @dns_encoder
|
162
|
+
end
|
163
|
+
|
164
|
+
group_name = link_spec['instance_group']
|
165
|
+
group_type = 'instance-group'
|
166
|
+
|
167
|
+
if link_spec.fetch('use_link_dns_names', false)
|
168
|
+
group_name = link_spec['group_name']
|
169
|
+
group_type = 'link'
|
170
|
+
end
|
171
|
+
|
172
|
+
EvaluationLink.new(
|
173
|
+
link_instances,
|
174
|
+
link_spec['properties'],
|
175
|
+
group_name,
|
176
|
+
group_type,
|
177
|
+
link_spec['default_network'],
|
178
|
+
link_spec['deployment_name'],
|
179
|
+
link_spec['domain'],
|
180
|
+
encoder_to_inject,
|
181
|
+
link_spec.fetch('use_short_dns_addresses', false),
|
182
|
+
)
|
183
|
+
end
|
184
|
+
|
159
185
|
# @return [Object] Object representation where all hashes are unrolled
|
160
186
|
# into OpenStruct objects. This exists mostly for backward
|
161
187
|
# compatibility, as it doesn't provide good error reporting.
|
@@ -8,14 +8,26 @@ module Bosh
|
|
8
8
|
attr_reader :instances
|
9
9
|
attr_reader :properties
|
10
10
|
|
11
|
-
def initialize(
|
11
|
+
def initialize(
|
12
|
+
instances,
|
13
|
+
properties,
|
14
|
+
group_name,
|
15
|
+
group_type,
|
16
|
+
default_network,
|
17
|
+
deployment_name,
|
18
|
+
root_domain,
|
19
|
+
dns_encoder,
|
20
|
+
use_short_dns
|
21
|
+
)
|
12
22
|
@instances = instances
|
13
23
|
@properties = properties
|
14
|
-
@
|
24
|
+
@group_name = group_name
|
25
|
+
@group_type = group_type
|
15
26
|
@default_network = default_network
|
16
27
|
@deployment_name = deployment_name
|
17
28
|
@root_domain = root_domain
|
18
29
|
@dns_encoder = dns_encoder
|
30
|
+
@use_short_dns = use_short_dns
|
19
31
|
end
|
20
32
|
|
21
33
|
def p(*args)
|
@@ -27,31 +39,34 @@ module Bosh
|
|
27
39
|
end
|
28
40
|
|
29
41
|
return args[1] if args.length == 2
|
30
|
-
|
42
|
+
|
43
|
+
raise UnknownProperty, names
|
31
44
|
end
|
32
45
|
|
33
46
|
def if_p(*names)
|
34
47
|
values = names.map do |name|
|
35
48
|
value = lookup_property(@properties, name)
|
36
49
|
return Bosh::Template::EvaluationContext::ActiveElseBlock.new(self) if value.nil?
|
50
|
+
|
37
51
|
value
|
38
52
|
end
|
39
53
|
|
40
|
-
yield
|
54
|
+
yield(*values)
|
55
|
+
|
41
56
|
Bosh::Template::EvaluationContext::InactiveElseBlock.new
|
42
57
|
end
|
43
58
|
|
44
59
|
def address(criteria = {})
|
45
|
-
raise NotImplementedError
|
60
|
+
raise NotImplementedError, 'link.address requires bosh director' if @dns_encoder.nil?
|
46
61
|
|
47
62
|
full_criteria = criteria.merge(
|
48
|
-
|
63
|
+
group_name: @group_name,
|
64
|
+
group_type: @group_type,
|
49
65
|
default_network: @default_network,
|
50
66
|
deployment_name: @deployment_name,
|
51
67
|
root_domain: @root_domain,
|
52
68
|
)
|
53
|
-
|
54
|
-
@dns_encoder.encode_query(full_criteria)
|
69
|
+
@dns_encoder.encode_query(full_criteria, @use_short_dns)
|
55
70
|
end
|
56
71
|
end
|
57
72
|
end
|
@@ -32,19 +32,21 @@ module Bosh
|
|
32
32
|
end
|
33
33
|
|
34
34
|
return args[1] if args.length == 2
|
35
|
-
|
35
|
+
|
36
|
+
raise UnknownProperty, names
|
36
37
|
end
|
37
38
|
|
38
39
|
def if_p(*names)
|
39
40
|
values = names.map do |name|
|
40
41
|
value = lookup_property(@properties, name)
|
41
|
-
return ActiveElseBlock.new(self) if value.nil?
|
42
|
+
return Bosh::Template::EvaluationContext::ActiveElseBlock.new(self) if value.nil?
|
43
|
+
|
42
44
|
value
|
43
45
|
end
|
44
46
|
|
45
|
-
yield
|
46
|
-
InactiveElseBlock.new
|
47
|
+
yield(*values)
|
48
|
+
Bosh::Template::EvaluationContext::InactiveElseBlock.new
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
50
|
-
end
|
52
|
+
end
|
@@ -12,7 +12,7 @@ module Bosh
|
|
12
12
|
def render(template_name)
|
13
13
|
spec = JSON.parse(@context)
|
14
14
|
evaluation_context = EvaluationContext.new(spec, nil)
|
15
|
-
template = ERB.new(File.read(template_name),
|
15
|
+
template = ERB.new(File.read(template_name), trim_mode: "-")
|
16
16
|
template.result(evaluation_context.get_binding)
|
17
17
|
end
|
18
18
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
1
3
|
module Bosh::Template::Test
|
2
4
|
class Job
|
3
5
|
def initialize(release_path, name)
|
@@ -17,4 +19,4 @@ module Bosh::Template::Test
|
|
17
19
|
raise "Template for rendered path filename not found: #{rendered_file_name}. Possible values are: [#{@templates.values.join(', ')}]"
|
18
20
|
end
|
19
21
|
end
|
20
|
-
end
|
22
|
+
end
|
@@ -1,11 +1,12 @@
|
|
1
1
|
module Bosh::Template::Test
|
2
2
|
class Link
|
3
|
-
attr_reader :instances, :name, :properties
|
3
|
+
attr_reader :instances, :name, :properties, :address
|
4
4
|
|
5
|
-
def initialize(name:, instances: [], properties: {})
|
5
|
+
def initialize(name:, instances: [], properties: {}, address: nil)
|
6
6
|
@instances = instances
|
7
7
|
@name = name
|
8
8
|
@properties = properties
|
9
|
+
@address = address
|
9
10
|
end
|
10
11
|
|
11
12
|
def to_h
|
@@ -13,6 +14,7 @@ module Bosh::Template::Test
|
|
13
14
|
'instances' => instances.map(&:to_h),
|
14
15
|
'name' => name,
|
15
16
|
'properties' => properties,
|
17
|
+
'address' => address,
|
16
18
|
}
|
17
19
|
end
|
18
20
|
end
|
@@ -19,7 +19,7 @@ module Bosh::Template
|
|
19
19
|
|
20
20
|
binding = Bosh::Template::EvaluationContext.new(sanitized_hash_with_spec, nil).get_binding
|
21
21
|
raise "No such file at #{@template_path}" unless File.exist?(@template_path)
|
22
|
-
ERB.new(File.read(@template_path)).result(binding)
|
22
|
+
ERB.new(File.read(@template_path), trim_mode: '-').result(binding)
|
23
23
|
end
|
24
24
|
|
25
25
|
private
|
@@ -74,4 +74,4 @@ module Bosh::Template
|
|
74
74
|
end
|
75
75
|
end
|
76
76
|
end
|
77
|
-
end
|
77
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bosh-template
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pivotal
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 1980-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: semi_semantic
|
@@ -56,7 +56,7 @@ homepage: https://github.com/cloudfoundry/bosh
|
|
56
56
|
licenses:
|
57
57
|
- Apache-2.0
|
58
58
|
metadata: {}
|
59
|
-
post_install_message:
|
59
|
+
post_install_message:
|
60
60
|
rdoc_options: []
|
61
61
|
require_paths:
|
62
62
|
- lib
|
@@ -71,9 +71,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '0'
|
73
73
|
requirements: []
|
74
|
-
|
75
|
-
|
76
|
-
signing_key:
|
74
|
+
rubygems_version: 3.2.26
|
75
|
+
signing_key:
|
77
76
|
specification_version: 4
|
78
77
|
summary: Renders bosh templates
|
79
78
|
test_files: []
|