momentum 0.0.9 → 0.0.10
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.
- data/CHANGELOG.md +4 -0
- data/README.md +7 -0
- data/lib/momentum/opsworks.rb +23 -2
- data/lib/momentum/railtie.rb +1 -0
- data/lib/momentum/version.rb +1 -1
- data/lib/tasks/ow-console.rake +3 -1
- data/lib/tasks/ow-execute_recipe.rake +21 -0
- metadata +71 -57
- checksums.yaml +0 -7
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -93,6 +93,13 @@ SSH to an OpsWorks instance. If the `layer_or_instance` argument is a layer, an
|
|
93
93
|
# or...
|
94
94
|
bundle exec rake ow:ssh[staging,rails-app1]
|
95
95
|
|
96
|
+
### ow:execute_recipe[to,layer,recipe,aws_id,aws_secret]
|
97
|
+
|
98
|
+
Execute a Chec recipe on the given layer in the given stack. By default, will execute recipes on all running instances of the _rails-app_ layer, or the list configured in `app_layers`. E.g.:
|
99
|
+
|
100
|
+
bundle exec rake ow:execute_recipe[staging,rails-app,restart_unicorns]
|
101
|
+
# Assuming 'restart_unicorns' is a valid Chef recipe.
|
102
|
+
|
96
103
|
|
97
104
|
## Configuration:
|
98
105
|
|
data/lib/momentum/opsworks.rb
CHANGED
@@ -77,6 +77,27 @@ module Momentum::OpsWorks
|
|
77
77
|
@ow = Momentum::OpsWorks.client(aws_id, aws_secret)
|
78
78
|
end
|
79
79
|
|
80
|
+
def execute_recipe!(stack_name, layer, recipe, app_name = Momentum.config[:app_base_name])
|
81
|
+
raise "No recipe provided" unless recipe
|
82
|
+
stack = Momentum::OpsWorks.get_stack(@ow, stack_name)
|
83
|
+
app = Momentum::OpsWorks.get_app(@ow, stack, app_name)
|
84
|
+
layer_names = layer ? [layer] : Momentum.config[:app_layers]
|
85
|
+
layers = Momentum::OpsWorks.get_layers(@ow, stack, layer_names)
|
86
|
+
instance_ids = layers.inject([]) { |ids, l| ids + Momentum::OpsWorks.get_online_instance_ids(@ow, layer_id: l[:layer_id]) }
|
87
|
+
raise 'No online instances found!' if instance_ids.empty?
|
88
|
+
@ow.create_deployment(
|
89
|
+
stack_id: stack[:stack_id],
|
90
|
+
app_id: app[:app_id],
|
91
|
+
command: {
|
92
|
+
name: 'execute_recipes',
|
93
|
+
args: {
|
94
|
+
'recipes' => [recipe.to_s]
|
95
|
+
}
|
96
|
+
},
|
97
|
+
instance_ids: instance_ids
|
98
|
+
)
|
99
|
+
end
|
100
|
+
|
80
101
|
def deploy!(stack_name, migrate_db = false, app_name = Momentum.config[:app_base_name])
|
81
102
|
stack = Momentum::OpsWorks.get_stack(@ow, stack_name)
|
82
103
|
app = Momentum::OpsWorks.get_app(@ow, stack, app_name)
|
@@ -86,11 +107,11 @@ module Momentum::OpsWorks
|
|
86
107
|
@ow.create_deployment(
|
87
108
|
stack_id: stack[:stack_id],
|
88
109
|
app_id: app[:app_id],
|
89
|
-
command: {
|
110
|
+
command: {
|
90
111
|
name: 'deploy',
|
91
112
|
args: {
|
92
113
|
'migrate' => [migrate_db.to_s]
|
93
|
-
}
|
114
|
+
}
|
94
115
|
},
|
95
116
|
instance_ids: instance_ids
|
96
117
|
)
|
data/lib/momentum/railtie.rb
CHANGED
data/lib/momentum/version.rb
CHANGED
data/lib/tasks/ow-console.rake
CHANGED
@@ -10,9 +10,11 @@ namespace :ow do
|
|
10
10
|
name = stack_name(args[:to])
|
11
11
|
stack = Momentum::OpsWorks.get_stack(ow, name)
|
12
12
|
layer = ow.describe_layers(stack_id: stack[:stack_id])[:layers].detect { |l| l[:shortname] == Momentum.config[:rails_console_layer] }
|
13
|
+
raise "No '#{Momentum.config[:rails_console_layer]}' layer found for #{name} stack!" unless layer
|
13
14
|
instance = Momentum::OpsWorks.get_online_instances(ow, layer_id: layer[:layer_id]).sample
|
15
|
+
raise "No '#{Momentum.config[:rails_console_layer]}' instances found for #{name} stack!" unless instance
|
14
16
|
endpoint = Momentum::OpsWorks.get_instance_endpoint(instance)
|
15
|
-
raise "No online #{Momentum.config[:rails_console_layer]} instances found for #{name} stack!" unless endpoint
|
17
|
+
raise "No online '#{Momentum.config[:rails_console_layer]}' instances found for #{name} stack!" unless endpoint
|
16
18
|
|
17
19
|
$stderr.puts "Starting remote console... (use Ctrl-D to exit cleanly)"
|
18
20
|
command = "'sudo su deploy -c \"cd /srv/www/#{Momentum.config[:app_base_name]}/current && RAILS_ENV=#{args[:env] || args[:to]} bundle exec rails console\"'"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
namespace :ow do
|
2
|
+
|
3
|
+
require 'momentum/tasks'
|
4
|
+
|
5
|
+
namespace :execute_recipe do
|
6
|
+
%w{staging production}.each do |env|
|
7
|
+
desc "Execute recipe on #{Momentum.config[:app_base_name]} in the #{stack_name(env)} OpsWorks stack."
|
8
|
+
task(env.to_sym) { Rake::Task['ow:execute_recipe'].invoke(env) }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
desc "Execute a recipe on the given OpsWorks stack."
|
13
|
+
task :execute_recipe, [:to, :layer, :recipe, :aws_id, :aws_secret] do |t, args|
|
14
|
+
require_credentials!(args)
|
15
|
+
deployer = Momentum::OpsWorks::Deployer.new(args[:aws_id], args[:aws_secret])
|
16
|
+
name = stack_name(args[:to])
|
17
|
+
recipe_runner = deployer.execute_recipe!(name, args[:layer], args[:recipe])
|
18
|
+
$stderr.puts "Running #{recipe} #{deployment[:deployment_id]} to #{name}..."
|
19
|
+
deployer.wait_for_success!(recipe_runner)
|
20
|
+
end
|
21
|
+
end
|
metadata
CHANGED
@@ -1,64 +1,70 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: momentum
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 10
|
9
|
+
version: 0.0.10
|
5
10
|
platform: ruby
|
6
|
-
authors:
|
11
|
+
authors:
|
7
12
|
- Joey Aghion
|
8
13
|
autorequire:
|
9
14
|
bindir: bin
|
10
15
|
cert_chain: []
|
11
|
-
|
12
|
-
|
13
|
-
|
16
|
+
|
17
|
+
date: 2015-04-14 00:00:00 -04:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
14
21
|
name: aws-sdk
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ~>
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '1.30'
|
20
|
-
type: :runtime
|
21
22
|
prerelease: false
|
22
|
-
|
23
|
-
requirements:
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
24
25
|
- - ~>
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
|
27
|
-
-
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 1
|
29
|
+
- 30
|
30
|
+
version: "1.30"
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
33
|
+
- !ruby/object:Gem::Dependency
|
28
34
|
name: bundler
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ~>
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '1.3'
|
34
|
-
type: :development
|
35
35
|
prerelease: false
|
36
|
-
|
37
|
-
requirements:
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
38
|
- - ~>
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
|
41
|
-
-
|
42
|
-
|
43
|
-
|
44
|
-
requirements:
|
45
|
-
- - '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 1
|
42
|
+
- 3
|
43
|
+
version: "1.3"
|
48
44
|
type: :development
|
45
|
+
version_requirements: *id002
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rake
|
49
48
|
prerelease: false
|
50
|
-
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
49
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
segments:
|
54
|
+
- 0
|
55
|
+
version: "0"
|
56
|
+
type: :development
|
57
|
+
version_requirements: *id003
|
55
58
|
description: Utilities for working with OpsWorks apps in the style of Artsy Engineering.
|
56
|
-
email:
|
59
|
+
email:
|
57
60
|
- joey@aghion.com
|
58
61
|
executables: []
|
62
|
+
|
59
63
|
extensions: []
|
64
|
+
|
60
65
|
extra_rdoc_files: []
|
61
|
-
|
66
|
+
|
67
|
+
files:
|
62
68
|
- .gitignore
|
63
69
|
- CHANGELOG.md
|
64
70
|
- Gemfile
|
@@ -76,31 +82,39 @@ files:
|
|
76
82
|
- lib/tasks/ow-console.rake
|
77
83
|
- lib/tasks/ow-cookbooks.rake
|
78
84
|
- lib/tasks/ow-deploy.rake
|
85
|
+
- lib/tasks/ow-execute_recipe.rake
|
79
86
|
- lib/tasks/ow-logs.rake
|
80
87
|
- lib/tasks/ow-ssh.rake
|
81
88
|
- momentum.gemspec
|
89
|
+
has_rdoc: true
|
82
90
|
homepage: https://github.com/artsy/momentum
|
83
|
-
licenses:
|
91
|
+
licenses:
|
84
92
|
- MIT
|
85
|
-
metadata: {}
|
86
93
|
post_install_message:
|
87
94
|
rdoc_options: []
|
88
|
-
|
95
|
+
|
96
|
+
require_paths:
|
89
97
|
- lib
|
90
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
-
requirements:
|
92
|
-
- -
|
93
|
-
- !ruby/object:Gem::Version
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
98
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
segments:
|
103
|
+
- 0
|
104
|
+
version: "0"
|
105
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - ">="
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
version: "0"
|
100
112
|
requirements: []
|
113
|
+
|
101
114
|
rubyforge_project:
|
102
|
-
rubygems_version:
|
115
|
+
rubygems_version: 1.3.6
|
103
116
|
signing_key:
|
104
|
-
specification_version:
|
117
|
+
specification_version: 3
|
105
118
|
summary: Utilities for working with OpsWorks apps in the style of Artsy Engineering.
|
106
119
|
test_files: []
|
120
|
+
|
checksums.yaml
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
---
|
2
|
-
SHA1:
|
3
|
-
metadata.gz: e551ddc456b077ea202e4929c18fd1d4364625f8
|
4
|
-
data.tar.gz: 8f501e1026833960b12c1592c0a8556dd6b0a6d9
|
5
|
-
SHA512:
|
6
|
-
metadata.gz: 3e1881e2817372c888ce9ada604a341c2bd4ce78cf93e1de51a3c2758b1babee73da7116af6a59d89d504aa872e4eda0c5f00bc475c06370eb30b98ce955a8c4
|
7
|
-
data.tar.gz: f3c8d38f2fcf10f6c673211886f1e1768690189bbb6a838d8b97ec98b433d8ec52768f15728d4e211e3d08462ed456523b8f1d009027d81c4b98503456147b7a
|