idlc-sdk-deploy 1.0.0.rc2 → 1.0.0.rc3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: d492b7a59e2ce7ac385aec080681efb692cb7140
4
- data.tar.gz: 86eb7b4c60fbf0f7a16a1a4ee77a2f3b9afc2d0f
3
+ metadata.gz: b3b51c257080d9be67689a495fe74209d817a439
4
+ data.tar.gz: 892a9846ac9aa7aa0e5c30bb98e720769594a049
5
5
  SHA512:
6
- metadata.gz: ff421aea059eb53d1c80842fdc5e594114b7bd1207c12e765e62e8ba0dc1760acf9b6d3d4354d106d4bea06f2eb7472a1e3d8405b2892a929c2d42dda7428d91
7
- data.tar.gz: 28250ffde59346f9edfdd2e4affb609dd672afc6bd9ca5da11e291c5f54a20fe622b1447e97a4b7d6a1ef92a32c5d0bcd6b542708e84b8165f54e4da7dc5d50a
6
+ metadata.gz: 81008c97731ddaf34cee0a9a72bbdd93f82f4cfe47f284d63f82173187c17a836d391f6139dd3bbc91e122fbe4363961aefab7b0ced8dea01d1b48af50269632
7
+ data.tar.gz: 2f805f5131b70a9788d430dcc7c8124f7242cd4ec44ddbd728120c6944a32d76a5b2f0a3b03f10749ff977a39bb3af09d03527f16e8c8f55ad000cab9358870f
@@ -1,5 +1,5 @@
1
1
  module Idlc
2
2
  module Deploy
3
- VERSION = '1.0.0.rc2'.freeze
3
+ VERSION = '1.0.0.rc3'.freeze
4
4
  end
5
5
  end
@@ -17,6 +17,5 @@ require 'idlc-sdk-core'
17
17
  require 'idlc-sdk-deploy/config'
18
18
  require 'idlc-sdk-deploy/power'
19
19
  require 'idlc-sdk-deploy/keypair'
20
- require 'idlc-sdk-deploy/elasticsearchv2'
21
20
 
22
21
  Idlc::Deploy::Config.load_tasks
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: idlc-sdk-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc2
4
+ version: 1.0.0.rc3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Cazell
@@ -213,10 +213,8 @@ files:
213
213
  - idlc-sdk-deploy.gemspec
214
214
  - lib/idlc-sdk-deploy.rb
215
215
  - lib/idlc-sdk-deploy/config.rb
216
- - lib/idlc-sdk-deploy/elasticsearchv2.rb
217
216
  - lib/idlc-sdk-deploy/keypair.rb
218
217
  - lib/idlc-sdk-deploy/power.rb
219
- - lib/idlc-sdk-deploy/tasks/elasticsearchv2.rake
220
218
  - lib/idlc-sdk-deploy/version.rb
221
219
  homepage: https://github.com/nathantcz/idlc-sdk
222
220
  licenses:
@@ -1,183 +0,0 @@
1
- module Idlc
2
- module Deploy
3
- class ElasticsearchV2
4
- include Idlc::Helpers
5
-
6
- def initialize(credentials, region, endpoint)
7
- @service_name = 'es'
8
- @credentials = credentials
9
- @region = region
10
- @endpoint = endpoint.strip
11
- @index_migrations = []
12
- @tmp_dir = Dir.mktmpdir('es-temp')
13
- @full_release_path = ''
14
-
15
- # Instantiate an S3 Client
16
- @s3 = Aws::S3::Client.new(
17
- region: @region,
18
- access_key_id: @credentials[:access_key_id],
19
- secret_access_key: @credentials[:secret_access_key]
20
- )
21
- end
22
-
23
- def create_index(app_release, bucket, prefix)
24
- mapping = es_mapping(bucket, prefix, app_release)
25
- parts = parse_request(mapping)
26
-
27
- send_signed_request(
28
- parts[:method],
29
- "#{@endpoint}#{parts[:path]}",
30
- parts[:body]
31
- )
32
- end
33
-
34
- def delete_index(index)
35
- send_signed_request('DELETE', "#{@endpoint}/#{index}", '{}')
36
- end
37
-
38
- def run_migrations(app_release, bucket, prefix)
39
- migrations = es_migrations(bucket, prefix, app_release)
40
-
41
- migrations.each do |migration|
42
- parts = parse_request(migration)
43
-
44
- send_signed_request(
45
- parts[:method],
46
- "#{@endpoint}#{parts[:path]}",
47
- parts[:body]
48
- )
49
- end
50
- end
51
-
52
- def cleanup
53
- debug("keeping directory: #{@tmp_dir} for dubugging")
54
- return if ENV['DEBUG']
55
-
56
- FileUtils.rm_rf(@tmp_dir)
57
- end
58
-
59
- private
60
-
61
- def major_minor_patch(version)
62
- # Strip build number from version number. The migration scripts only include
63
- # major.minor.patch
64
- version.split('.')[0..2].join('.')
65
- end
66
-
67
- def es_mapping(bucket, prefix, app_release)
68
- get_release(bucket, prefix, app_release)
69
-
70
- # Read Mapping JSON into string
71
- file = File.open("#{@full_release_path}/es/axiompro_mapping.txt", 'rb')
72
- mapping = file.read
73
- file.close
74
-
75
- mapping
76
- end
77
-
78
- def es_migrations(bucket, prefix, app_release)
79
- get_release(bucket, prefix, app_release)
80
- migrations = []
81
-
82
- Dir.glob("#{@full_release_path}/es/Migrations/*.txt").each do |f|
83
- msg(f)
84
- file = File.open(f, 'rb')
85
- migrations.push(file.read)
86
- file.close
87
- end
88
-
89
- migrations
90
- end
91
-
92
- def get_release(src_bucket, app, version)
93
- @full_release_path = "#{@tmp_dir}/#{app}-#{version}"
94
- release_archive = "#{@full_release_path}.zip"
95
-
96
- return if File.exist? @full_release_path
97
-
98
- @s3.get_object(
99
- response_target: release_archive,
100
- bucket: src_bucket,
101
- key: "#{app}/#{major_minor_patch(version)}/AxiomPro.#{version}.deploy.zip"
102
- )
103
-
104
- unzip(release_archive, @full_release_path)
105
- end
106
-
107
- def unzip(file, destination)
108
- Zip::ZipFile.open(file) do |zip_file|
109
- zip_file.each do |f|
110
- f_path = File.join(destination, f.name)
111
- FileUtils.mkdir_p(File.dirname(f_path))
112
- f.extract(f_path)
113
- end
114
- end
115
- end
116
-
117
- def send_signed_request(method, url, payload)
118
- uri = URI.parse(url)
119
- https = Net::HTTP.new(uri.host, uri.port)
120
- https.use_ssl = true
121
- signature = sigv4_signature(method, url, payload)
122
- request = http_request(method, uri.path, signature, payload)
123
-
124
- response = https.request(request)
125
- msg("#{response.code} #{response.message} #{response.body}")
126
- end
127
-
128
- def parse_request(document)
129
- method = document.lines[0].strip
130
- path = document.lines[1].strip
131
- body = document.lines[2..-1].join
132
-
133
- { method: method, path: path, body: body }
134
- end
135
-
136
- def set_headers(request, signature)
137
- request.add_field 'host', signature.headers['host']
138
- request.add_field 'content-type', 'application/json'
139
- request.add_field 'x-amz-content-sha256', signature.headers['x-amz-content-sha256']
140
- request.add_field 'x-amz-date', signature.headers['x-amz-date']
141
- request.add_field 'authorization', signature.headers['authorization']
142
- end
143
-
144
- def http_request(method, path, signature, payload)
145
- case method.downcase
146
- when 'put'
147
- request = Net::HTTP::Put.new(path)
148
- when 'get'
149
- request = Net::HTTP::Get.new(path)
150
- when 'delete'
151
- request = Net::HTTP::Delete.new(path)
152
- else
153
- request = Net::HTTP::Put.new(path)
154
- end
155
-
156
- set_headers(request, signature)
157
- request.body = payload
158
-
159
- request
160
- end
161
-
162
- def signer
163
- Aws::Sigv4::Signer.new(
164
- service: @service_name,
165
- region: @region,
166
- access_key_id: @credentials[:access_key_id],
167
- secret_access_key: @credentials[:secret_access_key]
168
- )
169
- end
170
-
171
- def sigv4_signature(method, url, payload)
172
- signer.sign_request(
173
- http_method: method,
174
- url: url,
175
- headers: {
176
- 'content-type' => 'application/json'
177
- },
178
- body: payload
179
- )
180
- end
181
- end
182
- end
183
- end
@@ -1,35 +0,0 @@
1
- namespace :elasticsearchv2 do
2
- task :deps do
3
- if ENV.include? 'ES_ENDPOINT'
4
- ES_ENDPOINT = ENV['ES_ENDPOINT']
5
- else
6
- ES_ENDPOINT = Idlc::Deploy::Config.get_deployment_output('es_endpoint')
7
- end
8
-
9
- ES = Idlc::Deploy::ElasticsearchV2.new(
10
- {
11
- access_key_id: ENV['AWS_ACCESS_KEY_ID'],
12
- secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
13
- },
14
- ENV['AWS_REGION'],
15
- ES_ENDPOINT
16
- )
17
- end
18
-
19
- desc 'Initialize ElasticSearch'
20
- task init: [:deps] do
21
- ES.create_index(ENV['APP_RELEASE'], 'dev-publish', 'axp')
22
- end
23
-
24
- desc 'Clear ElasticSearch'
25
- task clear: [:setup, :deps] do
26
- ES.delete_index('axiompro')
27
- ES.cleanup
28
- end
29
-
30
- desc 'Update ElasticSearch'
31
- task update: [:deps, :init] do
32
- ES.run_migrations(ENV['APP_RELEASE'], 'dev-publish', 'axp')
33
- ES.cleanup
34
- end
35
- end