seiso-import_master 0.0.4 → 0.0.5

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MWFiZGMwNjdkYjNiZmEzMzk1Mzk3MDcyZTZjNTdlNmU2ZWVkN2VmYw==
4
+ OTcxYjBhNzczYjI0YmEyMGRjYjQ5NjVmYWE5NzIzYWQyODhhOTc1Zg==
5
5
  data.tar.gz: !binary |-
6
- OWE5YTljODk0YTk2NTNmMjJjYTY0MzU4MjhiNzk4Y2E4MTI5ZTRlZA==
6
+ ZTgwZTZlY2Y4ZTFiNGZhOGFkMDEzYzRmNjYyOWZhMDE4YWI3OTUwMw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NDg4Mjk5YWFkZTI4MjgxMWZhODU0MTc4MTc5Y2U5NGViODg0ZmI4YjY1MDQw
10
- Nzk2MzczMGIxOTI4ZjM1MzI4NTcwNmY5ZjdkNGYyOGUyZDJjZjdhYTY3Nzky
11
- YzRkNTY3MTRhOWQzMGVmNzg3ZTBjMjg3ZTM4OWY2ZDVmOWE1NmQ=
9
+ M2MwZTkxNzhiYTY0ZWIwOWI4OGJhYTFmODU4MmQ5YjU3ZGFkY2I3Y2NmMWUw
10
+ MmM5OThmY2M1OGY1Yzg1M2U4NTU4ZjcwOGVkYjBmNmNmNGZiNzZlMGQxMDBi
11
+ ZjNiNGNjZTg0OGQzOGU1MTJhY2MyODFlODQ0MmYwMGE5ODJlZTM=
12
12
  data.tar.gz: !binary |-
13
- NzA0ZmUyMWVkMjQzNzI1Y2FmMTk4YWU0ODUxMWI3YWIxMDYxNmFlZjhlZmY0
14
- YjYzYzRjMjQyYzRjZTQ0NDM1ZDBjYjc0NTZlYTE2ZjVhNWI0YWQ1MDgwYWM3
15
- ZWZmMzViZmNjNDcxYjY0MTI5ODRjODEyZjVkZWRhMGMxOWU0ZjU=
13
+ ZGJkOWQyZGNlNmUwNTIxNGE2NDYwYTFmYjFhMDEwNGM4OTBhMGJkM2JjYWY5
14
+ MTczZDA2YTFjY2VhNjIzZTkwMjNiYjIyMjZjZmQzOTZjYjFhNTllOWRmMjM3
15
+ NWJjNmJkMGJmZTA4ODIwYjZkNDAyMGRjM2UzYzYxNzFiNWYzMjc=
@@ -3,13 +3,12 @@ module Seiso
3
3
 
4
4
  # Maps the data master format to the Seiso API format.
5
5
  #
6
- # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
6
+ # Author:: Willie Wheeler
7
7
  # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
8
8
  # License:: Apache 2.0
9
9
  class MasterItemMapper
10
10
 
11
- def initialize(link_factory)
12
- @link_factory = link_factory
11
+ def initialize
13
12
  @mappers = {
14
13
  'data-centers' => data_center_mapper,
15
14
  'environments' => environment_mapper,
@@ -50,12 +49,6 @@ module Seiso
50
49
 
51
50
  private
52
51
 
53
- # Returns a link for the specified item, or nil if key_value is nil.
54
- def link_for(type, key_name, key_value)
55
- # Do nil check here (even though link factory does it too) since the unit test requires this behavior.
56
- return key_value.nil? ? nil : @link_factory.link(type, key_name, key_value)
57
- end
58
-
59
52
  # Returns a mapper lambda for the specified type.
60
53
  def mapper_for(type)
61
54
  mapper = @mappers[type]
@@ -63,18 +56,16 @@ module Seiso
63
56
  mapper
64
57
  end
65
58
 
66
- # Returns a mapper lambda.
67
59
  def data_center_mapper
68
60
  ->(dc) {
69
61
  {
70
62
  'key' => dc['key'],
71
63
  'name' => dc['name'],
72
- 'region' => link_for('regions', 'key', dc['region'])
64
+ 'region' => { 'key' => dc['region'] }
73
65
  }
74
66
  }
75
67
  end
76
68
 
77
- # Returns a mapper lambda.
78
69
  def environment_mapper
79
70
  ->(e) {
80
71
  {
@@ -89,18 +80,16 @@ module Seiso
89
80
  }
90
81
  end
91
82
 
92
- # Returns a mapper lambda.
93
83
  def health_status_mapper
94
84
  ->(hs) {
95
85
  {
96
86
  'key' => hs['key'],
97
87
  'name' => hs['name'],
98
- 'statusType' => link_for('status-types', 'key', hs['statusType'])
88
+ 'statusType' => { 'key' => hs['statusType'] }
99
89
  }
100
90
  }
101
91
  end
102
92
 
103
- # Returns a mapper lambda.
104
93
  def infrastructure_provider_mapper
105
94
  ->(ip) {
106
95
  {
@@ -110,32 +99,33 @@ module Seiso
110
99
  }
111
100
  end
112
101
 
113
- # Returns a mapper lambda.
114
102
  def ip_address_role_mapper
115
103
  # Suppressing IP addresses since we don't import those from master files.
116
104
  ->(r) {
117
105
  {
118
- 'serviceInstance' => link_for('service-instances', 'key', r['serviceInstance']),
106
+ 'serviceInstance' => { 'key' => r['serviceInstance'] },
119
107
  'name' => r['name'],
120
108
  'description' => r['description']
121
109
  }
122
110
  }
123
111
  end
124
112
 
125
- # Returns a mapper lambda.
126
113
  def load_balancer_mapper
127
114
  ->(lb) {
128
- {
115
+ seiso_lb = {
129
116
  'name' => lb['name'],
130
117
  'type' => lb['type'],
131
118
  'ipAddress' => lb['ipAddress'],
132
- 'dataCenter' => link_for('data-centers', 'key', lb['dataCenter']),
133
119
  'apiUrl' => lb['apiUrl']
134
120
  }
121
+
122
+ dc = lb['dataCenter']
123
+ seiso_lb['dataCenter'] = { 'key' => dc } unless dc.nil?
124
+
125
+ seiso_lb
135
126
  }
136
127
  end
137
128
 
138
- # Returns a mapper lambda.
139
129
  def machine_mapper
140
130
  ->(m) {
141
131
  {
@@ -151,88 +141,75 @@ module Seiso
151
141
  }
152
142
  end
153
143
 
154
- # Returns a mapper lambda.
155
144
  def node_mapper
156
145
  ->(n) {
157
- service_instance = n['serviceInstance']
158
- ip_addresses = n['ipAddresses']
159
- si_ref = link_for('service-instances', 'key', service_instance)
160
-
161
- result = {
146
+ seiso_node = {
162
147
  'name' => n['name'],
163
- 'serviceInstance' => si_ref,
164
- 'machine' => link_for('machines', 'name', n['machine'])
148
+ 'serviceInstance' => { 'key' => n['serviceInstance'] }
165
149
  }
166
-
167
- =begin
168
- if ip_addresses
169
- result['ipAddresses'] = []
170
- ip_addresses.each do |ip|
171
- role_name = ip['ipAddressRole']
172
- result['ipAddresses'] << {
173
- 'ipAddressRole' => @link_factory.ip_address_role_link(service_instance, role_name),
174
- 'ipAddress' => ip['ipAddress']
175
- }
176
- end
177
- end
178
- =end
179
-
180
- result
150
+
151
+ machine = n['machine']
152
+ seiso_node['machine'] = { 'name' => machine } unless machine.nil?
153
+
154
+ seiso_node
181
155
  }
182
156
  end
183
157
 
184
- # Returns a mapper lambda.
185
158
  def node_ip_address_mapper
186
159
  # Currently suppressing rotation status and endpoints since we don't import those from master files
187
160
  ->(nip) {
188
161
  {
189
- 'node' => link_for('nodes', 'name', nip['node']),
190
- 'ipAddressRole' => link_for('ip-address-roles', 'name', nip['ipAddressRole']),
162
+ 'node' => { 'name' => nip['node'] },
163
+ 'ipAddressRole' => { 'name' => nip['ipAddressRole'] },
191
164
  'ipAddress' => nip['ipAddress']
192
165
  }
193
166
  }
194
167
  end
195
168
 
196
- # Returns a mapper lambda.
197
169
  def region_mapper
198
170
  ->(r) {
199
171
  {
200
172
  'key' => r['key'],
201
173
  'name' => r['name'],
202
174
  'regionKey' => r['regionKey'],
203
- 'infrastructureProvider' => link_for('infrastructure-providers', 'key', r['infrastructureProvider'])
175
+ 'infrastructureProvider' => { 'key' => r['infrastructureProvider'] }
204
176
  }
205
177
  }
206
178
  end
207
179
 
208
- # Returns a mapper lambda.
209
180
  def rotation_status_mapper
210
181
  ->(rs) {
211
182
  {
212
183
  'key' => rs['key'],
213
184
  'name' => rs['name'],
214
- 'statusType' => link_for('status-types', 'key', rs['statusType'])
185
+ 'statusType' => { 'key' => rs['statusType'] }
215
186
  }
216
187
  }
217
188
  end
218
189
 
219
- # Returns a mapper lambda.
220
190
  def service_mapper
221
191
  ->(s) {
222
- {
192
+ seiso_service = {
223
193
  'key' => s['key'],
224
194
  'name' => s['name'],
225
195
  'description' => s['description'],
226
- 'group' => link_for('service-groups', 'key', s['group']),
227
- 'type' => link_for('service-types', 'key', s['type']),
228
- 'owner' => link_for('people', 'username', s['owner']),
229
196
  'platform' => s['platform'],
230
197
  'scmRepository' => s['scmRepository']
231
198
  }
199
+
200
+ group = s['group']
201
+ seiso_service['group'] = { 'key' => group } unless group.nil?
202
+
203
+ type = s['type']
204
+ seiso_service['type'] = { 'key' => type } unless type.nil?
205
+
206
+ owner = s['owner']
207
+ seiso_service['owner'] = { 'username' => owner } unless owner.nil?
208
+
209
+ seiso_service
232
210
  }
233
211
  end
234
212
 
235
- # Returns a mapper lambda.
236
213
  def service_group_mapper
237
214
  ->(sg) {
238
215
  {
@@ -242,20 +219,17 @@ module Seiso
242
219
  }
243
220
  end
244
221
 
245
- # Returns a mapper lambda.
246
222
  def service_instance_mapper
247
223
  ->(si) {
248
224
  key = si['key']
249
225
  ip_address_roles = si['ipAddressRoles']
250
226
  ports = si['ports']
251
227
 
252
- result = {
228
+ seiso_si = {
253
229
  'key' => key,
254
- 'service' => link_for('services', 'key', si['service']),
255
- 'environment' => link_for('environments', 'key', si['environment']),
256
- 'dataCenter' => link_for('data-centers', 'key', si['dataCenter']),
230
+ 'service' => { 'key' => si['service'] },
231
+ 'environment' => { 'key' => si['environment'] },
257
232
  'loadBalanced' => si['loadBalanced'],
258
- 'loadBalancer' => link_for('loadBalancer', 'name', si['loadBalancer']),
259
233
  'minCapacityDeploy' => si['minCapacityDeploy'],
260
234
  'minCapacityOps' => si['minCapacityOps'],
261
235
 
@@ -265,42 +239,22 @@ module Seiso
265
239
  # FIXME Deprecated. This is the old name for the minCapacityOps field.
266
240
  'requiredCapacity' => si['minCapacityOps']
267
241
  }
242
+
243
+ data_center = si['dataCenter']
244
+ seiso_si['dataCenter'] = { 'key' => data_center } unless data_center.nil?
268
245
 
269
- =begin
270
- if ip_address_roles
271
- result['ipAddressRoles'] = []
272
- ip_address_roles.each do |role|
273
- result['ipAddressRoles'] << {
274
- 'serviceInstance' => link_for('service-instances', 'key', key),
275
- 'name' => role['name'],
276
- 'description' => role['description']
277
- }
278
- end
279
- end
246
+ load_balancer = si['loadBalancer']
247
+ seiso_si['loadBalancer'] = { 'name' => load_balancer } unless load_balancer.nil?
280
248
 
281
- if ports
282
- result['ports'] = []
283
- ports.each do |port|
284
- result['ports'] << {
285
- 'serviceInstance' => link_for('service-instances', 'key', key),
286
- 'number' => port['number'],
287
- 'protocol' => port['protocol'],
288
- 'description' => port['description']
289
- }
290
- end
291
- end
292
- =end
293
-
294
- result
249
+ seiso_si
295
250
  }
296
251
  end
297
252
 
298
- # Returns a mapper lambda.
299
253
  def service_instance_port_mapper
300
254
  # Suppressing endpoints since we don't import those from master files.
301
255
  ->(p) {
302
256
  {
303
- 'serviceInstance' => link_for('service-instances', 'key', p['serviceInstance']),
257
+ 'serviceInstance' => { 'key' => p['serviceInstance'] },
304
258
  'number' => p['number'],
305
259
  'protocol' => p['protocol'],
306
260
  'description' => p['description']
@@ -308,7 +262,6 @@ module Seiso
308
262
  }
309
263
  end
310
264
 
311
- # Returns a mapper lambda.
312
265
  def service_type_mapper
313
266
  ->(st) {
314
267
  {
@@ -318,7 +271,6 @@ module Seiso
318
271
  }
319
272
  end
320
273
 
321
- # Returns a mapper lambda.
322
274
  def status_type_mapper
323
275
  ->(st) {
324
276
  {
@@ -1,9 +1,7 @@
1
1
  require "json"
2
2
  require "seiso/connector"
3
3
  require "yaml"
4
- require_relative "import_master/link_factory"
5
4
  require_relative "import_master/master_item_mapper"
6
- require_relative "import_master/uri_factory"
7
5
 
8
6
  # Seiso namespace module
9
7
  module Seiso
@@ -17,19 +15,26 @@ module Seiso
17
15
 
18
16
  # Initializes the importer with a Seiso connector.
19
17
  def initialize(seiso_settings)
20
- @seiso = Seiso::Connector.new seiso_settings
21
-
22
- # TODO Inject dependencies?
23
- @uri_factory = Seiso::ImportMaster::UriFactory.new @seiso.base_uri
24
- @link_factory = Seiso::ImportMaster::LinkFactory.new @uri_factory
25
- @mapper = Seiso::ImportMaster::MasterItemMapper.new @link_factory
26
-
18
+ @seiso = Seiso::Connector.new(seiso_settings)
19
+ @mapper = Seiso::ImportMaster::MasterItemMapper.new
27
20
  @loaders = {
28
21
  'json' => ->(file) { JSON.parse(IO.read(file)) },
29
22
  'yaml' => ->(file) { YAML.load_file file }
30
23
  }
31
24
  end
32
25
 
26
+ def seiso
27
+ @seiso
28
+ end
29
+
30
+ def mapper
31
+ @mapper
32
+ end
33
+
34
+ def loaders
35
+ @loaders
36
+ end
37
+
33
38
  # Imports a list of master files in order. Legal formats are 'json' (default) and 'yaml'.
34
39
  def import_files(files, format = 'json')
35
40
  loop do
@@ -42,7 +47,7 @@ module Seiso
42
47
 
43
48
  # Imports a data master file. Legal formats are 'json' (default) and 'yaml'.
44
49
  def import_file(file, format = 'json')
45
- loader = @loaders[format]
50
+ loader = loaders[format]
46
51
  raise ArgumentError, "Illegal format: #{format}" if loader.nil?
47
52
  doc = loader.call(file)
48
53
  import_doc doc
@@ -66,8 +71,8 @@ module Seiso
66
71
  private
67
72
 
68
73
  def do_import_items(type, items)
69
- seiso_items = @mapper.map_all(type, items)
70
- @seiso.put_items(type, seiso_items)
74
+ seiso_items = mapper.map_all(type, items)
75
+ seiso.post_items(type, seiso_items)
71
76
  end
72
77
 
73
78
  # Imports the nodes, along with their associated IP addresses.
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "seiso-import_master"
7
- spec.version = "0.0.4"
7
+ spec.version = "0.0.5"
8
8
  spec.authors = ["Willie Wheeler"]
9
9
  spec.email = ["wwheeler@expedia.com"]
10
10
  spec.summary = "Imports Seiso data master files into Seiso."
@@ -20,5 +20,5 @@ Gem::Specification.new do |spec|
20
20
  spec.add_development_dependency "bundler", "~> 1.7"
21
21
  spec.add_development_dependency "rake", "~> 10.0"
22
22
 
23
- spec.add_runtime_dependency "seiso-connector", "~> 0.0.1"
23
+ spec.add_runtime_dependency "seiso-connector", "~> 0.1.0"
24
24
  end
@@ -8,12 +8,7 @@ require 'seiso/import_master/master_item_mapper'
8
8
  class TestMasterItemMapper < MiniTest::Unit::TestCase
9
9
 
10
10
  def setup
11
- link_factory = Class.new do
12
- def self.link(type, key_name, key_value)
13
- { "foo" => "bar" }
14
- end
15
- end
16
- @mapper = Seiso::ImportMaster::MasterItemMapper.new link_factory
11
+ @mapper = Seiso::ImportMaster::MasterItemMapper.new
17
12
  end
18
13
 
19
14
  def test_map_all_illegal_type
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: seiso-import_master
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willie Wheeler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-24 00:00:00.000000000 Z
11
+ date: 2015-01-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -44,14 +44,14 @@ dependencies:
44
44
  requirements:
45
45
  - - ~>
46
46
  - !ruby/object:Gem::Version
47
- version: 0.0.1
47
+ version: 0.1.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ~>
53
53
  - !ruby/object:Gem::Version
54
- version: 0.0.1
54
+ version: 0.1.0
55
55
  description: Supports self-service data management via version control, e.g. by using
56
56
  GitHub.
57
57
  email:
@@ -69,9 +69,7 @@ files:
69
69
  - Rakefile
70
70
  - bin/seiso-import-master
71
71
  - lib/seiso/import_master.rb
72
- - lib/seiso/import_master/link_factory.rb
73
72
  - lib/seiso/import_master/master_item_mapper.rb
74
- - lib/seiso/import_master/uri_factory.rb
75
73
  - refresh
76
74
  - sample_conf/seiso.yml.sample
77
75
  - seiso-import_master.gemspec
@@ -1,48 +0,0 @@
1
- module Seiso
2
- class ImportMaster
3
-
4
- # Link factory, supporting HATEOAS principle.
5
- #
6
- # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
7
- # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
8
- # License:: Apache 2.0
9
- class LinkFactory
10
-
11
- # Creates a new link factory, injecting the URI factory.
12
- # - uri_factory: URI factory
13
- def initialize(uri_factory)
14
- @uri_factory = uri_factory
15
- end
16
-
17
- # Creates a new link. Only for link involving a single key, at least for now.
18
- # - type: Item type (e.g., services, service-instances, data-centers, etc.)
19
- # - key_name: name of the property the item type uses as a unique key
20
- # - key_value: key value
21
- def link(type, key_name, key_value)
22
- return nil if key_value.nil?
23
-
24
- {
25
- '_self' => @uri_factory.item_uri(type, key_value),
26
-
27
- # FIXME Deprecated. To replace with _self URI above.
28
- key_name => key_value
29
- }
30
- end
31
-
32
- # Creates a new IP address role link.
33
- # - service_instance_key: Service instance key
34
- # - role_name: IP address role name
35
- def ip_address_role_link(service_instance_key, role_name)
36
- {
37
- '_self' => @uri_factory.item_uri('ip-address-roles', service_instance_key, role_name),
38
-
39
- # FIXME These are deprecated. To replace with _self URI above.
40
- 'serviceInstance' => {
41
- 'key' => service_instance_key
42
- },
43
- 'name' => role_name
44
- }
45
- end
46
- end
47
- end
48
- end
@@ -1,48 +0,0 @@
1
- module Seiso
2
- class ImportMaster
3
-
4
- # URI factory.
5
- #
6
- # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
7
- # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
8
- # License:: Apache 2.0
9
- class UriFactory
10
-
11
- # Creates a new URI factory for the given base URI.
12
- # - base_uri: Base URI (e.g., http://seiso.example.com)
13
- def initialize(base_uri)
14
- @base_uri = base_uri
15
- @v1_uri = "#{@base_uri}/v1"
16
- end
17
-
18
- # Returns the URI for the given item type.
19
- # - type: Item type (e.g., services, service-instances, ip-address-roles, etc.)
20
- def type_uri(type)
21
- if type == 'ip-address-roles'
22
- raise ArgumentError, "ip-address-roles is not a top-level type"
23
- else
24
- return v1_uri type
25
- end
26
- end
27
-
28
- # Returns the URI for the given item.
29
- # - type: Item type
30
- # - keys: One or more item keys, which collectively uniquely identify the item within the type
31
- def item_uri(type, *keys)
32
- if type == 'ip-address-roles'
33
- return v1_uri "service-instances/#{keys[0]}/ip-address-roles/#{keys[1]}"
34
- else
35
- return v1_uri "#{type}/#{keys[0]}"
36
- end
37
- end
38
-
39
- private
40
-
41
- # Resolves a relative path to the full URI.
42
- # - path: relative path
43
- def v1_uri(path)
44
- "#{@base_uri}/v1/#{path}"
45
- end
46
- end
47
- end
48
- end