infopark_opsworks_helpers 0.3.0 → 0.3.1

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: d3956bd41d0ebbbe9dcff978b23b066f7fbe17ae
4
- data.tar.gz: fabfa10077289a3bcaca475989e8335ba8a8a8c0
3
+ metadata.gz: 4f49eee75c534efa1ecb3a0daca009e49a65eda9
4
+ data.tar.gz: e5ce0be36b95a120d4895e911cf8b6abacfa89bb
5
5
  SHA512:
6
- metadata.gz: d5546728127767f9687694672bca26a1a03e0c78e5952b8ae4d8c576523a1495bc2b9772ef7b49cf27ecf6fcea9c4c3ee8db36dc3832a4849a23bfb35ae40d9b
7
- data.tar.gz: d4d9e6bc9394fd923a84e4c37126fb67fb0388fcfec81eb5c792bbe651256ccbf5202bd08af7ba5fc10bdbdff3c29c9b4f44ac0d6b51f7d3c9a3dd94c9fbca88
6
+ metadata.gz: b2cbb1f318536d2d66d647a305f8731d276956615212c390af5e6819dd6a52a2bc15332061a4926d37a676acb79e52ee6acf90f61b8eee5da0cff5e94877ad16
7
+ data.tar.gz: cc09ab81354530ab05ad029e65058e1cc664a0b7afe82fa837381778e93c36b4e47e85dd1002129f654818cb51acda1a8aab42cf2bf6ad7f3412614343bfbea6
@@ -1,5 +1,10 @@
1
1
  require "opsworks_helpers/engine"
2
2
  require "opsworks_helpers/status_checks"
3
+ require "opsworks_helpers/opsworks_client"
4
+ require "opsworks_helpers/opsworks_resource"
5
+ require "opsworks_helpers/deployment"
6
+ require "opsworks_helpers/stack"
7
+ require "opsworks_helpers/app"
3
8
 
4
9
  module OpsworksHelpers
5
10
 
@@ -0,0 +1,19 @@
1
+ module OpsworksHelpers
2
+ class App < OpsworksResource
3
+
4
+ def self.all(stack_id)
5
+ new.all(stack_id)
6
+ end
7
+
8
+ def all(stack_id)
9
+ opsworks.describe_apps(stack_id: stack_id).apps.map do |app|
10
+ self.class.new(app)
11
+ end
12
+ end
13
+
14
+ def id
15
+ opsworks_resource.app_id
16
+ end
17
+
18
+ end
19
+ end
@@ -0,0 +1,56 @@
1
+ begin
2
+ require 'aws-sdk'
3
+ rescue LoadError
4
+ fail 'Please add `aws-sdk` to your Gemfile if you want to use the deployment features.'
5
+ end
6
+
7
+ require 'pry'
8
+ module OpsworksHelpers
9
+ class Deployment < OpsworksResource
10
+
11
+ attr_accessor :command
12
+
13
+ def id
14
+ opsworks_resource.deployment_id
15
+ end
16
+
17
+ def command_name
18
+ command[:name]
19
+ end
20
+
21
+ def create(command, comment: 'Run via in-app rake task')
22
+ @command = command
23
+
24
+ @opsworks_resource = opsworks.create_deployment(
25
+ stack_id: stack_id,
26
+ app_id: app_id,
27
+ command: command,
28
+ comment: comment
29
+ )
30
+ end
31
+
32
+ def deploy(stack:nil, app:nil, comment:nil)
33
+ @stack_id = stack if stack
34
+ @app_id = app if app
35
+
36
+ @command = {
37
+ name: 'deploy',
38
+ args: { migrate: ['true'] }
39
+ }
40
+ create(command, comment: comment)
41
+ end
42
+
43
+ def display_deployment_result
44
+ begin
45
+ puts "[#{id}] Waiting for command '#{command_name}' to finish..."
46
+ opsworks.wait_until(:deployment_successful, deployment_ids: [id])
47
+ puts "[#{id}] Command '#{command_name}' successful."
48
+ true
49
+ rescue ::Aws::Waiters::Errors::WaiterFailed => e
50
+ puts "[#{id}] Command '#{command_name}' failed. Message: #{e.message}"
51
+ false
52
+ end
53
+ end
54
+
55
+ end
56
+ end
@@ -0,0 +1,23 @@
1
+ module OpsworksHelpers
2
+ module OpsworksClient
3
+
4
+ attr_accessor :stack_id, :app_id
5
+
6
+ private
7
+
8
+ def opsworks
9
+ @opsworks ||= Aws::OpsWorks::Client.new(region: 'us-east-1')
10
+ end
11
+
12
+ def stack_id
13
+ @stack_id || ENV['AWS_OPSWORKS_STACK_ID'] ||
14
+ fail('Please provide AWS_OPSWORKS_STACK_ID in env.')
15
+ end
16
+
17
+ def app_id
18
+ @app_id || ENV['AWS_OPSWORKS_APP_ID'] ||
19
+ fail('Please provide AWS_OPSWORKS_APP_ID in env.')
20
+ end
21
+
22
+ end
23
+ end
@@ -0,0 +1,32 @@
1
+ module OpsworksHelpers
2
+ class OpsworksResource
3
+ include OpsworksClient
4
+
5
+ def self.all
6
+ new.all
7
+ end
8
+
9
+ def initialize(resource=nil)
10
+ @opsworks_resource = resource
11
+ end
12
+
13
+ def inspect
14
+ string = "#<#{self.class.name}:#{self.object_id} "
15
+ fields = inspect_fields.map{|field| "#{field}: #{self.send(field)}"}
16
+ string << fields.join(", ") << ">"
17
+ end
18
+
19
+ def name
20
+ opsworks_resource.name
21
+ end
22
+
23
+ private
24
+
25
+ attr_accessor :opsworks_resource
26
+
27
+ def inspect_fields
28
+ %i(id name)
29
+ end
30
+
31
+ end
32
+ end
@@ -0,0 +1,15 @@
1
+ module OpsworksHelpers
2
+ class Stack < OpsworksResource
3
+
4
+ def all
5
+ opsworks.describe_stacks.stacks.map do |stack|
6
+ self.class.new(stack)
7
+ end
8
+ end
9
+
10
+ def id
11
+ opsworks_resource.stack_id
12
+ end
13
+
14
+ end
15
+ end
@@ -1,3 +1,3 @@
1
1
  module OpsworksHelpers
2
- VERSION = "0.3.0"
2
+ VERSION = "0.3.1"
3
3
  end
@@ -1,30 +1,52 @@
1
1
  begin
2
- require 'opsworks_helpers/deploy'
2
+ require 'opsworks_helpers/deployment'
3
3
  rescue
4
4
  end
5
5
 
6
- if defined?(OpsworksHelpers::Deploy)
6
+ if defined?(OpsworksHelpers::Deployment)
7
7
  namespace 'opsworks' do
8
8
 
9
- client = OpsworksHelpers::Deploy.new
9
+ client = OpsworksHelpers::Deployment.new
10
10
 
11
11
  desc 'Deploy application to stack (and migrate database)'
12
12
  task :deploy => :environment do
13
- command_name = 'deploy'
14
- deployment_id = client.deploy({
15
- name: command_name,
16
- args: { migrate: ['true'] }
17
- })
13
+ stacks = OpsworksHelpers::Stack.all
14
+ stack_id = if stacks.size > 1
15
+ STDOUT.puts 'Which stack?'
16
+ stacks.each_with_index do |stack, index|
17
+ STDOUT.puts "#{index + 1}. #{stack.name}"
18
+ end
19
+ input = STDIN.gets.chomp.to_i
20
+
21
+ stacks[input - 1].id
22
+ else
23
+ stacks[0].id
24
+ end
25
+
26
+ apps = OpsworksHelpers::App.all(stack_id)
27
+ app_id = if apps.size > 1
28
+ STDOUT.puts "\nWhich app?"
29
+ apps.each_with_index do |app, index|
30
+ STDOUT.puts "#{index + 1}. #{app.name}"
31
+ end
32
+ input = STDIN.gets.chomp.to_i
33
+
34
+ apps[input - 1].id
35
+ else
36
+ apps[0].id
37
+ end
38
+
39
+ deployment = client.deploy(stack: stack_id, app: app_id)
18
40
 
19
- client.display_deployment_result(command_name, deployment_id)
41
+ client.display_deployment_result
20
42
  end
21
43
 
22
44
  %w(rollback restart start stop configure setup).each do |command_name|
23
45
  desc "Run command '#{command_name}' on OpsWorks"
24
46
  task command_name => :environment do
25
- deployment_id = client.deploy({name: command_name})
47
+ deployment_id = client.create({name: command_name})
26
48
 
27
- client.display_deployment_result(command_name, deployment_id)
49
+ client.display_deployment_result
28
50
  end
29
51
 
30
52
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: infopark_opsworks_helpers
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Infopark AG
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2016-06-22 00:00:00.000000000 Z
12
+ date: 2016-12-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -71,16 +71,16 @@ dependencies:
71
71
  name: rails
72
72
  requirement: !ruby/object:Gem::Requirement
73
73
  requirements:
74
- - - "~>"
74
+ - - "<"
75
75
  - !ruby/object:Gem::Version
76
- version: '4.2'
76
+ version: 5.1.0
77
77
  type: :runtime
78
78
  prerelease: false
79
79
  version_requirements: !ruby/object:Gem::Requirement
80
80
  requirements:
81
- - - "~>"
81
+ - - "<"
82
82
  - !ruby/object:Gem::Version
83
- version: '4.2'
83
+ version: 5.1.0
84
84
  description:
85
85
  email:
86
86
  - info@infopark.de
@@ -92,8 +92,12 @@ files:
92
92
  - app/controllers/opsworks_helpers/application_controller.rb
93
93
  - config/routes.rb
94
94
  - lib/opsworks_helpers.rb
95
- - lib/opsworks_helpers/deploy.rb
95
+ - lib/opsworks_helpers/app.rb
96
+ - lib/opsworks_helpers/deployment.rb
96
97
  - lib/opsworks_helpers/engine.rb
98
+ - lib/opsworks_helpers/opsworks_client.rb
99
+ - lib/opsworks_helpers/opsworks_resource.rb
100
+ - lib/opsworks_helpers/stack.rb
97
101
  - lib/opsworks_helpers/status_checks.rb
98
102
  - lib/opsworks_helpers/version.rb
99
103
  - lib/tasks/opsworks_helpers_tasks.rake
@@ -1,46 +0,0 @@
1
- begin
2
- require 'aws-sdk'
3
- rescue LoadError
4
- fail 'Please add `aws-sdk` to your Gemfile if you want to use the deployment features.'
5
- end
6
-
7
- module OpsworksHelpers
8
- class Deploy
9
-
10
- def deploy(command, comment='Run via in-app rake task')
11
- client.create_deployment(
12
- stack_id: opsworks_stack_id,
13
- app_id: opsworks_app_id,
14
- command: command,
15
- comment: comment
16
- ).deployment_id
17
- end
18
-
19
- def display_deployment_result(command_name, deployment_id)
20
- begin
21
- puts "[#{deployment_id}] Waiting for command '#{command_name}' to finish..."
22
- client.wait_until(:deployment_successful, deployment_ids: [deployment_id])
23
- puts "[#{deployment_id}] Command '#{command_name}' successful."
24
- true
25
- rescue ::Aws::Waiters::Errors::WaiterFailed => e
26
- puts "[#{deployment_id}] Command '#{command_name}' failed. Message: #{e.message}"
27
- false
28
- end
29
- end
30
-
31
- private
32
-
33
- def client
34
- @client ||= Aws::OpsWorks::Client.new(region: 'us-east-1')
35
- end
36
-
37
- def opsworks_stack_id
38
- ENV['AWS_OPSWORKS_STACK_ID'] || fail('Please provide AWS_OPSWORKS_STACK_ID in env.')
39
- end
40
-
41
- def opsworks_app_id
42
- ENV['AWS_OPSWORKS_APP_ID'] || fail('Please provide AWS_OPSWORKS_APP_ID in env.')
43
- end
44
-
45
- end
46
- end