dynamocli 0.1.3 → 0.1.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 +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +17 -7
- data/dynamocli.gemspec +2 -0
- data/lib/dynamocli/erase.rb +35 -25
- data/lib/dynamocli/import.rb +5 -1
- data/lib/dynamocli/version.rb +1 -1
- metadata +30 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: cf0b1bae3beebc279a5eaabd92a509ed1b814c2127d69b1b7fa97773406b09dd
|
4
|
+
data.tar.gz: 99cf915195d3465fafca5be50bd99657b750cfb8feda6a83dc64b663a8710f19
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 693f43bdd1424c8ad114830cef71b3871db841f7bf3ae5a1d143d1fe70ff82d35105f9ada9482e4607ac85cb53fb960c8ffe81b61ef37f585f35d1fd9c22af93
|
7
|
+
data.tar.gz: 63957579490f76bb7444b005a5b75686662cd26c27b432c671be1f20eb5726f78c53accaf7dbf302b8f486f96ee99ccdac4ff5ca8767716d79767303db396f10
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,13 @@
|
|
2
2
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
4
4
|
|
5
|
+
## [0.1.4] - 2019-07-29
|
6
|
+
### Fixed
|
7
|
+
- Fix erase table with indexes.
|
8
|
+
|
9
|
+
### Changed
|
10
|
+
- Add some life to logs.
|
11
|
+
|
5
12
|
## [0.1.3] - 2019-06-20
|
6
13
|
### Fixed
|
7
14
|
- Specify the version of the cloudformation gem.
|
@@ -16,6 +23,7 @@ All notable changes to this project will be documented in this file.
|
|
16
23
|
### Added
|
17
24
|
- Command to import data from a CSV file to a DynamoDB table.
|
18
25
|
|
26
|
+
[0.1.4]: https://github.com/matheussilvasantos/dynamocli/compare/v0.1.3...v0.1.4
|
19
27
|
[0.1.3]: https://github.com/matheussilvasantos/dynamocli/compare/v0.1.2...v0.1.3
|
20
28
|
[0.1.2]: https://github.com/matheussilvasantos/dynamocli/commit/6fd76a06819ff32464eeeae1f097bccd33f21387
|
21
29
|
[0.1.0]: https://github.com/matheussilvasantos/dynamocli/releases/tag/v0.1.0
|
data/Gemfile.lock
CHANGED
@@ -1,31 +1,37 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
dynamocli (0.1.
|
4
|
+
dynamocli (0.1.4)
|
5
5
|
aws-sdk-cloudformation (~> 1.23)
|
6
6
|
aws-sdk-dynamodb (~> 1.28)
|
7
7
|
thor (~> 0.20)
|
8
|
+
tty-logger (~> 0.1.0)
|
8
9
|
|
9
10
|
GEM
|
10
11
|
remote: https://rubygems.org/
|
11
12
|
specs:
|
12
13
|
aws-eventstream (1.0.3)
|
13
|
-
aws-partitions (1.
|
14
|
-
aws-sdk-cloudformation (1.
|
15
|
-
aws-sdk-core (~> 3, >= 3.
|
14
|
+
aws-partitions (1.193.0)
|
15
|
+
aws-sdk-cloudformation (1.25.0)
|
16
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
16
17
|
aws-sigv4 (~> 1.1)
|
17
|
-
aws-sdk-core (3.
|
18
|
+
aws-sdk-core (3.61.1)
|
18
19
|
aws-eventstream (~> 1.0, >= 1.0.2)
|
19
20
|
aws-partitions (~> 1.0)
|
20
21
|
aws-sigv4 (~> 1.1)
|
21
22
|
jmespath (~> 1.0)
|
22
|
-
aws-sdk-dynamodb (1.
|
23
|
-
aws-sdk-core (~> 3, >= 3.
|
23
|
+
aws-sdk-dynamodb (1.34.0)
|
24
|
+
aws-sdk-core (~> 3, >= 3.61.1)
|
24
25
|
aws-sigv4 (~> 1.1)
|
25
26
|
aws-sigv4 (1.1.0)
|
26
27
|
aws-eventstream (~> 1.0, >= 1.0.2)
|
28
|
+
byebug (11.0.1)
|
27
29
|
diff-lcs (1.3)
|
30
|
+
equatable (0.6.1)
|
28
31
|
jmespath (1.4.0)
|
32
|
+
pastel (0.7.3)
|
33
|
+
equatable (~> 0.6)
|
34
|
+
tty-color (~> 0.5)
|
29
35
|
rake (10.5.0)
|
30
36
|
rspec (3.8.0)
|
31
37
|
rspec-core (~> 3.8.0)
|
@@ -41,12 +47,16 @@ GEM
|
|
41
47
|
rspec-support (~> 3.8.0)
|
42
48
|
rspec-support (3.8.0)
|
43
49
|
thor (0.20.3)
|
50
|
+
tty-color (0.5.0)
|
51
|
+
tty-logger (0.1.0)
|
52
|
+
pastel (~> 0.7.0)
|
44
53
|
|
45
54
|
PLATFORMS
|
46
55
|
ruby
|
47
56
|
|
48
57
|
DEPENDENCIES
|
49
58
|
bundler (~> 1.17)
|
59
|
+
byebug
|
50
60
|
dynamocli!
|
51
61
|
rake (~> 10.0)
|
52
62
|
rspec (~> 3.0)
|
data/dynamocli.gemspec
CHANGED
@@ -24,8 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_dependency "thor", "~> 0.20"
|
25
25
|
spec.add_dependency "aws-sdk-dynamodb", "~> 1.28"
|
26
26
|
spec.add_dependency "aws-sdk-cloudformation", "~> 1.23"
|
27
|
+
spec.add_dependency "tty-logger", "~> 0.1.0"
|
27
28
|
|
28
29
|
spec.add_development_dependency "bundler", "~> 1.17"
|
29
30
|
spec.add_development_dependency "rake", "~> 10.0"
|
30
31
|
spec.add_development_dependency "rspec", "~> 3.0"
|
32
|
+
spec.add_development_dependency "byebug"
|
31
33
|
end
|
data/lib/dynamocli/erase.rb
CHANGED
@@ -2,10 +2,13 @@
|
|
2
2
|
|
3
3
|
require "json"
|
4
4
|
require "yaml"
|
5
|
+
require "tty-logger"
|
5
6
|
require "aws-sdk-dynamodb"
|
6
7
|
require "aws-sdk-cloudformation"
|
7
8
|
|
8
9
|
class Dynamocli::Erase
|
10
|
+
LOGGER = TTY::Logger.new
|
11
|
+
|
9
12
|
def initialize(table_name:, with_drift: false)
|
10
13
|
@with_drift = with_drift
|
11
14
|
@table_name = table_name
|
@@ -20,7 +23,7 @@ class Dynamocli::Erase
|
|
20
23
|
|
21
24
|
set_stack_information
|
22
25
|
rescue Aws::DynamoDB::Errors::ResourceNotFoundException => e
|
23
|
-
|
26
|
+
LOGGER.error(e.message)
|
24
27
|
exit(42)
|
25
28
|
rescue Aws::CloudFormation::Errors::ValidationError
|
26
29
|
@stack_resources = nil
|
@@ -29,7 +32,7 @@ class Dynamocli::Erase
|
|
29
32
|
def start
|
30
33
|
erase_table
|
31
34
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
32
|
-
|
35
|
+
LOGGER.error(e.message)
|
33
36
|
exit(42)
|
34
37
|
end
|
35
38
|
|
@@ -44,6 +47,13 @@ class Dynamocli::Erase
|
|
44
47
|
schema.delete(:table_arn)
|
45
48
|
schema.delete(:table_id)
|
46
49
|
schema[:provisioned_throughput].delete(:number_of_decreases_today)
|
50
|
+
schema[:global_secondary_indexes].each do |gsis|
|
51
|
+
gsis.delete(:index_status)
|
52
|
+
gsis.delete(:index_size_bytes)
|
53
|
+
gsis.delete(:item_count)
|
54
|
+
gsis.delete(:index_arn)
|
55
|
+
gsis[:provisioned_throughput].delete(:number_of_decreases_today)
|
56
|
+
end
|
47
57
|
end
|
48
58
|
end
|
49
59
|
|
@@ -54,7 +64,7 @@ class Dynamocli::Erase
|
|
54
64
|
set_stack
|
55
65
|
set_templates
|
56
66
|
rescue Aws::CloudFormation::Errors::ValidationError => e
|
57
|
-
|
67
|
+
LOGGER.error(e.message)
|
58
68
|
exit(42)
|
59
69
|
end
|
60
70
|
|
@@ -78,7 +88,7 @@ class Dynamocli::Erase
|
|
78
88
|
table = tables.find { |_, v| v["Properties"]["TableName"] == @table_name }
|
79
89
|
|
80
90
|
if tables.nil?
|
81
|
-
|
91
|
+
LOGGER.error("table #{@table_name} not found in the #{@stack_name} stack")
|
82
92
|
exit(42)
|
83
93
|
end
|
84
94
|
|
@@ -103,21 +113,21 @@ class Dynamocli::Erase
|
|
103
113
|
end
|
104
114
|
|
105
115
|
def check_if_user_wants_to_continue_with_recreation
|
106
|
-
|
107
|
-
"
|
108
|
-
"do you really want to continue
|
109
|
-
"(anything other than 'y' will cancel) > "
|
116
|
+
LOGGER.warn(
|
117
|
+
"You're going to drop and recreate your #{@table_name} table,\n" \
|
118
|
+
"do you really want to continue?"
|
110
119
|
)
|
120
|
+
STDOUT.print("(anything other than 'y' will cancel) > ")
|
111
121
|
|
112
122
|
confirmation = STDIN.gets.strip
|
113
123
|
return if confirmation == "y"
|
114
124
|
|
115
|
-
|
125
|
+
LOGGER.info(abort_message)
|
116
126
|
exit(0)
|
117
127
|
end
|
118
128
|
|
119
129
|
def abort_message
|
120
|
-
"
|
130
|
+
"Erase of #{@table_name} table canceled"
|
121
131
|
end
|
122
132
|
|
123
133
|
def delete_and_recreate_the_table
|
@@ -127,17 +137,17 @@ class Dynamocli::Erase
|
|
127
137
|
end
|
128
138
|
|
129
139
|
def delete_table
|
130
|
-
|
140
|
+
LOGGER.info("Deleting the #{@table_name} table")
|
131
141
|
|
132
142
|
@table.delete
|
133
143
|
|
134
|
-
|
144
|
+
LOGGER.success("#{@table_name} table deleted")
|
135
145
|
end
|
136
146
|
|
137
147
|
def wait_for_deletion_to_complete
|
138
148
|
waiting_seconds = 0
|
139
149
|
while get_table_status == "DELETING"
|
140
|
-
|
150
|
+
LOGGER.info("Waiting for deletion to complete")
|
141
151
|
sleep waiting_seconds += 1
|
142
152
|
end
|
143
153
|
rescue Aws::DynamoDB::Errors::ResourceNotFoundException
|
@@ -149,24 +159,24 @@ class Dynamocli::Erase
|
|
149
159
|
end
|
150
160
|
|
151
161
|
def create_table
|
152
|
-
|
162
|
+
LOGGER.info("Creating the #{@table_name} table")
|
153
163
|
|
154
164
|
@dynamodb.create_table(@schema)
|
155
165
|
|
156
|
-
|
166
|
+
LOGGER.success("#{@table_name} table created")
|
157
167
|
end
|
158
168
|
|
159
169
|
def check_if_user_wants_to_continue_with_deployment
|
160
|
-
|
161
|
-
"
|
162
|
-
"to drop and recreate the #{@table_name} table, do you really want to continue
|
163
|
-
"(anything other than 'y' will cancel) > "
|
170
|
+
LOGGER.warn(
|
171
|
+
"You are going to deploy and redeploy your #{@stack_name} stack\n" \
|
172
|
+
"to drop and recreate the #{@table_name} table, do you really want to continue?"
|
164
173
|
)
|
174
|
+
STDOUT.print("(anything other than 'y' will cancel) > ")
|
165
175
|
|
166
176
|
confirmation = STDIN.gets.strip
|
167
177
|
return if confirmation == "y"
|
168
178
|
|
169
|
-
|
179
|
+
LOGGER.info(abort_message)
|
170
180
|
exit(0)
|
171
181
|
end
|
172
182
|
|
@@ -177,7 +187,7 @@ class Dynamocli::Erase
|
|
177
187
|
end
|
178
188
|
|
179
189
|
def deploy_stack_without_the_table
|
180
|
-
|
190
|
+
LOGGER.info("Deploying the stack without the #{@table_name} table")
|
181
191
|
|
182
192
|
@cloudformation.update_stack(
|
183
193
|
stack_name: @stack_name,
|
@@ -191,7 +201,7 @@ class Dynamocli::Erase
|
|
191
201
|
tags: @stack.tags.map(&:to_h)
|
192
202
|
)
|
193
203
|
|
194
|
-
|
204
|
+
LOGGER.success("Stack deployed without the #{@table_name} table")
|
195
205
|
end
|
196
206
|
|
197
207
|
def get_stack_policy_body
|
@@ -201,7 +211,7 @@ class Dynamocli::Erase
|
|
201
211
|
def wait_for_deployment_to_complete
|
202
212
|
waiting_seconds = 0
|
203
213
|
while get_stack_status != "UPDATE_COMPLETE"
|
204
|
-
|
214
|
+
LOGGER.info("Waiting for deployment to complete")
|
205
215
|
sleep waiting_seconds += 1
|
206
216
|
end
|
207
217
|
end
|
@@ -211,7 +221,7 @@ class Dynamocli::Erase
|
|
211
221
|
end
|
212
222
|
|
213
223
|
def deploy_stack_with_the_original_template
|
214
|
-
|
224
|
+
LOGGER.info("Deploying the stack with the #{@table_name} table")
|
215
225
|
|
216
226
|
@cloudformation.update_stack(
|
217
227
|
stack_name: @stack_name,
|
@@ -225,6 +235,6 @@ class Dynamocli::Erase
|
|
225
235
|
tags: @stack.tags.map(&:to_h)
|
226
236
|
)
|
227
237
|
|
228
|
-
|
238
|
+
LOGGER.success("Stack deployed with the #{@table_name} table")
|
229
239
|
end
|
230
240
|
end
|
data/lib/dynamocli/import.rb
CHANGED
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "csv"
|
4
|
+
require "tty-logger"
|
2
5
|
require "aws-sdk-dynamodb"
|
3
6
|
|
4
7
|
class Dynamocli::Import
|
8
|
+
LOGGER = TTY::Logger.new
|
5
9
|
SUPPORTED_FILE_FORMATS = ["CSV"]
|
6
10
|
|
7
11
|
def initialize(file:, table:)
|
@@ -23,7 +27,7 @@ class Dynamocli::Import
|
|
23
27
|
when ".csv"
|
24
28
|
records_from_csv(@file)
|
25
29
|
else
|
26
|
-
|
30
|
+
LOGGER.error("Not supported file format. Only supported file formats are: #{SUPPORTED_FILE_FORMATS}")
|
27
31
|
exit(42)
|
28
32
|
end
|
29
33
|
end
|
data/lib/dynamocli/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dynamocli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matheus Silva Santos de Oliveira
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: thor
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.23'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: tty-logger
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 0.1.0
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 0.1.0
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
70
|
name: bundler
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,6 +108,20 @@ dependencies:
|
|
94
108
|
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
110
|
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: byebug
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
97
125
|
description:
|
98
126
|
email:
|
99
127
|
- oliveira.matheussilvasantos@gmail.com
|