opsicle 0.2.1 → 0.3.0
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 +8 -8
- data/README.markdown +3 -2
- data/bin/opsicle +81 -49
- data/lib/opsicle.rb +1 -0
- data/lib/opsicle/client.rb +4 -0
- data/lib/opsicle/commands/deploy.rb +11 -17
- data/lib/opsicle/commands/ssh.rb +3 -3
- data/lib/opsicle/commands/ssh_key.rb +1 -1
- data/lib/opsicle/monitor/app.rb +2 -1
- data/lib/opsicle/output.rb +17 -0
- data/lib/opsicle/version.rb +1 -1
- data/opsicle.gemspec +2 -1
- data/spec/opsicle/client_spec.rb +1 -1
- data/spec/opsicle/commands/deploy_spec.rb +13 -12
- data/spec/opsicle/commands/list_spec.rb +1 -1
- data/spec/opsicle/commands/ssh_key_spec.rb +3 -3
- data/spec/opsicle/commands/ssh_spec.rb +3 -2
- data/spec/opsicle/config_spec.rb +1 -1
- data/spec/opsicle/monitor/app_spec.rb +1 -2
- data/spec/opsicle/monitor/panel_spec.rb +1 -2
- data/spec/opsicle/monitor/screen_spec.rb +1 -5
- data/spec/opsicle/monitor/spy/deployments_spec.rb +1 -5
- data/spec/opsicle/monitor/subpanel_spec.rb +1 -1
- metadata +22 -7
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjljYjQ5NzE0M2NhZDU3MWM2MTdjYjFjNzY2NzQ4MmU1MzU2YmE3OA==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NzQxZmI2NTY1MGVjZjIzMjA2NzdjNWRhZjFkMDQxMDUzZTFhZDYyOQ==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
OTAzMjJiODFkMjVjZDc5MTYyMGU4NTg4YzdlMjM2YmJjNmRjMTcyYTBlZDY1
|
10
|
+
MjVhNWNiOWU1NjljZjAzOGZhZTk5NjBhMDE0NThkNDkwOGNhZDk5ZGFjNmUw
|
11
|
+
ZjQ1ZmYwNjQzYzU2OWZhY2M4NjUwMmYzN2U2NWY1YzRlMmRiY2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
OTdiNDgwZmM3MjQxNmM0MWE3NTJiMzlmZDY1NTIyYTg2NDcxOTBiNmJmOGE4
|
14
|
+
ZjIxNzIyZGIyMDc5Y2IyNTkxYTI4ZDVjMGE2YmZkYTk5OTljOTVhMjUxZmE4
|
15
|
+
YzRkNzM4ZmNiMTlkMWEyZGU4MDRjMTJkZGJmYmFhNWRlMzQzNjQ=
|
data/README.markdown
CHANGED
@@ -69,8 +69,9 @@ opsicle deploy staging
|
|
69
69
|
opsicle deploy production
|
70
70
|
|
71
71
|
```
|
72
|
-
|
73
|
-
|
72
|
+
By default, deploying opens the Opsicle Stack Monitor.
|
73
|
+
You may also use `--browser` to open the OpsWorks deployments screen instead,
|
74
|
+
or `--no-monitor` to ignore both monitoring options
|
74
75
|
|
75
76
|
### SSH
|
76
77
|
```bash
|
data/bin/opsicle
CHANGED
@@ -1,85 +1,117 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
|
-
require '
|
3
|
+
require 'gli'
|
4
4
|
require 'opsicle'
|
5
5
|
|
6
|
-
|
7
|
-
program :name, 'opsicle'
|
8
|
-
program :version, Opsicle::VERSION
|
9
|
-
program :description, 'Opsworks Command Line Utility Belt'
|
10
|
-
program :help, 'Documentation', 'For documentation and help in setting up your configuration files, '\
|
11
|
-
'see Opsicle\'s GitHub repo: https://github.com/sportngin/opsicle'
|
6
|
+
include GLI::App
|
12
7
|
|
13
|
-
|
8
|
+
program_desc 'Opsworks Command Line Utility Belt'
|
9
|
+
version Opsicle::VERSION
|
14
10
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
11
|
+
wrap_help_text :verbatim
|
12
|
+
|
13
|
+
program_long_desc """
|
14
|
+
DOCUMENTATION
|
15
|
+
For documentation and help in setting up your configuration files,
|
16
|
+
see Opsicle's GitHub repo: https://github.com/sportngin/opsicle
|
17
|
+
"""
|
18
|
+
|
19
|
+
switch :verbose, :desc => 'Enable Verbose mode for more logging', :negatable => false
|
20
|
+
switch :debug, :desc => 'Enable Debug mode for detailed logs and backtraces', :negatable => false
|
21
|
+
switch :color, :desc => 'Use colored output', :default_value => true
|
22
22
|
|
23
|
+
pre do |global_options, command, options, args|
|
24
|
+
$verbose = global_options[:verbose]
|
25
|
+
$debug = global_options[:debug]
|
26
|
+
$color = global_options[:color]
|
27
|
+
ENV['GLI_DEBUG'] = $debug.to_s
|
28
|
+
true
|
29
|
+
end
|
23
30
|
|
24
|
-
|
31
|
+
on_error do |exception|
|
32
|
+
exit(0) if exception.is_a?(Opsicle::Monitor::QuitMonitor)
|
33
|
+
true
|
34
|
+
end
|
25
35
|
|
36
|
+
desc "Deploy your current app to the given environment stack"
|
37
|
+
arg_name '<environment>'
|
26
38
|
command :deploy do |c|
|
27
|
-
c.
|
28
|
-
c.
|
29
|
-
c.
|
30
|
-
|
31
|
-
|
32
|
-
raise ArgumentError, "Environment is required" unless args.first
|
33
|
-
Opsicle::Deploy.new(args.first).execute(options.__hash__)
|
39
|
+
c.switch [:b, :browser], :desc => "Open the OpsWorks deployments screen for this stack on deploy"
|
40
|
+
c.switch [:m, :monitor], :desc => "Run the Stack Monitor on deploy", :default_value => true
|
41
|
+
c.action do |global_options, options, args|
|
42
|
+
raise ArgumentError, 'You must specify an environment' unless args.first
|
43
|
+
Opsicle::Deploy.new(args.first).execute global_options.merge(options)
|
34
44
|
end
|
35
45
|
end
|
36
46
|
|
47
|
+
desc "List all apps in the given environment stack"
|
48
|
+
arg_name '<environment>'
|
37
49
|
command :list do |c|
|
38
|
-
c.
|
39
|
-
c.description = "List all apps in the given environment stack"
|
40
|
-
c.action do |args, options|
|
50
|
+
c.action do |global_options, options, args|
|
41
51
|
raise ArgumentError, "Environment is required" unless args.first
|
42
|
-
Opsicle::List.new(args.first).execute
|
52
|
+
Opsicle::List.new(args.first).execute global_options.merge options
|
43
53
|
end
|
44
54
|
end
|
45
55
|
|
56
|
+
desc "SSH access to instances in the given environment stack"
|
57
|
+
arg_name '<environment>'
|
46
58
|
command :ssh do |c|
|
47
|
-
c.
|
48
|
-
c.description = "SSH access to instances in the given environment stack"
|
49
|
-
c.action do |args, options|
|
59
|
+
c.action do |global_options, options, args|
|
50
60
|
raise ArgumentError, "Environment is required" unless args.first
|
51
|
-
Opsicle::SSH.new(args.first).execute(options
|
61
|
+
Opsicle::SSH.new(args.first).execute global_options.merge(options)
|
52
62
|
end
|
53
63
|
end
|
54
64
|
|
65
|
+
desc "Set your user SSH key (PUBLIC KEY) for OpsWorks"
|
66
|
+
arg_name '<environment> <key-file>'
|
55
67
|
command 'ssh-key' do |c|
|
56
|
-
c.
|
57
|
-
c.description = "Set your user SSH key (PUBLIC KEY) for OpsWorks"
|
58
|
-
c.action do |args, options|
|
68
|
+
c.action do |global_options, options, args|
|
59
69
|
raise ArgumentError, "Environment is required" unless args.first
|
60
70
|
raise ArgumentError, "ssh public key-file is required" unless args[1]
|
61
|
-
Opsicle::SSHKey.new(*args).execute(options
|
71
|
+
Opsicle::SSHKey.new(*args).execute global_options.merge(options)
|
62
72
|
end
|
63
73
|
end
|
64
74
|
|
75
|
+
desc "Launch the Opsicle Stack Monitor for the given environment stack"
|
76
|
+
arg_name '<environment>'
|
65
77
|
command 'monitor' do |c|
|
66
|
-
c.
|
67
|
-
c.description = "Launch the Opsicle Stack Monitor for the given environment stack"
|
68
|
-
c.action do |args, options|
|
78
|
+
c.action do |global_options, options, args|
|
69
79
|
raise ArgumentError, "Environment is required" unless args.first
|
70
80
|
|
71
|
-
@monitor = Opsicle::Monitor::App.new(args.first, options
|
81
|
+
@monitor = Opsicle::Monitor::App.new(args.first, global_options.merge(options))
|
82
|
+
@monitor.start
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
desc "Show the OpsWorks URL for the given environment stack"
|
87
|
+
long_desc """
|
88
|
+
Shows the full OpsWorks URL to a page in the web interface.
|
72
89
|
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
90
|
+
Acceptable arguments to --page include:
|
91
|
+
stack (default)
|
92
|
+
layers
|
93
|
+
instances
|
94
|
+
apps
|
95
|
+
deployments
|
96
|
+
monitoring
|
97
|
+
resources
|
98
|
+
permissions
|
78
99
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
100
|
+
Example: 'opsicle opsworks-url staging --page=deployments'
|
101
|
+
"""
|
102
|
+
arg_name '<environment>'
|
103
|
+
command 'opsworks-url' do |c|
|
104
|
+
opsworks_pages = %w[stack, layers, instances, apps, deployments, monitoring, resources, permissions]
|
105
|
+
c.flag [:p, :page],
|
106
|
+
:desc => 'Request a specific page in the OpsWorks web interface',
|
107
|
+
:must_match => opsworks_pages,
|
108
|
+
:default_value => 'stack'
|
109
|
+
c.action do |global_options, options, args|
|
110
|
+
raise ArgumentError, "Environment is required" unless args.first
|
111
|
+
|
112
|
+
url = "#{Opsicle::Client.new(args.first).opsworks_url}/#{options[:page]}"
|
113
|
+
Opsicle::Output.say url
|
83
114
|
end
|
84
115
|
end
|
85
|
-
|
116
|
+
|
117
|
+
exit run(ARGV)
|
data/lib/opsicle.rb
CHANGED
data/lib/opsicle/client.rb
CHANGED
@@ -19,6 +19,10 @@ module Opsicle
|
|
19
19
|
aws_client.public_send(command, options)
|
20
20
|
end
|
21
21
|
|
22
|
+
def opsworks_url
|
23
|
+
"https://console.aws.amazon.com/opsworks/home?#/stack/#{@config.opsworks_config[:stack_id]}"
|
24
|
+
end
|
25
|
+
|
22
26
|
def command_options(command, options={})
|
23
27
|
config.opsworks_config.merge(options).merge({ command: { name: command } })
|
24
28
|
end
|
@@ -7,34 +7,28 @@ module Opsicle
|
|
7
7
|
@client = Client.new(environment)
|
8
8
|
end
|
9
9
|
|
10
|
-
def execute(options={})
|
10
|
+
def execute(options={ monitor: true })
|
11
|
+
Output.say "Starting OpsWorks deploy..."
|
11
12
|
response = client.run_command('deploy')
|
12
13
|
|
14
|
+
# Monitoring preferences
|
13
15
|
if options[:browser]
|
14
16
|
open_deploy(response[:deployment_id])
|
15
|
-
|
16
|
-
|
17
|
-
if options[:monitor]
|
17
|
+
elsif options[:monitor] # Default option
|
18
|
+
Output.say_verbose "Starting Stack Monitor..."
|
18
19
|
@monitor = Opsicle::Monitor::App.new(@environment, options)
|
19
|
-
|
20
|
-
begin
|
21
|
-
@monitor.start
|
22
|
-
rescue => e
|
23
|
-
say "<%= color('Uh oh, an error occurred while starting the Opsicle Stack Monitor.', RED) %>"
|
24
|
-
say "<%= color('Use --trace to view stack trace.', RED) %>"
|
25
|
-
|
26
|
-
if options.trace
|
27
|
-
raise
|
28
|
-
end
|
29
|
-
end
|
20
|
+
@monitor.start
|
30
21
|
end
|
22
|
+
|
31
23
|
end
|
32
24
|
|
33
25
|
def open_deploy(deployment_id)
|
34
26
|
if deployment_id
|
35
|
-
|
27
|
+
command = "open 'https://console.aws.amazon.com/opsworks/home?#/stack/#{client.config.opsworks_config[:stack_id]}/deployments'"
|
28
|
+
Output.say_verbose "Executing shell command: #{command}"
|
29
|
+
%x(#{command})
|
36
30
|
else
|
37
|
-
|
31
|
+
Output.say "Deploy failed. No deployment_id was received from OpsWorks", "RED"
|
38
32
|
end
|
39
33
|
end
|
40
34
|
end
|
data/lib/opsicle/commands/ssh.rb
CHANGED
@@ -10,9 +10,9 @@ module Opsicle
|
|
10
10
|
if instances.length == 1
|
11
11
|
choice = 1
|
12
12
|
else
|
13
|
-
say "Choose an Opsworks instance:
|
13
|
+
Output.say "Choose an Opsworks instance:"
|
14
14
|
instances.each_index do |x|
|
15
|
-
say "#{x+1}) #{instances[x][:hostname]}"
|
15
|
+
Output.say "#{x+1}) #{instances[x][:hostname]}"
|
16
16
|
end
|
17
17
|
choice = ask("? ", Integer) { |q| q.in = 1..instances.length }
|
18
18
|
end
|
@@ -20,7 +20,7 @@ module Opsicle
|
|
20
20
|
instance_ip = instances[choice-1][:elastic_ip] || instances[choice-1][:public_ip]
|
21
21
|
|
22
22
|
command = "ssh #{ssh_username}@#{instance_ip}"
|
23
|
-
|
23
|
+
Output.say_verbose "Executing shell command: #{command}"
|
24
24
|
system(command)
|
25
25
|
end
|
26
26
|
|
data/lib/opsicle/monitor/app.rb
CHANGED
@@ -56,7 +56,7 @@ module Opsicle
|
|
56
56
|
@screen.close
|
57
57
|
@screen = nil # Ruby curses lib doesn't have closed?(), so we set to nil, just in case
|
58
58
|
|
59
|
-
|
59
|
+
raise QuitMonitor
|
60
60
|
end
|
61
61
|
|
62
62
|
def restart
|
@@ -143,5 +143,6 @@ module Opsicle
|
|
143
143
|
%x(open 'https://console.aws.amazon.com/opsworks/home?#/stack/#{App.client.config.opsworks_config[:stack_id]}')
|
144
144
|
end
|
145
145
|
end
|
146
|
+
QuitMonitor = Class.new(StandardError)
|
146
147
|
end
|
147
148
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'highline/import'
|
2
|
+
|
3
|
+
module Opsicle
|
4
|
+
module Output
|
5
|
+
def self.say(msg, color_requested=nil)
|
6
|
+
if $color && color_requested
|
7
|
+
super "<%= color('#{msg}', #{color_requested}) %>"
|
8
|
+
else
|
9
|
+
super msg
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.say_verbose(msg, color="MAGENTA")
|
14
|
+
self.say "<%= color('#{msg}', #{color}) %>" if $verbose
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
data/lib/opsicle/version.rb
CHANGED
data/opsicle.gemspec
CHANGED
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "aws-sdk", "~> 1.30"
|
22
|
-
spec.add_dependency "
|
22
|
+
spec.add_dependency "gli"
|
23
|
+
spec.add_dependency "highline"
|
23
24
|
spec.add_dependency "terminal-table"
|
24
25
|
|
25
26
|
spec.add_development_dependency "bundler", "~> 1.3"
|
data/spec/opsicle/client_spec.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require "opsicle
|
3
|
-
require "opsicle/monitor"
|
2
|
+
require "opsicle"
|
4
3
|
|
5
4
|
module Opsicle
|
6
5
|
describe Deploy do
|
@@ -15,30 +14,32 @@ module Opsicle
|
|
15
14
|
|
16
15
|
allow(Monitor::App).to receive(:new).and_return(monitor)
|
17
16
|
allow(monitor).to receive(:start)
|
17
|
+
|
18
|
+
allow(Output).to receive(:say)
|
19
|
+
allow(Output).to receive(:say_verbose)
|
18
20
|
end
|
19
21
|
|
20
|
-
it "creates a new deployment" do
|
22
|
+
it "creates a new deployment and opens stack monitor" do
|
21
23
|
expect(client).to receive(:run_command).with('deploy').and_return({deployment_id: 'derp'})
|
22
24
|
expect(subject).to_not receive(:open_deploy)
|
23
|
-
expect(Monitor::App).
|
25
|
+
expect(Monitor::App).to receive(:new)
|
24
26
|
|
25
27
|
subject.execute
|
26
28
|
end
|
27
29
|
|
28
|
-
it "runs the Opsicle Stack Monitor if monitor option is given" do
|
29
|
-
expect(Monitor::App).to receive(:new).and_return(monitor)
|
30
|
-
expect(monitor).to receive(:start)
|
31
|
-
expect(subject).to_not receive(:open_deploy)
|
32
|
-
|
33
|
-
subject.execute({ monitor: true })
|
34
|
-
end
|
35
|
-
|
36
30
|
it "opens the OpsWorks deployments screen if browser option is given" do
|
37
31
|
expect(subject).to receive(:open_deploy)
|
38
32
|
expect(Monitor::App).to_not receive(:new)
|
39
33
|
|
40
34
|
subject.execute({ browser: true })
|
41
35
|
end
|
36
|
+
|
37
|
+
it "doesn't open the stack monitor or open the browser window when no-monitor option is given" do
|
38
|
+
expect(subject).to_not receive(:open_deploy)
|
39
|
+
expect(Monitor::App).to_not receive(:new)
|
40
|
+
|
41
|
+
subject.execute({ monitor: false })
|
42
|
+
end
|
42
43
|
end
|
43
44
|
|
44
45
|
context "#client" do
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require "opsicle
|
2
|
+
require "opsicle"
|
3
3
|
|
4
4
|
module Opsicle
|
5
5
|
describe SSHKey do
|
@@ -16,14 +16,14 @@ module Opsicle
|
|
16
16
|
context "valid ssh key" do
|
17
17
|
it "confirms that the given file is a public ssh key" do
|
18
18
|
expect(subject).to receive(:validate!)
|
19
|
-
expect(
|
19
|
+
expect(Output).to receive(:say).with(/success/)
|
20
20
|
allow(subject).to receive(:update)
|
21
21
|
subject.execute
|
22
22
|
end
|
23
23
|
|
24
24
|
it "updates the user's ssh-key on opsworks" do
|
25
25
|
allow(subject).to receive(:validate!)
|
26
|
-
expect(
|
26
|
+
expect(Output).to receive(:say).with(/success/)
|
27
27
|
expect(subject).to receive(:update)
|
28
28
|
subject.execute
|
29
29
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require "spec_helper"
|
2
|
-
require "opsicle
|
2
|
+
require "opsicle"
|
3
3
|
|
4
4
|
module Opsicle
|
5
5
|
describe SSH do
|
@@ -12,7 +12,8 @@ module Opsicle
|
|
12
12
|
|
13
13
|
context "#execute" do
|
14
14
|
before do
|
15
|
-
allow(
|
15
|
+
allow(Output).to receive(:say)
|
16
|
+
allow(Output).to receive(:say_verbose)
|
16
17
|
allow(subject).to receive(:ask).and_return(2)
|
17
18
|
allow(subject).to receive(:ssh_username) {"mrderpyman2014"}
|
18
19
|
end
|
data/spec/opsicle/config_spec.rb
CHANGED
@@ -1,9 +1,5 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'opsicle
|
3
|
-
require 'opsicle/monitor/spy/dataspyable'
|
4
|
-
require 'opsicle/monitor/translatable'
|
5
|
-
require 'opsicle/monitor/spy/deployments'
|
6
|
-
require 'opsicle/monitor/app'
|
2
|
+
require 'opsicle'
|
7
3
|
|
8
4
|
describe Opsicle::Monitor::Spy::Deployments do
|
9
5
|
before do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opsicle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Fleener
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -25,19 +25,33 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.30'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: gli
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ! '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ! '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: highline
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ! '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ! '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: terminal-table
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -162,6 +176,7 @@ files:
|
|
162
176
|
- lib/opsicle/monitor/spy/deployments.rb
|
163
177
|
- lib/opsicle/monitor/subpanel.rb
|
164
178
|
- lib/opsicle/monitor/translatable.rb
|
179
|
+
- lib/opsicle/output.rb
|
165
180
|
- lib/opsicle/stack.rb
|
166
181
|
- lib/opsicle/version.rb
|
167
182
|
- opsicle.gemspec
|