stax 0.0.7 → 0.0.8

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,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