murk 0.2.3 → 0.3.0

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