seiso-import_master 0.0.10 → 0.0.11
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
|
-
|
4
|
+
YjkyNzU5ZWYyNWMyNGViYzEzMjdjMDEzZTFiZjQ4N2I2Yzc0OGVlMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
ODJlZTgwMWEyY2M2Njc2OThjNTgwY2FhMmU1NWQ0ZDM4NTQ5YzFkZg==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
ZGQ4MGU4ZTk0NWMyMGI5M2Y2MzQ5YWU4MzNlM2U2OGUyZjZmODZlNTIxNWE5
|
10
|
+
MjQ1OTIyOTEyYjdmYjgxN2M3NWEzODM1MWI0NWMzYWFhZWYzMmQ2ZWZiMWNk
|
11
|
+
MDliOGRlYWQxYTg2ODFlZGIyYWNjNjBmNTcwMDExMzc0ZTUyZTk=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTBjZDRjMzk1ZDg4MjE5YTgxM2ZkYjU1ZGE1YWUwM2IzYWJmNjU0YTA3NzBm
|
14
|
+
ZGE5NjhjZGU3ZjU3M2Y3ZDg2MzIwZTY5MjE5NGE2YmRmMDBmYjVkOWYyYTcx
|
15
|
+
NTU2YWRjMGI0OTA1OTc0N2JhZDIyNDMyMWZkOThkMDM4ZGI4YzI=
|
@@ -9,6 +9,11 @@ module Seiso
|
|
9
9
|
|
10
10
|
# Enriches children with a link to the parent, detaches them from the parent, and returns
|
11
11
|
# all detached children.
|
12
|
+
#
|
13
|
+
# - parents: List of items whose children we will detach.
|
14
|
+
# - parent_prop: Name of the parent property on the children.
|
15
|
+
# - parent_key: Name that Seiso expects for the parent key.
|
16
|
+
# - child_prop: Name of the child property on the items.
|
12
17
|
def detach_children(parents, parent_prop, parent_key, child_prop)
|
13
18
|
all_children = []
|
14
19
|
parents.each do |p|
|
@@ -1,3 +1,4 @@
|
|
1
|
+
require "uri"
|
1
2
|
require_relative "base_importer"
|
2
3
|
|
3
4
|
module Seiso
|
@@ -36,11 +37,13 @@ module Seiso
|
|
36
37
|
sdm_service_instances = doc['items']
|
37
38
|
sdm_ports = detach_children(sdm_service_instances, 'serviceInstance', 'key', 'ports')
|
38
39
|
sdm_roles = detach_children(sdm_service_instances, 'serviceInstance', 'key', 'ipAddressRoles')
|
40
|
+
sdm_dependencies = detach_children(sdm_service_instances, 'serviceInstance', 'key', 'dependencies')
|
39
41
|
sdm_seyren_checks = detach_children(sdm_service_instances, 'serviceInstance', 'key', 'seyrenChecks')
|
40
42
|
|
41
43
|
import_service_instances sdm_service_instances
|
42
44
|
import_ports sdm_ports
|
43
45
|
import_ip_address_roles sdm_roles
|
46
|
+
import_dependencies sdm_dependencies
|
44
47
|
import_seyren_checks sdm_seyren_checks
|
45
48
|
end
|
46
49
|
|
@@ -68,6 +71,97 @@ module Seiso
|
|
68
71
|
@seiso.post_items('ip-address-roles', seiso_roles)
|
69
72
|
end
|
70
73
|
|
74
|
+
def import_dependencies(sdm_dependencies)
|
75
|
+
puts "Importing dependencies"
|
76
|
+
seiso_dependencies = @service_instance_mapper.seiso_service_instance_dependencies sdm_dependencies
|
77
|
+
grouped_seiso_dependencies = group_dependencies_by_service_instance seiso_dependencies
|
78
|
+
|
79
|
+
# Iterate over the groups, deleting stale dependencies and importing the rest
|
80
|
+
grouped_seiso_dependencies.each do |key, group|
|
81
|
+
puts "key=#{key}, group=#{group}"
|
82
|
+
delete_stale_dependencies(key, group)
|
83
|
+
|
84
|
+
# Import the dependencies.
|
85
|
+
group.each do |d|
|
86
|
+
dependent_key = d['dependent']['key']
|
87
|
+
dependency_key = d['dependency']['key']
|
88
|
+
puts "Importing dependency: dependent=#{dependent_key}, dependency=#{dependency_key}"
|
89
|
+
search_uri = @uri_factory_v2.uri "/service-instance-dependencies/search/find-by-keys?dependent=#{dependent_key}&dependency=#{dependency_key}"
|
90
|
+
|
91
|
+
# TODO 404 means POST, 200 means PUT
|
92
|
+
seiso_sid_response = @rest_connector_v2.get search_uri
|
93
|
+
|
94
|
+
if seiso_sid_response.code == "200"
|
95
|
+
# Found it, so PUT
|
96
|
+
seiso_sid = JSON.parse seiso_sid_response.body
|
97
|
+
dep_uri = URI.parse(seiso_sid['_links']['self']['href'])
|
98
|
+
# puts "dep_uri=#{dep_uri}"
|
99
|
+
# puts JSON.pretty_generate(d)
|
100
|
+
@rest_connector_v2.put(dep_uri, d)
|
101
|
+
elsif seiso_sid_response.code == "404"
|
102
|
+
# Not found, so POST
|
103
|
+
deps_uri = @uri_factory_v2.uri "/service-instance-dependencies"
|
104
|
+
@rest_connector_v2.post(deps_uri, d)
|
105
|
+
else
|
106
|
+
puts "Don't know how to handle response code #{seiso_sid.code}; skipping."
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Helper for import_dependencies
|
113
|
+
def group_dependencies_by_service_instance(seiso_dependencies)
|
114
|
+
grouped_seiso_dependencies = {}
|
115
|
+
seiso_dependencies.each do |d|
|
116
|
+
dependent_key = d['dependent']['key']
|
117
|
+
puts "dependent_key=#{dependent_key}"
|
118
|
+
group = grouped_seiso_dependencies[dependent_key]
|
119
|
+
if group.nil?
|
120
|
+
group = []
|
121
|
+
grouped_seiso_dependencies[dependent_key] = group
|
122
|
+
end
|
123
|
+
group << d
|
124
|
+
end
|
125
|
+
grouped_seiso_dependencies
|
126
|
+
end
|
127
|
+
|
128
|
+
# Helper for import_dependencies
|
129
|
+
#
|
130
|
+
# - dependent_key: Key of the dependent service instance.
|
131
|
+
# - local_dependencies: List of local dependencies (in Seiso format) associated with
|
132
|
+
# the specified dependent.
|
133
|
+
def delete_stale_dependencies(dependent_key, local_dependencies)
|
134
|
+
puts "Deleting stale dependencies for service instance #{dependent_key}"
|
135
|
+
|
136
|
+
local_dependency_keys = local_dependencies.map do |local|
|
137
|
+
# TODO Will need to update when I update the v2 API
|
138
|
+
local['dependency']['key']
|
139
|
+
end
|
140
|
+
|
141
|
+
# FIXME This isn't accounting for pagination!
|
142
|
+
# If there are a lot of remote dependencies, some may not be marked as stale.
|
143
|
+
# Just need to implement it. [WLW]
|
144
|
+
remote_dependencies_uri =
|
145
|
+
@uri_factory_v2.uri "/service-instance-dependencies/search/find-by-dependent?key=#{dependent_key}"
|
146
|
+
remote_dependencies_response = @rest_connector_v2.get remote_dependencies_uri
|
147
|
+
remote_dependencies = JSON.parse(remote_dependencies_response.body)['_embedded']['items']
|
148
|
+
|
149
|
+
# Identify stale dependencies
|
150
|
+
stale_remote_dependencies = remote_dependencies.reject do |remote|
|
151
|
+
local_dependency_keys.include? remote['_embedded']['dependency']['key']
|
152
|
+
end
|
153
|
+
|
154
|
+
# Delete stale dependencies from Seiso
|
155
|
+
if stale_remote_dependencies.empty?
|
156
|
+
puts "No stale dependencies for service instance #{dependent_key}"
|
157
|
+
else
|
158
|
+
stale_remote_dependencies.each do |stale|
|
159
|
+
uri = URI.parse stale['_links']['self']['href']
|
160
|
+
@rest_connector_v2.delete uri
|
161
|
+
end
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
71
165
|
def import_seyren_checks(sdm_checks)
|
72
166
|
puts "Importing Seyren checks"
|
73
167
|
|
@@ -113,7 +207,6 @@ module Seiso
|
|
113
207
|
end
|
114
208
|
|
115
209
|
end
|
116
|
-
|
117
210
|
end # class ServiceInstanceImporter
|
118
211
|
end # module Importers
|
119
212
|
end # class ImportMaster
|
@@ -57,6 +57,19 @@ module Seiso
|
|
57
57
|
'description' => p['description']
|
58
58
|
}
|
59
59
|
end
|
60
|
+
|
61
|
+
def seiso_service_instance_dependencies(sdm_dependencies)
|
62
|
+
sdm_dependencies.map do |d|
|
63
|
+
seiso_service_instance_dependency d
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def seiso_service_instance_dependency(d)
|
68
|
+
{
|
69
|
+
'dependent' => { 'key' => d['serviceInstance'] },
|
70
|
+
'dependency' => { 'key' => d['key'] }
|
71
|
+
}
|
72
|
+
end
|
60
73
|
end
|
61
74
|
end
|
62
75
|
end
|
data/seiso-import_master.gemspec
CHANGED
@@ -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.
|
7
|
+
spec.version = "0.0.11"
|
8
8
|
spec.authors = ["Willie Wheeler"]
|
9
9
|
spec.email = ["wwheeler@expedia.com"]
|
10
10
|
spec.summary = "Imports Seiso data master files into Seiso."
|
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
|
+
version: 0.0.11
|
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-
|
11
|
+
date: 2015-06-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|