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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 2378abe7a780eedfde0662cecff0c3431262493b
4
- data.tar.gz: 0d007a700bb85ba2bef9a076e63ae45a29dd447b
2
+ SHA256:
3
+ metadata.gz: 01d5f8a545ae5989e1e3aaf8f44100cb936157c1aab72a852b71d2033ab034ad
4
+ data.tar.gz: 88ced16b9df4bdadd6e355778ef69128911d9a63c50bf67a2c7abe4ccc3de93e
5
5
  SHA512:
6
- metadata.gz: f96497f3c1d86cd259ef7fb1d1b70f02c5196553660d39c95be450c431e7eebbe076fc246ef409fd5bd056d1611203f07bbef7284625279848334c593abb689d
7
- data.tar.gz: e3b70178abec3413f4dbd0008d8883534860a05f88011b0201ac20cbe996428219e4d9648c309c89b21e3097a22e8caa92c60771b9369eb5ef37f03f1cc8f508
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
- 'cert' => '----- BEGIN ... -----',
26
- 'port' => 42,
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
- 'link-key' => 'link-value',
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
- link_instances = link_spec['instances'].map do |instance_link_spec|
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(instances, properties, instance_group, default_network, deployment_name, root_domain, dns_encoder)
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
- @instance_group = instance_group
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
- raise UnknownProperty.new(names)
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 *values
54
+ yield(*values)
55
+
41
56
  Bosh::Template::EvaluationContext::InactiveElseBlock.new
42
57
  end
43
58
 
44
59
  def address(criteria = {})
45
- raise NotImplementedError.new('link.address requires bosh director') if @dns_encoder.nil?
60
+ raise NotImplementedError, 'link.address requires bosh director' if @dns_encoder.nil?
46
61
 
47
62
  full_criteria = criteria.merge(
48
- instance_group: @instance_group,
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
- raise UnknownProperty.new(names)
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 *values
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
@@ -5,7 +5,7 @@ module Bosh
5
5
  @manual_link_address = manual_link_address
6
6
  end
7
7
 
8
- def encode_query(_)
8
+ def encode_query(*_)
9
9
  @manual_link_address
10
10
  end
11
11
  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), safe_level = nil, trim_mode = "-")
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
@@ -1,5 +1,5 @@
1
1
  module Bosh
2
2
  module Template
3
- VERSION = '2.0.0'
3
+ VERSION = '2.3.0'
4
4
  end
5
5
  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.0.0
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: 2017-08-31 00:00:00.000000000 Z
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
- rubyforge_project:
75
- rubygems_version: 2.5.1
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: []