seiso-import_master 0.0.10 → 0.0.11
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
|
-
|
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
|