seiso-import_master 0.0.3 → 0.0.4

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
- MmNhOGJjY2IwMzU3ZWU5NzFkZTJmZDZmNGMyODJhOWI1YjliMTQwMA==
4
+ MWFiZGMwNjdkYjNiZmEzMzk1Mzk3MDcyZTZjNTdlNmU2ZWVkN2VmYw==
5
5
  data.tar.gz: !binary |-
6
- N2ZiY2ExZGMzYTlhZmJkNWQwOWM2ODIwMDE1OThjMGI0N2UxMWNmNw==
6
+ OWE5YTljODk0YTk2NTNmMjJjYTY0MzU4MjhiNzk4Y2E4MTI5ZTRlZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZmJhNzRmOWI4ZTkxMDRmYzA5YzUzYzk3ZWYwN2FhMGY1ZGYzYTc1ZTk4MTY1
10
- YmFiYWIyNTM4NzBjZjIzZDhiOTc2ZDYyOTdjYzIwMWJkYjliODljNzdjOTM5
11
- N2IxODAyZTlhN2MzNTlmMjQ4YzEwOWQxYmZiMjg3MjEwZGQxNTQ=
9
+ NDg4Mjk5YWFkZTI4MjgxMWZhODU0MTc4MTc5Y2U5NGViODg0ZmI4YjY1MDQw
10
+ Nzk2MzczMGIxOTI4ZjM1MzI4NTcwNmY5ZjdkNGYyOGUyZDJjZjdhYTY3Nzky
11
+ YzRkNTY3MTRhOWQzMGVmNzg3ZTBjMjg3ZTM4OWY2ZDVmOWE1NmQ=
12
12
  data.tar.gz: !binary |-
13
- MmMxOTc2MTYzYmY0NjE3NWJlYWYxZThjNDhiOTk1NDFmMDY1NTdmNTIwNWVl
14
- ODVjMzMwOTQxNDIyY2JkYjhiZTk0NTZhNDgzY2QxN2UzNmI4ODgzNmVlYjll
15
- M2I0OWU2NmI0OTEyMzNjZGI4MDRhZjVhMTI1YWE4NGJiMGI5Njg=
13
+ NzA0ZmUyMWVkMjQzNzI1Y2FmMTk4YWU0ODUxMWI3YWIxMDYxNmFlZjhlZmY0
14
+ YjYzYzRjMjQyYzRjZTQ0NDM1ZDBjYjc0NTZlYTE2ZjVhNWI0YWQ1MDgwYWM3
15
+ ZWZmMzViZmNjNDcxYjY0MTI5ODRjODEyZjVkZWRhMGMxOWU0ZjU=
data/.gitignore CHANGED
@@ -8,6 +8,7 @@
8
8
  /spec/reports/
9
9
  /tmp/
10
10
  *.bundle
11
+ *.gem
11
12
  *.so
12
13
  *.o
13
14
  *.a
@@ -8,7 +8,7 @@ require 'yaml'
8
8
 
9
9
  # Imports Seiso data master files into Seiso.
10
10
  #
11
- # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
11
+ # Author:: Willie Wheeler
12
12
  # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
13
13
  # License:: Apache 2.0
14
14
 
@@ -18,18 +18,34 @@ option_parser = OptionParser.new do |opts|
18
18
  opts.banner = "Import one or more Seiso data master files into Seiso.
19
19
 
20
20
  Usage: #{executable_name} [options] master_file ..."
21
+ options[:seiso_settings_path] = "#{Dir.home}/.seiso-importers/seiso.yml"
22
+ opts.on("--seiso SEISO_SETTINGS_PATH", "Path to Seiso API settings file") do |path|
23
+ options[:seiso_settings_path] = path
24
+ end
25
+
26
+ options[:format] = 'json'
21
27
  opts.on("-f FORMAT", "--format FORMAT", "Document format, either 'json' (default) or 'yaml'") do |format|
22
28
  options[:format] = format
23
29
  end
30
+
31
+ opts.on("-h", "--help", "Display this screen") do
32
+ puts opts
33
+ exit
34
+ end
24
35
  end
25
36
 
26
- option_parser.parse!
37
+ begin
38
+ option_parser.parse!
39
+ rescue OptionParser::InvalidOption => e
40
+ abort "Invalid option.\n\n#{option_parser.help}"
41
+ end
42
+
43
+ puts "Using: #{options[:seiso_settings_path]}"
44
+ puts "Using: format=#{options[:format]}"
45
+
27
46
  files = ARGV
28
47
  abort "Error: You must supply a master file.\n\n#{option_parser.help}" if files.empty?
29
48
 
30
- format = options[:format] || 'json'
31
- puts "Using #{format} format"
32
-
33
- settings = YAML.load_file "#{Dir.home}/.seiso-importers/seiso.yml"
49
+ settings = YAML.load_file(options[:seiso_settings_path])
34
50
  importer = Seiso::ImportMaster.new settings
35
- importer.import_files(files, format)
51
+ importer.import_files(files, options[:format])
@@ -13,7 +13,6 @@ module Seiso
13
13
  # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
14
14
  # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
15
15
  # License:: Apache 2.0
16
-
17
16
  class ImportMaster
18
17
 
19
18
  # Initializes the importer with a Seiso connector.
@@ -21,9 +20,9 @@ module Seiso
21
20
  @seiso = Seiso::Connector.new seiso_settings
22
21
 
23
22
  # TODO Inject dependencies?
24
- @uri_factory = Seiso::UriFactory.new @seiso.base_uri
25
- @link_factory = Seiso::LinkFactory.new @uri_factory
26
- @mapper = Seiso::MasterItemMapper.new @link_factory
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
27
26
 
28
27
  @loaders = {
29
28
  'json' => ->(file) { JSON.parse(IO.read(file)) },
@@ -1,48 +1,48 @@
1
- # Seiso namespace module
2
1
  module Seiso
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
-
10
- class LinkFactory
11
-
12
- # Creates a new link factory, injecting the URI factory.
13
- # - uri_factory: URI factory
14
- def initialize(uri_factory)
15
- @uri_factory = uri_factory
16
- end
2
+ class ImportMaster
17
3
 
18
- # Creates a new link. Only for link involving a single key, at least for now.
19
- # - type: Item type (e.g., services, service-instances, data-centers, etc.)
20
- # - key_name: name of the property the item type uses as a unique key
21
- # - key_value: key value
22
- def link(type, key_name, key_value)
23
- return nil if key_value.nil?
24
-
25
- {
26
- '_self' => @uri_factory.item_uri(type, key_value),
27
-
28
- # FIXME Deprecated. To replace with _self URI above.
29
- key_name => key_value
30
- }
31
- end
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
32
10
 
33
- # Creates a new IP address role link.
34
- # - service_instance_key: Service instance key
35
- # - role_name: IP address role name
36
- def ip_address_role_link(service_instance_key, role_name)
37
- {
38
- '_self' => @uri_factory.item_uri('ip-address-roles', service_instance_key, role_name),
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?
39
23
 
40
- # FIXME These are deprecated. To replace with _self URI above.
41
- 'serviceInstance' => {
42
- 'key' => service_instance_key
43
- },
44
- 'name' => role_name
45
- }
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
46
  end
47
47
  end
48
48
  end
@@ -1,170 +1,169 @@
1
- # Seiso namespace module
2
1
  module Seiso
2
+ class ImportMaster
3
3
 
4
- # Maps the data master format to the Seiso API format.
5
- #
6
- # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
7
- # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
8
- # License:: Apache 2.0
9
-
10
- class MasterItemMapper
4
+ # Maps the data master format to the Seiso API format.
5
+ #
6
+ # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
7
+ # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
8
+ # License:: Apache 2.0
9
+ class MasterItemMapper
11
10
 
12
- def initialize(link_factory)
13
- @link_factory = link_factory
14
- @mappers = {
15
- 'data-centers' => data_center_mapper,
16
- 'environments' => environment_mapper,
17
- 'health-statuses' => health_status_mapper,
18
- 'infrastructure-providers' => infrastructure_provider_mapper,
19
- 'ip-address-roles' => ip_address_role_mapper,
20
- 'load-balancers' => load_balancer_mapper,
21
- 'machines' => machine_mapper,
22
- 'nodes' => node_mapper,
23
- 'node-ip-addresses' => node_ip_address_mapper,
24
- 'regions' => region_mapper,
25
- 'rotation-statuses' => rotation_status_mapper,
26
- 'services' => service_mapper,
27
- 'service-groups' => service_group_mapper,
28
- 'service-instances' => service_instance_mapper,
29
- 'service-instance-ports' => service_instance_port_mapper,
30
- 'service-types' => service_type_mapper,
31
- 'status-types' => status_type_mapper
32
- }
33
- end
34
-
35
- # Maps a list of items.
36
- # - type: Item type
37
- # - items: Item list
38
- def map_all(type, items)
39
- mapper = mapper_for type
40
- result = []
41
- items.each { |i| result << mapper.call(i) }
42
- result
43
- end
44
-
45
- # Maps a single item.
46
- # - type: Item type
47
- # - item: Item
48
- def map_one(type, item)
49
- mapper_for(type).call item
50
- end
51
-
52
- private
53
-
54
- # Returns a link for the specified item, or nil if key_value is nil.
55
- def link_for(type, key_name, key_value)
56
- # Do nil check here (even though link factory does it too) since the unit test requires this behavior.
57
- return key_value.nil? ? nil : @link_factory.link(type, key_name, key_value)
58
- end
59
-
60
- # Returns a mapper lambda for the specified type.
61
- def mapper_for(type)
62
- mapper = @mappers[type]
63
- raise ArgumentError, "Unknown type: #{type}" if mapper.nil?
64
- mapper
65
- end
66
-
67
- # Returns a mapper lambda.
68
- def data_center_mapper
69
- ->(dc) {
70
- {
71
- 'key' => dc['key'],
72
- 'name' => dc['name'],
73
- 'region' => link_for('regions', 'key', dc['region'])
11
+ def initialize(link_factory)
12
+ @link_factory = link_factory
13
+ @mappers = {
14
+ 'data-centers' => data_center_mapper,
15
+ 'environments' => environment_mapper,
16
+ 'health-statuses' => health_status_mapper,
17
+ 'infrastructure-providers' => infrastructure_provider_mapper,
18
+ 'ip-address-roles' => ip_address_role_mapper,
19
+ 'load-balancers' => load_balancer_mapper,
20
+ 'machines' => machine_mapper,
21
+ 'nodes' => node_mapper,
22
+ 'node-ip-addresses' => node_ip_address_mapper,
23
+ 'regions' => region_mapper,
24
+ 'rotation-statuses' => rotation_status_mapper,
25
+ 'services' => service_mapper,
26
+ 'service-groups' => service_group_mapper,
27
+ 'service-instances' => service_instance_mapper,
28
+ 'service-instance-ports' => service_instance_port_mapper,
29
+ 'service-types' => service_type_mapper,
30
+ 'status-types' => status_type_mapper
74
31
  }
75
- }
76
- end
77
-
78
- # Returns a mapper lambda.
79
- def environment_mapper
80
- ->(e) {
81
- {
82
- 'key' => e['key'],
83
- 'name' => e['name'],
84
- 'aka' => e['aka'],
85
- 'description' => e['description'],
86
-
87
- # FIXME Deprecated, don't use.
88
- 'rank' => e['rank']
32
+ end
33
+
34
+ # Maps a list of items.
35
+ # - type: Item type
36
+ # - items: Item list
37
+ def map_all(type, items)
38
+ mapper = mapper_for type
39
+ result = []
40
+ items.each { |i| result << mapper.call(i) }
41
+ result
42
+ end
43
+
44
+ # Maps a single item.
45
+ # - type: Item type
46
+ # - item: Item
47
+ def map_one(type, item)
48
+ mapper_for(type).call item
49
+ end
50
+
51
+ private
52
+
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
+ # Returns a mapper lambda for the specified type.
60
+ def mapper_for(type)
61
+ mapper = @mappers[type]
62
+ raise ArgumentError, "Unknown type: #{type}" if mapper.nil?
63
+ mapper
64
+ end
65
+
66
+ # Returns a mapper lambda.
67
+ def data_center_mapper
68
+ ->(dc) {
69
+ {
70
+ 'key' => dc['key'],
71
+ 'name' => dc['name'],
72
+ 'region' => link_for('regions', 'key', dc['region'])
73
+ }
89
74
  }
90
- }
91
- end
92
-
93
- # Returns a mapper lambda.
94
- def health_status_mapper
95
- ->(hs) {
96
- {
97
- 'key' => hs['key'],
98
- 'name' => hs['name'],
99
- 'statusType' => link_for('status-types', 'key', hs['statusType'])
75
+ end
76
+
77
+ # Returns a mapper lambda.
78
+ def environment_mapper
79
+ ->(e) {
80
+ {
81
+ 'key' => e['key'],
82
+ 'name' => e['name'],
83
+ 'aka' => e['aka'],
84
+ 'description' => e['description'],
85
+
86
+ # FIXME Deprecated, don't use.
87
+ 'rank' => e['rank']
88
+ }
100
89
  }
101
- }
102
- end
103
-
104
- # Returns a mapper lambda.
105
- def infrastructure_provider_mapper
106
- ->(ip) {
107
- {
108
- 'key' => ip['key'],
109
- 'name' => ip['name']
90
+ end
91
+
92
+ # Returns a mapper lambda.
93
+ def health_status_mapper
94
+ ->(hs) {
95
+ {
96
+ 'key' => hs['key'],
97
+ 'name' => hs['name'],
98
+ 'statusType' => link_for('status-types', 'key', hs['statusType'])
99
+ }
110
100
  }
111
- }
112
- end
113
-
114
- # Returns a mapper lambda.
115
- def ip_address_role_mapper
116
- # Suppressing IP addresses since we don't import those from master files.
117
- ->(r) {
118
- {
119
- 'serviceInstance' => link_for('service-instances', 'key', r['serviceInstance']),
120
- 'name' => r['name'],
121
- 'description' => r['description']
101
+ end
102
+
103
+ # Returns a mapper lambda.
104
+ def infrastructure_provider_mapper
105
+ ->(ip) {
106
+ {
107
+ 'key' => ip['key'],
108
+ 'name' => ip['name']
109
+ }
122
110
  }
123
- }
124
- end
125
-
126
- # Returns a mapper lambda.
127
- def load_balancer_mapper
128
- ->(lb) {
129
- {
130
- 'name' => lb['name'],
131
- 'type' => lb['type'],
132
- 'ipAddress' => lb['ipAddress'],
133
- 'dataCenter' => link_for('data-centers', 'key', lb['dataCenter']),
134
- 'apiUrl' => lb['apiUrl']
111
+ end
112
+
113
+ # Returns a mapper lambda.
114
+ def ip_address_role_mapper
115
+ # Suppressing IP addresses since we don't import those from master files.
116
+ ->(r) {
117
+ {
118
+ 'serviceInstance' => link_for('service-instances', 'key', r['serviceInstance']),
119
+ 'name' => r['name'],
120
+ 'description' => r['description']
121
+ }
135
122
  }
136
- }
137
- end
138
-
139
- # Returns a mapper lambda.
140
- def machine_mapper
141
- ->(m) {
142
- {
143
- 'name' => m['name'],
144
- 'ipAddress' => m['ipAddress'],
145
- 'fqdn' => m['fqdn'],
146
- 'hostname' => m['hostname'],
147
- 'domain' => m['domain'],
148
- 'os' => m['os'],
149
- 'platform' => m['platform'],
150
- 'platformVersion' => m['platformVersion']
123
+ end
124
+
125
+ # Returns a mapper lambda.
126
+ def load_balancer_mapper
127
+ ->(lb) {
128
+ {
129
+ 'name' => lb['name'],
130
+ 'type' => lb['type'],
131
+ 'ipAddress' => lb['ipAddress'],
132
+ 'dataCenter' => link_for('data-centers', 'key', lb['dataCenter']),
133
+ 'apiUrl' => lb['apiUrl']
134
+ }
151
135
  }
152
- }
153
- end
154
-
155
- # Returns a mapper lambda.
156
- def node_mapper
157
- ->(n) {
158
- service_instance = n['serviceInstance']
159
- ip_addresses = n['ipAddresses']
160
- si_ref = link_for('service-instances', 'key', service_instance)
161
-
162
- result = {
163
- 'name' => n['name'],
164
- 'serviceInstance' => si_ref,
165
- 'machine' => link_for('machines', 'name', n['machine'])
136
+ end
137
+
138
+ # Returns a mapper lambda.
139
+ def machine_mapper
140
+ ->(m) {
141
+ {
142
+ 'name' => m['name'],
143
+ 'ipAddress' => m['ipAddress'],
144
+ 'fqdn' => m['fqdn'],
145
+ 'hostname' => m['hostname'],
146
+ 'domain' => m['domain'],
147
+ 'os' => m['os'],
148
+ 'platform' => m['platform'],
149
+ 'platformVersion' => m['platformVersion']
150
+ }
166
151
  }
167
-
152
+ end
153
+
154
+ # Returns a mapper lambda.
155
+ def node_mapper
156
+ ->(n) {
157
+ service_instance = n['serviceInstance']
158
+ ip_addresses = n['ipAddresses']
159
+ si_ref = link_for('service-instances', 'key', service_instance)
160
+
161
+ result = {
162
+ 'name' => n['name'],
163
+ 'serviceInstance' => si_ref,
164
+ 'machine' => link_for('machines', 'name', n['machine'])
165
+ }
166
+
168
167
  =begin
169
168
  if ip_addresses
170
169
  result['ipAddresses'] = []
@@ -178,95 +177,95 @@ module Seiso
178
177
  end
179
178
  =end
180
179
 
181
- result
182
- }
183
- end
184
-
185
- # Returns a mapper lambda.
186
- def node_ip_address_mapper
187
- # Currently suppressing rotation status and endpoints since we don't import those from master files
188
- ->(nip) {
189
- {
190
- 'node' => link_for('nodes', 'name', nip['node']),
191
- 'ipAddressRole' => link_for('ip-address-roles', 'name', nip['ipAddressRole']),
192
- 'ipAddress' => nip['ipAddress']
180
+ result
193
181
  }
194
- }
195
- end
196
-
197
- # Returns a mapper lambda.
198
- def region_mapper
199
- ->(r) {
200
- {
201
- 'key' => r['key'],
202
- 'name' => r['name'],
203
- 'regionKey' => r['regionKey'],
204
- 'infrastructureProvider' => link_for('infrastructure-providers', 'key', r['infrastructureProvider'])
182
+ end
183
+
184
+ # Returns a mapper lambda.
185
+ def node_ip_address_mapper
186
+ # Currently suppressing rotation status and endpoints since we don't import those from master files
187
+ ->(nip) {
188
+ {
189
+ 'node' => link_for('nodes', 'name', nip['node']),
190
+ 'ipAddressRole' => link_for('ip-address-roles', 'name', nip['ipAddressRole']),
191
+ 'ipAddress' => nip['ipAddress']
192
+ }
205
193
  }
206
- }
207
- end
208
-
209
- # Returns a mapper lambda.
210
- def rotation_status_mapper
211
- ->(rs) {
212
- {
213
- 'key' => rs['key'],
214
- 'name' => rs['name'],
215
- 'statusType' => link_for('status-types', 'key', rs['statusType'])
194
+ end
195
+
196
+ # Returns a mapper lambda.
197
+ def region_mapper
198
+ ->(r) {
199
+ {
200
+ 'key' => r['key'],
201
+ 'name' => r['name'],
202
+ 'regionKey' => r['regionKey'],
203
+ 'infrastructureProvider' => link_for('infrastructure-providers', 'key', r['infrastructureProvider'])
204
+ }
216
205
  }
217
- }
218
- end
219
-
220
- # Returns a mapper lambda.
221
- def service_mapper
222
- ->(s) {
223
- {
224
- 'key' => s['key'],
225
- 'name' => s['name'],
226
- 'description' => s['description'],
227
- 'group' => link_for('service-groups', 'key', s['group']),
228
- 'type' => link_for('service-types', 'key', s['type']),
229
- 'owner' => link_for('people', 'username', s['owner']),
230
- 'platform' => s['platform'],
231
- 'scmRepository' => s['scmRepository']
206
+ end
207
+
208
+ # Returns a mapper lambda.
209
+ def rotation_status_mapper
210
+ ->(rs) {
211
+ {
212
+ 'key' => rs['key'],
213
+ 'name' => rs['name'],
214
+ 'statusType' => link_for('status-types', 'key', rs['statusType'])
215
+ }
232
216
  }
233
- }
234
- end
235
-
236
- # Returns a mapper lambda.
237
- def service_group_mapper
238
- ->(sg) {
239
- {
240
- 'key' => sg['key'],
241
- 'name' => sg['name']
217
+ end
218
+
219
+ # Returns a mapper lambda.
220
+ def service_mapper
221
+ ->(s) {
222
+ {
223
+ 'key' => s['key'],
224
+ 'name' => s['name'],
225
+ '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
+ 'platform' => s['platform'],
230
+ 'scmRepository' => s['scmRepository']
231
+ }
242
232
  }
243
- }
244
- end
245
-
246
- # Returns a mapper lambda.
247
- def service_instance_mapper
248
- ->(si) {
249
- key = si['key']
250
- ip_address_roles = si['ipAddressRoles']
251
- ports = si['ports']
252
-
253
- result = {
254
- 'key' => key,
255
- 'service' => link_for('services', 'key', si['service']),
256
- 'environment' => link_for('environments', 'key', si['environment']),
257
- 'dataCenter' => link_for('data-centers', 'key', si['dataCenter']),
258
- 'loadBalanced' => si['loadBalanced'],
259
- 'loadBalancer' => link_for('loadBalancer', 'name', si['loadBalancer']),
260
- 'minCapacityDeploy' => si['minCapacityDeploy'],
261
- 'minCapacityOps' => si['minCapacityOps'],
233
+ end
234
+
235
+ # Returns a mapper lambda.
236
+ def service_group_mapper
237
+ ->(sg) {
238
+ {
239
+ 'key' => sg['key'],
240
+ 'name' => sg['name']
241
+ }
242
+ }
243
+ end
244
+
245
+ # Returns a mapper lambda.
246
+ def service_instance_mapper
247
+ ->(si) {
248
+ key = si['key']
249
+ ip_address_roles = si['ipAddressRoles']
250
+ ports = si['ports']
262
251
 
263
- # FIXME Deprecated. This is a hardcoded field for an internal Expedia app, and we will remove it.
264
- 'eosManaged' => (si['eosManaged'] || false),
252
+ result = {
253
+ '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']),
257
+ 'loadBalanced' => si['loadBalanced'],
258
+ 'loadBalancer' => link_for('loadBalancer', 'name', si['loadBalancer']),
259
+ 'minCapacityDeploy' => si['minCapacityDeploy'],
260
+ 'minCapacityOps' => si['minCapacityOps'],
261
+
262
+ # FIXME Deprecated. This is a hardcoded field for an internal Expedia app, and we will remove it.
263
+ 'eosManaged' => (si['eosManaged'] || false),
264
+
265
+ # FIXME Deprecated. This is the old name for the minCapacityOps field.
266
+ 'requiredCapacity' => si['minCapacityOps']
267
+ }
265
268
 
266
- # FIXME Deprecated. This is the old name for the minCapacityOps field.
267
- 'requiredCapacity' => si['minCapacityOps']
268
- }
269
-
270
269
  =begin
271
270
  if ip_address_roles
272
271
  result['ipAddressRoles'] = []
@@ -292,41 +291,42 @@ module Seiso
292
291
  end
293
292
  =end
294
293
 
295
- result
296
- }
297
- end
298
-
299
- # Returns a mapper lambda.
300
- def service_instance_port_mapper
301
- # Suppressing endpoints since we don't import those from master files.
302
- ->(p) {
303
- {
304
- 'serviceInstance' => link_for('service-instances', 'key', p['serviceInstance']),
305
- 'number' => p['number'],
306
- 'protocol' => p['protocol'],
307
- 'description' => p['description']
294
+ result
308
295
  }
309
- }
310
- end
311
-
312
- # Returns a mapper lambda.
313
- def service_type_mapper
314
- ->(st) {
315
- {
316
- 'key' => st['key'],
317
- 'name' => st['name']
296
+ end
297
+
298
+ # Returns a mapper lambda.
299
+ def service_instance_port_mapper
300
+ # Suppressing endpoints since we don't import those from master files.
301
+ ->(p) {
302
+ {
303
+ 'serviceInstance' => link_for('service-instances', 'key', p['serviceInstance']),
304
+ 'number' => p['number'],
305
+ 'protocol' => p['protocol'],
306
+ 'description' => p['description']
307
+ }
318
308
  }
319
- }
320
- end
321
-
322
- # Returns a mapper lambda.
323
- def status_type_mapper
324
- ->(st) {
325
- {
326
- 'key' => st['key'],
327
- 'name' => st['name']
309
+ end
310
+
311
+ # Returns a mapper lambda.
312
+ def service_type_mapper
313
+ ->(st) {
314
+ {
315
+ 'key' => st['key'],
316
+ 'name' => st['name']
317
+ }
318
+ }
319
+ end
320
+
321
+ # Returns a mapper lambda.
322
+ def status_type_mapper
323
+ ->(st) {
324
+ {
325
+ 'key' => st['key'],
326
+ 'name' => st['name']
327
+ }
328
328
  }
329
- }
329
+ end
330
330
  end
331
331
  end
332
332
  end
@@ -1,48 +1,48 @@
1
- # Seiso namespace module
2
1
  module Seiso
2
+ class ImportMaster
3
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
-
10
- class UriFactory
11
-
12
- # Creates a new URI factory for the given base URI.
13
- # - base_uri: Base URI (e.g., http://seiso.example.com)
14
- def initialize(base_uri)
15
- @base_uri = base_uri
16
- @v1_uri = "#{@base_uri}/v1"
17
- end
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
18
10
 
19
- # Returns the URI for the given item type.
20
- # - type: Item type (e.g., services, service-instances, ip-address-roles, etc.)
21
- def type_uri(type)
22
- if type == 'ip-address-roles'
23
- raise ArgumentError, "ip-address-roles is not a top-level type"
24
- else
25
- return v1_uri type
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"
26
16
  end
27
- end
28
-
29
- # Returns the URI for the given item.
30
- # - type: Item type
31
- # - keys: One or more item keys, which collectively uniquely identify the item within the type
32
- def item_uri(type, *keys)
33
- if type == 'ip-address-roles'
34
- return v1_uri "service-instances/#{keys[0]}/ip-address-roles/#{keys[1]}"
35
- else
36
- return v1_uri "#{type}/#{keys[0]}"
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}"
37
45
  end
38
- end
39
-
40
- private
41
-
42
- # Resolves a relative path to the full URI.
43
- # - path: relative path
44
- def v1_uri(path)
45
- "#{@base_uri}/v1/#{path}"
46
46
  end
47
47
  end
48
48
  end
data/refresh ADDED
@@ -0,0 +1,2 @@
1
+ gem build seiso-import_master.gemspec
2
+ gem install seiso-import_master-*.gem
@@ -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.3"
7
+ spec.version = "0.0.4"
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"
23
+ spec.add_runtime_dependency "seiso-connector", "~> 0.0.1"
24
24
  end
@@ -1,5 +1,5 @@
1
- require 'seiso/import_master/master_item_mapper'
2
1
  require 'minitest/autorun'
2
+ require 'seiso/import_master/master_item_mapper'
3
3
 
4
4
  # Author:: Willie Wheeler (mailto:wwheeler@expedia.com)
5
5
  # Copyright:: Copyright (c) 2014-2015 Expedia, Inc.
@@ -13,7 +13,7 @@ class TestMasterItemMapper < MiniTest::Unit::TestCase
13
13
  { "foo" => "bar" }
14
14
  end
15
15
  end
16
- @mapper = Seiso::MasterItemMapper.new link_factory
16
+ @mapper = Seiso::ImportMaster::MasterItemMapper.new link_factory
17
17
  end
18
18
 
19
19
  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.3
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Willie Wheeler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-17 00:00:00.000000000 Z
11
+ date: 2015-01-24 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'
47
+ version: 0.0.1
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'
54
+ version: 0.0.1
55
55
  description: Supports self-service data management via version control, e.g. by using
56
56
  GitHub.
57
57
  email:
@@ -72,6 +72,7 @@ files:
72
72
  - lib/seiso/import_master/link_factory.rb
73
73
  - lib/seiso/import_master/master_item_mapper.rb
74
74
  - lib/seiso/import_master/uri_factory.rb
75
+ - refresh
75
76
  - sample_conf/seiso.yml.sample
76
77
  - seiso-import_master.gemspec
77
78
  - test/test_master_item_mapper.rb