stax 0.0.7 → 0.0.8

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
  SHA256:
3
- metadata.gz: 16b886170228e97d41cc2294002b13db11b77cc363c838181043418891cbc2b6
4
- data.tar.gz: fc5d8071c9e5537af036509de4fcaebab03973297bab62421552bcd029de5abd
3
+ metadata.gz: ee309ab8e6e330d1d4a048112e92ef4baa447a476d424aa603ef6ab8ba5d8373
4
+ data.tar.gz: b961c4bd5be7fc88e23b07a36fd69ab9f3d308c490e32ddac51d4ff1aace36f0
5
5
  SHA512:
6
- metadata.gz: df070637f695680a7e4474a4b734973ec063b4049ac00a4630fda0d192411aaa87a8146c156addbec21c8b708ddeed97d5c74130f7a80f4862ff4f65a6469258
7
- data.tar.gz: 3f0fac8e4f16a786accca5e2f7661be3031caf21c3134156e7e489de49207373293320e22ebb8abf84a8b2371a38e93e11c18b288d8c092d19242592c4470a82
6
+ metadata.gz: e6190e8b3ebbac9249c4e4a506f940250dac24c9601453d7d956ef177ac71c62c885a7f784f971bdf611378719bd98c0b074f2470172c77963e9f7227941a2f0
7
+ data.tar.gz: 1cf0747c5ed623d09612a3e19a55e6324afd7dc7bce69eb7f976464ec027cfa80d029baaa330dad80abe0d1ff8c2f4b900efed9b1b7034fe7b1ef6c9eb1206f0
data/lib/stax/cli/crud.rb CHANGED
@@ -27,8 +27,10 @@ module Stax
27
27
  desc 'update', 'meta update task'
28
28
  def update
29
29
  stack_objects.each do |s|
30
- if s.exists? && y_or_n?("Update #{s.stack_name}?", :yellow)
31
- s.update
30
+ if s.exists?
31
+ y_or_n?("Update #{s.stack_name}?", :yellow) && s.update
32
+ else
33
+ say("#{s.stack_name} does not exist")
32
34
  end
33
35
  end
34
36
  end
@@ -7,6 +7,10 @@ module Stax
7
7
 
8
8
  # see https://www.rubydoc.info/github/wycats/thor/Thor/Actions for methods
9
9
 
10
+ # def check_args
11
+ # usage! if args.size != 1
12
+ # end
13
+
10
14
  # def create_file
11
15
  # create_file(filename) do
12
16
  # content
@@ -21,6 +25,12 @@ module Stax
21
25
  # empty_directory(path)
22
26
  # end
23
27
 
28
+ # private
29
+
30
+ # def self.banner(*args)
31
+ # "#{basename} generate #{command_name} ARG"
32
+ # end
33
+
24
34
  end
25
35
  end
26
36
  end
@@ -2,6 +2,7 @@ require 'yaml'
2
2
  require 'stax/aws/dynamodb'
3
3
  require_relative 'dynamodb/throughput'
4
4
  require_relative 'dynamodb/backup'
5
+ require_relative 'dynamodb/local'
5
6
 
6
7
  module Stax
7
8
  module DynamoDB
@@ -0,0 +1,69 @@
1
+ require 'json'
2
+
3
+ module Stax
4
+ module Cmd
5
+ class DynamoDB < SubCommand
6
+
7
+ no_commands do
8
+
9
+ ## client for dynamodb-local endpoint
10
+ def client
11
+ @_client ||= ::Aws::DynamoDB::Client.new(endpoint: 'http://localhost:8000')
12
+ end
13
+
14
+ ## get CFN template and return hash of table configs
15
+ def dynamo_local_tables
16
+ JSON.parse(my.cfn_template).fetch('Resources', {}).select do |_, v|
17
+ v['Type'] == 'AWS::DynamoDB::Table'
18
+ end
19
+ end
20
+
21
+ ## convert some CFN properties to their SDK equivalents
22
+ def dynamo_payload_from_template(id, template)
23
+ template['Properties'].tap do |p|
24
+ p['TableName'] ||= id # use logical id if no name in template
25
+ p['StreamSpecification']&.merge!( 'StreamEnabled' => true )
26
+ p['SSESpecification'] &&= { 'Enabled' => p.dig('SSESpecification', 'SSEEnabled') }
27
+ p.delete('TimeToLiveSpecification')
28
+ p.delete('Tags')
29
+ end
30
+ end
31
+
32
+ ## convert property names to ruby SDK form
33
+ def dynamo_ruby_payload(payload)
34
+ payload&.deep_transform_keys do |key|
35
+ key.to_s.underscore.to_sym
36
+ end
37
+ end
38
+
39
+ ## create table
40
+ def dynamo_local_create(payload)
41
+ client.create_table(dynamo_ruby_payload(payload))
42
+ rescue ::Aws::DynamoDB::Errors::ResourceInUseException => e
43
+ warn(e.message) # table exists
44
+ rescue Seahorse::Client::NetworkingError => e
45
+ warn(e.message) # dynamodb-local probably not running
46
+ end
47
+ end
48
+
49
+ desc 'local', 'create local tables from template'
50
+ method_option :tables, aliases: '-t', type: :array, default: nil, desc: 'filter table ids'
51
+ method_option :payload, aliases: '-p', type: :boolean, default: false, desc: 'just output payload'
52
+ def local
53
+ tables = dynamo_local_tables
54
+ tables.slice!(*options[:tables]) if options[:tables]
55
+
56
+ tables.each do |id, value|
57
+ payload = dynamo_payload_from_template(id, value)
58
+ if options[:payload]
59
+ puts JSON.pretty_generate(payload)
60
+ else
61
+ puts "create table #{id}"
62
+ dynamo_local_create(payload)
63
+ end
64
+ end
65
+ end
66
+
67
+ end
68
+ end
69
+ end
data/lib/stax/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Stax
2
- VERSION = '0.0.7'
2
+ VERSION = '0.0.8'
3
3
  end
data/stax.gemspec CHANGED
@@ -23,6 +23,8 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.14"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "docile", "1.2.0"
27
+ spec.add_development_dependency "stax-examples"
26
28
 
27
29
  spec.add_dependency('aws-sdk', '~> 2')
28
30
  spec.add_dependency('thor')
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stax
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Lister
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-07 00:00:00.000000000 Z
11
+ date: 2018-06-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,34 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: docile
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '='
46
+ - !ruby/object:Gem::Version
47
+ version: 1.2.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '='
53
+ - !ruby/object:Gem::Version
54
+ version: 1.2.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: stax-examples
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
41
69
  - !ruby/object:Gem::Dependency
42
70
  name: aws-sdk
43
71
  requirement: !ruby/object:Gem::Requirement
@@ -185,6 +213,7 @@ files:
185
213
  - lib/stax/mixin/codepipeline.rb
186
214
  - lib/stax/mixin/dynamodb.rb
187
215
  - lib/stax/mixin/dynamodb/backup.rb
216
+ - lib/stax/mixin/dynamodb/local.rb
188
217
  - lib/stax/mixin/dynamodb/throughput.rb
189
218
  - lib/stax/mixin/ec2.rb
190
219
  - lib/stax/mixin/ecr.rb