murk 0.2.3 → 0.3.0

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
  SHA1:
3
- metadata.gz: 2247482aa4d6ed38433679cd568f70457fc63c81
4
- data.tar.gz: 4100a310b8976d9eeb258aef8d40c3313dfa61e0
3
+ metadata.gz: dbda2fa6488d386467884cb50954b160cc0f2508
4
+ data.tar.gz: 2443ef53391f7aeee901c03a2e4803ce55486898
5
5
  SHA512:
6
- metadata.gz: 533dbd5ae7aa608caef79914cdfbecb6cfafad57b3b94873c895b1c3e9db4638d91fa20317438c08fd0027eded58ec6dc180a10a0bfc6d6cb657c5463c074a7d
7
- data.tar.gz: 4f077a7711537ab6c4d7a793d6f48ec35561da07d7c4c642e894b762c2036c5776736824f322d0ff639b20fe09e5e3f7a695b6880a988c86cb8b4dbd3934e6e3
6
+ metadata.gz: d4d3a042d530c0cb4d37f50deb2af4cc43e417770c95555dd9b1b391879f2f082c678ee4815b5715f6208cb044cd6713651508eb4544063edb2d29e737559840
7
+ data.tar.gz: 9dc0631bac304b7b2875c9132fb67ad149cc981d8ffe9c6c88d196ed5b3277b8ddb4c76cb6358d826abac4add633594ca2b46da897a44d343e3ff2033032b935
data/bin/murk CHANGED
@@ -3,72 +3,42 @@
3
3
  $LOAD_PATH << File.join(File.dirname(__FILE__), '..', 'lib')
4
4
 
5
5
  require 'logger'
6
- require 'optparse'
7
- require 'ostruct'
8
-
6
+ require 'clamp'
9
7
  require 'murk'
10
8
 
11
- DEFAULT_CONFIG_FILE = './config/murk.rb'
12
-
13
- def change(options)
14
- stack_name = ARGV[1]
15
- stacks = Murk.load(options.file)
16
- stack = stacks.find_by_name(stack_name, env: ENV['MURK_ENV'] || ENV['USER'])
17
- if stack
18
- yield stack
19
- else
20
- fail ArgumentError, 'No stack defined with name ' + stack_name
21
- end
22
- rescue StandardError => e
23
- fail_with_exception(e, options.debug)
24
- end
25
-
26
- def fail_with_usage(parser)
27
- $stderr.puts parser
28
- exit 1
29
- end
30
-
31
- def fail_with_exception(e, debug)
32
- cause = e.cause || e
33
- $stderr.puts e.message
34
- $stderr.puts cause.message
35
- if debug
36
- $stderr.puts cause.backtrace
37
- end
38
- exit 2
39
- end
40
-
41
- options = OpenStruct.new
42
- options.file = DEFAULT_CONFIG_FILE
43
- options.debug = false
44
-
45
- parser = OptionParser.new do |p|
46
- p.banner = 'Usage: stack [options] [ create | delete ] STACK'
47
-
48
- p.on('-f', '--file FILE', 'Stack configuration file') do |file|
49
- options.file = file
9
+ Clamp do
10
+
11
+ subcommand 'create', 'Create a stack' do
12
+ option "--stack", "STACK", "Stack name to create", required: true, attribute_name: :stack_name
13
+ option "--env", "ENV", "Name of the environment", required: true
14
+ option "--file", "CONFIG_FILE", "Config file", default: "./config/murk.rb"
15
+ option "--wait", :flag, 'Wait for the stack to be created'
16
+ parameter "USER", "Name your stack"
17
+
18
+ def execute
19
+ stack = Murk.load(file, user).find_by_name(stack_name, env: env)
20
+ stack.create_or_update
21
+ if wait?
22
+ stack.wait(:stack_create_complete) { print "." }
23
+ puts 'done!'
24
+ end
25
+ end
50
26
  end
51
27
 
52
- p.on('-d', '--debug', 'Show extra debugging output') do |debug|
53
- options.debug = debug
54
- Murk.logger.level = Logger::DEBUG
28
+ subcommand 'delete', 'Delete a stack' do
29
+ option "--stack", "STACK", "Stack name to delete", required: true, attribute_name: :stack_name
30
+ option "--env", "ENV", "Name of the environment", required: true
31
+ option "--file", "CONFIG_FILE", "Config file", default: "./config/murk.rb"
32
+ option "--wait", :flag, 'Wait for the stack to be deleted'
33
+ parameter "USER", "Name of your stack"
34
+
35
+ def execute
36
+ stack = Murk.load(file, user).find_by_name(stack_name, env: env)
37
+ stack.delete
38
+ if wait?
39
+ stack.wait(:stack_delete_complete) { print "." }
40
+ puts 'done!'
41
+ end
42
+ end
55
43
  end
56
44
  end
57
-
58
- begin
59
- parser.parse!(ARGV)
60
- rescue OptionParser::ParseError
61
- fail_with_usage(parser)
62
- end
63
-
64
- fail_with_usage(parser) unless ARGV.length >= 2
65
-
66
- if ARGV[0] == 'create'
67
- change(options) { |stack| stack.create_or_update }
68
- elsif ARGV[0] == 'delete'
69
- change(options) { |stack| stack.delete }
70
- else
71
- fail_with_usage(parser)
72
- end
73
-
74
- exit 0
@@ -0,0 +1,16 @@
1
+ module Aws
2
+ module CloudFormation
3
+ class Client
4
+
5
+ def wait_forever(state, stack_name)
6
+ wait_until(state, stack_name) do |w|
7
+ # disable max attempts
8
+ w.max_attempts = nil
9
+ w.before_wait do |attempts, response|
10
+ yield attempts, response if block_given?
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
data/lib/murk.rb CHANGED
@@ -16,10 +16,10 @@ module Murk
16
16
  @options ||= DEFAULT_OPTIONS
17
17
  end
18
18
 
19
- def self.load(file)
19
+ def self.load(file, user)
20
20
  self.config_file = file
21
21
  config = File.read(config_file)
22
- builder = Murk::Builder::MurkBuilder.new
22
+ builder = Murk::Builder::MurkBuilder.new user
23
23
  builder.instance_eval(config)
24
24
  builder.build
25
25
  end
data/lib/murk/aws.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'aws-sdk'
2
+ require 'aws/extensions/cloudformation'
2
3
 
3
4
  module Murk
4
5
  module AWS
@@ -1,13 +1,13 @@
1
-
2
1
  module Murk
3
2
  module Builder
4
3
 
5
4
  class MurkBuilder
6
5
 
7
- def initialize
6
+ def initialize user
8
7
  @options_builder = OptionsBuilder.new
9
8
  @stack_builders = []
10
9
  @current_env = nil
10
+ @user = user
11
11
  end
12
12
 
13
13
  def options(&block)
@@ -23,7 +23,7 @@ module Murk
23
23
  end
24
24
 
25
25
  def stack(name, &block)
26
- stack_builder = StackBuilder.new(name, env: @current_env)
26
+ stack_builder = StackBuilder.new(name, user: @user, env: @current_env)
27
27
  stack_builder.instance_eval(&block)
28
28
  @stack_builders << stack_builder
29
29
  self
@@ -33,6 +33,7 @@ module Murk
33
33
  Murk.configure(@options_builder.build)
34
34
 
35
35
  stack_collection = Murk::Model::StackCollection.new
36
+
36
37
  @stack_builders.each do |builder|
37
38
  stack_collection.add(builder.build)
38
39
  end
@@ -40,6 +41,5 @@ module Murk
40
41
  end
41
42
 
42
43
  end
43
-
44
44
  end
45
45
  end
@@ -6,8 +6,9 @@ module Murk
6
6
 
7
7
  class ParametersBuilder
8
8
 
9
- def initialize(env: nil)
9
+ def initialize(env: nil, user: nil)
10
10
  @env = env
11
+ @user = user
11
12
  @parameters = []
12
13
  end
13
14
 
@@ -23,7 +24,7 @@ module Murk
23
24
  if args.length > 0
24
25
  @parameters << Murk::Model::SimpleStackParameter.new(method_sym, args[0], env: @env)
25
26
  else
26
- @parameters << Murk::Model::ReferenceStackParameter.new(method_sym, block, env: @env)
27
+ @parameters << Murk::Model::ReferenceStackParameter.new(method_sym, block, env: @env, user: @user)
27
28
  end
28
29
  end
29
30
 
@@ -4,14 +4,16 @@ module Murk
4
4
 
5
5
  class StackBuilder
6
6
 
7
- def initialize(stack_name, env: nil)
7
+ def initialize(stack_name, user:, env:)
8
8
  @stack_name = stack_name
9
9
  @env = env
10
- @parameters_builder = ParametersBuilder.new(env: @env)
10
+ @user = user
11
+ @parameters_builder = ParametersBuilder.new(env: @env, user: user)
11
12
  end
12
13
 
13
14
  def build
14
- stack = Murk::Model::Stack.new(@stack_name, env: @env)
15
+ stack = Murk::Model::Stack.new(@stack_name, env: @env, user: @user)
16
+
15
17
  if @template_filename
16
18
  stack.template_filename = @template_filename
17
19
  end
@@ -9,12 +9,13 @@ module Murk
9
9
  include Murk
10
10
  include Murk::AWS
11
11
 
12
- attr_reader :name, :env, :template
12
+ attr_reader :name, :env, :template, :user
13
13
 
14
- def initialize(name, env: nil, template_filename: name + '.json')
14
+ def initialize(name, env:, user:, template_filename: name + '.json')
15
15
  @name = name
16
16
  @env = env
17
17
  @template = Template.new(template_filename)
18
+ @user = user
18
19
  @parameters = []
19
20
  end
20
21
 
@@ -54,15 +55,16 @@ module Murk
54
55
  end
55
56
  end
56
57
 
58
+ def wait state
59
+ cloudformation.wait_forever(:stack_create_complete, stack_name: qualified_name) { yield if block_given? }
60
+ end
61
+
57
62
  def qualified_name
58
63
  qualified_name = ''
59
64
  if Murk.options[:stack_prefix]
60
65
  qualified_name += Murk.options[:stack_prefix] + '-'
61
66
  end
62
- if @env
63
- qualified_name += @env + '-'
64
- end
65
- qualified_name + @name
67
+ qualified_name + "#{@env}-#{@user}-#{@name}"
66
68
  end
67
69
 
68
70
  def output(key)
@@ -26,9 +26,10 @@ module Murk
26
26
 
27
27
  attr_reader :key, :block
28
28
 
29
- def initialize(key, block, env: nil)
29
+ def initialize(key, block, env: nil, user: nil)
30
30
  @key = key
31
31
  @block = block
32
+ @user = user
32
33
  @env = env
33
34
  end
34
35
 
@@ -36,13 +37,8 @@ module Murk
36
37
  instance_eval(&@block)
37
38
  end
38
39
 
39
- def env(name)
40
- @env = name
41
- self
42
- end
43
-
44
40
  def stack(name)
45
- Stack.new(name, env: @env)
41
+ Stack.new(name, env: @env, user: @user)
46
42
  end
47
43
 
48
44
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: murk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Cam Smith
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-08-31 00:00:00.000000000 Z
11
+ date: 2015-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: api_cache
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '1.8'
55
+ - !ruby/object:Gem::Dependency
56
+ name: clamp
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '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: '1.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -116,6 +130,7 @@ extensions: []
116
130
  extra_rdoc_files: []
117
131
  files:
118
132
  - bin/murk
133
+ - lib/aws/extensions/cloudformation.rb
119
134
  - lib/murk.rb
120
135
  - lib/murk/aws.rb
121
136
  - lib/murk/builder/murk_builder.rb