opsicle 0.0.1 → 0.0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +5 -3
- data/bin/opsicle +10 -0
- data/lib/opsicle.rb +1 -0
- data/lib/opsicle/client.rb +4 -0
- data/lib/opsicle/list.rb +40 -0
- data/lib/opsicle/version.rb +1 -1
- data/opsicle.gemspec +3 -2
- data/spec/opsicle/list_spec.rb +31 -0
- metadata +25 -6
data/Gemfile.lock
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
opsicle (0.0.
|
5
|
-
aws-sdk
|
4
|
+
opsicle (0.0.2)
|
5
|
+
aws-sdk (~> 1.30)
|
6
6
|
commander
|
7
|
+
terminal-table
|
7
8
|
|
8
9
|
GEM
|
9
10
|
remote: https://rubygems.org/
|
10
11
|
specs:
|
11
|
-
aws-sdk (1.30.
|
12
|
+
aws-sdk (1.30.1)
|
12
13
|
json (~> 1.4)
|
13
14
|
nokogiri (>= 1.4.4)
|
14
15
|
uuidtools (~> 2.1)
|
@@ -57,6 +58,7 @@ GEM
|
|
57
58
|
diff-lcs (>= 1.1.3, < 2.0)
|
58
59
|
rspec-mocks (2.14.4)
|
59
60
|
slop (3.4.7)
|
61
|
+
terminal-table (1.4.5)
|
60
62
|
thor (0.18.1)
|
61
63
|
timers (1.1.0)
|
62
64
|
uuidtools (2.1.4)
|
data/bin/opsicle
CHANGED
@@ -17,3 +17,13 @@ command :deploy do |c|
|
|
17
17
|
Opsicle::Deploy.new(args.first).execute
|
18
18
|
end
|
19
19
|
end
|
20
|
+
|
21
|
+
command :list do |c|
|
22
|
+
c.syntax = "opsicle list <environment>"
|
23
|
+
c.description = "List all apps the given environment"
|
24
|
+
c.action do |args, options|
|
25
|
+
raise ArgumentError, "Environment is required" unless args.first
|
26
|
+
Opsicle::List.new(args.first).execute
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
data/lib/opsicle.rb
CHANGED
data/lib/opsicle/client.rb
CHANGED
@@ -15,6 +15,10 @@ module Opsicle
|
|
15
15
|
aws_client.create_deployment(command_options(command, options))
|
16
16
|
end
|
17
17
|
|
18
|
+
def api_call(command, options={})
|
19
|
+
aws_client.send(command, options)
|
20
|
+
end
|
21
|
+
|
18
22
|
def command_options(command, options={})
|
19
23
|
config.opsworks_config.merge(options).merge({ command: { name: command } })
|
20
24
|
end
|
data/lib/opsicle/list.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'aws-sdk'
|
2
|
+
require 'terminal-table'
|
3
|
+
require_relative 'client'
|
4
|
+
|
5
|
+
module Opsicle
|
6
|
+
class List
|
7
|
+
attr_reader :client
|
8
|
+
|
9
|
+
def initialize(environment)
|
10
|
+
@client = Client.new(environment)
|
11
|
+
end
|
12
|
+
|
13
|
+
def execute
|
14
|
+
stack_ids = get_stacks
|
15
|
+
apps = get_apps(stack_ids)
|
16
|
+
print(apps)
|
17
|
+
end
|
18
|
+
|
19
|
+
def get_stacks
|
20
|
+
client.api_call('describe_stacks')[:stacks].map{|s| s[:stack_id] }
|
21
|
+
end
|
22
|
+
|
23
|
+
def get_apps(stack_ids)
|
24
|
+
stack_ids.map{ |stack_id| apps_for_stack(stack_id) }.flatten
|
25
|
+
end
|
26
|
+
|
27
|
+
def apps_for_stack(stack_id)
|
28
|
+
client.api_call('describe_apps', stack_id: stack_id)[:apps]
|
29
|
+
end
|
30
|
+
|
31
|
+
def print(apps)
|
32
|
+
puts Terminal::Table.new headings: ['Name', 'Stack Id', 'App Id'], rows: app_data(apps)
|
33
|
+
end
|
34
|
+
|
35
|
+
def app_data(apps)
|
36
|
+
apps.map{|app| [app[:name], app[:stack_id], app[:app_id]] }
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
40
|
+
end
|
data/lib/opsicle/version.rb
CHANGED
data/opsicle.gemspec
CHANGED
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["andrew.fleener@sportngin.com"]
|
11
11
|
spec.description = %q{CLI for the opsworks platform}
|
12
12
|
spec.summary = %q{An opsworks specific abstraction on top of the aws sdk}
|
13
|
-
spec.homepage = ""
|
13
|
+
spec.homepage = "https://github.com/sportngin/opsicle"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
16
|
spec.files = `git ls-files`.split($/)
|
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_dependency "aws-sdk"
|
21
|
+
spec.add_dependency "aws-sdk", "~> 1.30"
|
22
22
|
spec.add_dependency "commander"
|
23
|
+
spec.add_dependency "terminal-table"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.3"
|
25
26
|
spec.add_development_dependency "rake"
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "opsicle/list"
|
3
|
+
|
4
|
+
module Opsicle
|
5
|
+
describe List do
|
6
|
+
subject { List.new('derp') }
|
7
|
+
|
8
|
+
context "#execute" do
|
9
|
+
let(:client) { double }
|
10
|
+
let(:stack_ids) { [1,2,3] }
|
11
|
+
let(:apps) { [{ name: 'test', stack_id: 1, app_id: 1}, { name: 'test2', stack_id: 2, app_id: 2}, { name: 'test3', stack_id: 3, app_id: 3 }] }
|
12
|
+
before do
|
13
|
+
Client.stub(:new).with('derp').and_return(client)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "creates a new deployment" do
|
17
|
+
subject.should_receive(:get_stacks).and_return(stack_ids)
|
18
|
+
subject.should_receive(:get_apps).with(stack_ids).and_return(apps)
|
19
|
+
subject.execute
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
context "#client" do
|
24
|
+
it "generates a new aws client from the given configs" do
|
25
|
+
Client.should_receive(:new).with('derp')
|
26
|
+
subject.client
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opsicle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,10 +9,26 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-12-
|
12
|
+
date: 2013-12-19 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: aws-sdk
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '1.30'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '1.30'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: commander
|
16
32
|
requirement: !ruby/object:Gem::Requirement
|
17
33
|
none: false
|
18
34
|
requirements:
|
@@ -28,7 +44,7 @@ dependencies:
|
|
28
44
|
- !ruby/object:Gem::Version
|
29
45
|
version: '0'
|
30
46
|
- !ruby/object:Gem::Dependency
|
31
|
-
name:
|
47
|
+
name: terminal-table
|
32
48
|
requirement: !ruby/object:Gem::Requirement
|
33
49
|
none: false
|
34
50
|
requirements:
|
@@ -146,13 +162,15 @@ files:
|
|
146
162
|
- lib/opsicle/client.rb
|
147
163
|
- lib/opsicle/config.rb
|
148
164
|
- lib/opsicle/deploy.rb
|
165
|
+
- lib/opsicle/list.rb
|
149
166
|
- lib/opsicle/version.rb
|
150
167
|
- opsicle.gemspec
|
151
168
|
- spec/opsicle/client_spec.rb
|
152
169
|
- spec/opsicle/config_spec.rb
|
153
170
|
- spec/opsicle/deploy_spec.rb
|
171
|
+
- spec/opsicle/list_spec.rb
|
154
172
|
- spec/spec_helper.rb
|
155
|
-
homepage:
|
173
|
+
homepage: https://github.com/sportngin/opsicle
|
156
174
|
licenses:
|
157
175
|
- MIT
|
158
176
|
post_install_message:
|
@@ -167,7 +185,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
167
185
|
version: '0'
|
168
186
|
segments:
|
169
187
|
- 0
|
170
|
-
hash:
|
188
|
+
hash: -2075520144687037526
|
171
189
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
172
190
|
none: false
|
173
191
|
requirements:
|
@@ -176,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
176
194
|
version: '0'
|
177
195
|
segments:
|
178
196
|
- 0
|
179
|
-
hash:
|
197
|
+
hash: -2075520144687037526
|
180
198
|
requirements: []
|
181
199
|
rubyforge_project:
|
182
200
|
rubygems_version: 1.8.25
|
@@ -187,4 +205,5 @@ test_files:
|
|
187
205
|
- spec/opsicle/client_spec.rb
|
188
206
|
- spec/opsicle/config_spec.rb
|
189
207
|
- spec/opsicle/deploy_spec.rb
|
208
|
+
- spec/opsicle/list_spec.rb
|
190
209
|
- spec/spec_helper.rb
|