bosh-template 2.0.0 → 2.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []