seiso-import_master 0.0.4 → 0.0.5

Sign up to get free protection for your applications and to get access to all the features.
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