seiso-import_master 0.0.3 → 0.0.4

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
- 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