omc 0.0.6 → 0.0.7

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: 47f530e21b36ef261bc1c5312c37eea8d3e43d0a
4
- data.tar.gz: 312737de277a4d458e1a65341f48e3501e9cb7ce
3
+ metadata.gz: 46021d8d49c5f6627c59c726ab9d46ca780cae4e
4
+ data.tar.gz: 399407808e128c45549e0473a85f3f749ba86b30
5
5
  SHA512:
6
- metadata.gz: 0fe52e6a12531b42c63dc1229928f889841b3897cbbc1c8e1ab725a6b6c89db2e6aaa633db9e3ff7c1da256cdea05ce8e0605a050bff34c78dec4ba758b2d27c
7
- data.tar.gz: 4ccee6e1bc5a0b55eacdc3894d2bf7eafbcfcf4351abd22f9a6fd8f6c8d84159a227e922b3d2dcbe6db5049b6c62fed85fc94c09e3493a31247ab5d223c594bb
6
+ metadata.gz: 1f4f9dcbff7fa1a3199aaadd08473f1ad7afcb94dd1a7f6f32275c630e2b1c9ad89f7a13aa0d07309813acbffc2d573f3b700f11eb48fbee516e9f2561bc420f
7
+ data.tar.gz: 8bb6dbb519b9f98230bce973ea1658debc63bf00d3ec5362c9a26322f0b4bf56d75fc7159e958e12dd0551f10005c4793e6625d960093cc75a75f575d1121353
data/lib/omc/cli.rb CHANGED
@@ -7,30 +7,38 @@ require "omc/config"
7
7
  module Omc
8
8
  class Cli < Thor
9
9
  class_option :account, aliases: '-a', optional: true
10
+ class_option :layer, aliases: '-l', optional: true
10
11
 
11
12
  desc 'ssh STACK', 'Connect to an instance on a stack on an account'
12
13
  def ssh(stack)
13
- command = StackCommand.new(user, stack)
14
+ command = StackCommand.new(user, stack, layer: options[:layer])
14
15
  command.ssh
15
16
  end
16
17
 
17
18
  desc 'console STACK', 'Run a rails console on the given stack'
18
19
  method_option :app
19
20
  def console(stack)
20
- command = StackCommand.new(user, stack, options[:app])
21
+ command = StackCommand.new(user, stack, app: options[:app], layer: options[:layer])
21
22
  command.console
22
23
  end
23
24
 
24
25
  desc 'db STACK', 'Connect and run the database client on the given stack'
25
26
  method_option :app
26
27
  def db(stack)
27
- command = StackCommand.new(user, stack, options[:app])
28
+ command = StackCommand.new(user, stack, app: options[:app], layer: options[:layer])
28
29
  command.db
29
30
  end
30
31
 
32
+ desc 'unicorn ACTION STACK', 'Connect and run the given action on the unicorns'
33
+ method_option :app
34
+ def unicorn(action, stack)
35
+ command = StackCommand.new(user, stack, app: options[:app])
36
+ command.unicorn(action)
37
+ end
38
+
31
39
  desc 'status STACK', 'Show the instance status for the given stack'
32
40
  def status(stack)
33
- command = StackCommand.new(user, stack, options[:app])
41
+ command = StackCommand.new(user, stack, app: options[:app], layer: options[:layer])
34
42
  command.status(self)
35
43
  end
36
44
 
data/lib/omc/layer.rb ADDED
@@ -0,0 +1,22 @@
1
+ require 'forwardable'
2
+
3
+ module Omc
4
+ class Layer
5
+ attr_reader :stack, :attributes
6
+
7
+ extend Forwardable
8
+ def_delegators :@attributes, :[]
9
+ def_delegators :stack, :account, :client
10
+
11
+ def initialize stack, attributes
12
+ @stack = stack
13
+ @attributes = attributes
14
+ end
15
+
16
+ def instances
17
+ @instances ||= @stack.instances.select do |i|
18
+ i[:layer_ids].include? self[:layer_id]
19
+ end
20
+ end
21
+ end
22
+ end
data/lib/omc/stack.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'omc/instances'
2
2
  require 'omc/app'
3
+ require 'omc/layer'
3
4
  require 'forwardable'
4
5
 
5
6
  module Omc
@@ -26,5 +27,24 @@ module Omc
26
27
  ::Omc::App.new(self, app)
27
28
  end
28
29
  end
30
+
31
+ def layers
32
+ @layers ||= client.describe_layers(stack_id: self[:stack_id])[:layers].map do |layer|
33
+ ::Omc::Layer.new(self, layer)
34
+ end
35
+ end
36
+
37
+ def execute_recipes(app, recipes: [], name: "execute_recipes")
38
+ client.create_deployment(
39
+ stack_id: self[:stack_id],
40
+ app_id: app[:app_id],
41
+ command: {
42
+ name: name,
43
+ args: {
44
+ "recipes" => recipes
45
+ }
46
+ }
47
+ )
48
+ end
29
49
  end
30
50
  end
@@ -3,10 +3,11 @@ require 'omc/account'
3
3
 
4
4
  module Omc
5
5
  class StackCommand
6
- def initialize user, stack_name, app_name=nil
6
+ def initialize user, stack_name, app: nil, layer: nil
7
7
  @user = user
8
8
  @stack_name = stack_name
9
- @app_name = app_name
9
+ @app_name = app
10
+ @layer_name = layer
10
11
  end
11
12
 
12
13
  def ssh
@@ -21,6 +22,15 @@ module Omc
21
22
  ssh_and_execute "cd /srv/www/#{app[:name]}/current && RAILS_ENV=#{app[:attributes]['RailsEnv']} bundle exec rails db -p"
22
23
  end
23
24
 
25
+ def unicorn(action)
26
+ case action
27
+ when "restart"
28
+ stack.execute_recipes(app, recipes: ["deploy::rails-restart"], name: "restart")
29
+ else
30
+ abort("Unicorn action should be one of [restart]")
31
+ end
32
+ end
33
+
24
34
  def status(thor)
25
35
  details = stack.instances.map do |i|
26
36
  [
@@ -48,8 +58,15 @@ module Omc
48
58
  end
49
59
  end
50
60
 
61
+ def layer
62
+ if @layer_name
63
+ get_by_name(stack.layers, @layer_name, key: :shortname)
64
+ end
65
+ end
66
+
51
67
  def instance
52
- stack.instances.detect(&:online?) || abort("No running instances")
68
+ instances = layer ? layer.instances : stack.instances
69
+ instances.detect(&:online?) || abort("No running instances")
53
70
  end
54
71
 
55
72
  def ssh_host
@@ -64,10 +81,10 @@ module Omc
64
81
  @stack ||= get_by_name(account.stacks, @stack_name)
65
82
  end
66
83
 
67
- def get_by_name collection, name
84
+ def get_by_name collection, name, key: :name
68
85
  collection.detect do |x|
69
- x[:name] == name
70
- end || abort("Can't find #{name.inspect} among #{collection.map{|x| x[:name] }.inspect}")
86
+ x[key] == name
87
+ end || abort("Can't find #{name.inspect} among #{collection.map{|x| x[key] }.inspect}")
71
88
  end
72
89
  end
73
90
  end
data/lib/omc/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Omc
2
- VERSION = '0.0.6'
2
+ VERSION = '0.0.7'
3
3
  end
data/omc.gemspec CHANGED
@@ -23,4 +23,5 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency "bundler", "~> 1.7"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "pry"
26
27
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omc
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.6
4
+ version: 0.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Clarke Brunsdon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-10-28 00:00:00.000000000 Z
11
+ date: 2014-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: thor
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
82
  version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  description:
84
98
  email:
85
99
  - clarke@freerunningtechnologies.com
@@ -100,6 +114,7 @@ files:
100
114
  - lib/omc/cli.rb
101
115
  - lib/omc/config.rb
102
116
  - lib/omc/instances.rb
117
+ - lib/omc/layer.rb
103
118
  - lib/omc/stack.rb
104
119
  - lib/omc/stack_command.rb
105
120
  - lib/omc/version.rb