aptible-cli 0.8.6 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile +1 -0
- data/README.md +30 -30
- data/lib/aptible/cli/agent.rb +4 -0
- data/lib/aptible/cli/subcommands/apps.rb +64 -14
- data/lib/aptible/cli/subcommands/inspect.rb +51 -0
- data/lib/aptible/cli/version.rb +1 -1
- data/spec/aptible/cli/subcommands/apps_spec.rb +107 -59
- data/spec/aptible/cli/subcommands/inspect_spec.rb +41 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e3e03cae11a2a3bab84c225df322c9fe8c75ab6
|
4
|
+
data.tar.gz: aafef516b5c3bc4996317cf977e3cb403d3f7496
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ef871ee863e4f5e49a82acd02b7062e20c93c11138e3aa3eae2918c82090b0991a198c5166f765b8d75b576a71ac5508ec014774bded52518d9008448dc4597
|
7
|
+
data.tar.gz: 6f40a10270be6929ad61c11a42fb11bc3d68dc3a5d62a3d4713a7101fb4eb065005816ed93f7ad2bc561dc0285fadd4f5ca0991b01efde892da59cde25a5da16
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -28,36 +28,36 @@ From `aptible help`:
|
|
28
28
|
|
29
29
|
```
|
30
30
|
Commands:
|
31
|
-
aptible apps
|
32
|
-
aptible apps:create HANDLE
|
33
|
-
aptible apps:deprovision
|
34
|
-
aptible apps:scale
|
35
|
-
aptible backup:list DB_HANDLE
|
36
|
-
aptible backup:restore [--handle HANDLE] [--size SIZE_GB]
|
37
|
-
aptible config
|
38
|
-
aptible config:add
|
39
|
-
aptible config:rm
|
40
|
-
aptible config:set
|
41
|
-
aptible config:unset
|
42
|
-
aptible db:backup HANDLE
|
43
|
-
aptible db:clone SOURCE DEST
|
44
|
-
aptible db:create HANDLE
|
45
|
-
aptible db:deprovision HANDLE
|
46
|
-
aptible db:dump HANDLE
|
47
|
-
aptible db:execute HANDLE SQL_FILE
|
48
|
-
aptible db:list
|
49
|
-
aptible db:reload HANDLE
|
50
|
-
aptible db:tunnel HANDLE
|
51
|
-
aptible domains
|
52
|
-
aptible help [COMMAND]
|
53
|
-
aptible login
|
54
|
-
aptible logs
|
55
|
-
aptible operation:cancel OPERATION_ID
|
56
|
-
aptible ps
|
57
|
-
aptible rebuild
|
58
|
-
aptible restart
|
59
|
-
aptible ssh [COMMAND]
|
60
|
-
aptible version
|
31
|
+
aptible apps # List all applications
|
32
|
+
aptible apps:create HANDLE # Create a new application
|
33
|
+
aptible apps:deprovision # Deprovision an app
|
34
|
+
aptible apps:scale SERVICE [--container-count COUNT] [--container-size SIZE] # Scale a service
|
35
|
+
aptible backup:list DB_HANDLE # List backups for a database
|
36
|
+
aptible backup:restore [--handle HANDLE] [--size SIZE_GB] # Restore a backup
|
37
|
+
aptible config # Print an app's current configuration
|
38
|
+
aptible config:add # Add an ENV variable to an app
|
39
|
+
aptible config:rm # Remove an ENV variable from an app
|
40
|
+
aptible config:set # Alias for config:add
|
41
|
+
aptible config:unset # Alias for config:rm
|
42
|
+
aptible db:backup HANDLE # Backup a database
|
43
|
+
aptible db:clone SOURCE DEST # Clone a database to create a new one
|
44
|
+
aptible db:create HANDLE # Create a new database
|
45
|
+
aptible db:deprovision HANDLE # Deprovision a database
|
46
|
+
aptible db:dump HANDLE # Dump a remote database to file
|
47
|
+
aptible db:execute HANDLE SQL_FILE # Executes sql against a database
|
48
|
+
aptible db:list # List all databases
|
49
|
+
aptible db:reload HANDLE # Reload a database
|
50
|
+
aptible db:tunnel HANDLE # Create a local tunnel to a database
|
51
|
+
aptible domains # Print an app's current virtual domains
|
52
|
+
aptible help [COMMAND] # Describe available commands or one specific command
|
53
|
+
aptible login # Log in to Aptible
|
54
|
+
aptible logs # Follows logs from a running app or database
|
55
|
+
aptible operation:cancel OPERATION_ID # Cancel a running operation
|
56
|
+
aptible ps # Display running processes for an app - DEPRECATED
|
57
|
+
aptible rebuild # Rebuild an app, and restart its services
|
58
|
+
aptible restart # Restart all services associated with an app
|
59
|
+
aptible ssh [COMMAND] # Run a command against an app
|
60
|
+
aptible version # Print Aptible CLI version
|
61
61
|
```
|
62
62
|
|
63
63
|
## Contributing
|
data/lib/aptible/cli/agent.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'uri'
|
2
|
+
|
1
3
|
require 'aptible/auth'
|
2
4
|
require 'thor'
|
3
5
|
require 'json'
|
@@ -22,6 +24,7 @@ require_relative 'subcommands/restart'
|
|
22
24
|
require_relative 'subcommands/ssh'
|
23
25
|
require_relative 'subcommands/backup'
|
24
26
|
require_relative 'subcommands/operation'
|
27
|
+
require_relative 'subcommands/inspect'
|
25
28
|
|
26
29
|
module Aptible
|
27
30
|
module CLI
|
@@ -41,6 +44,7 @@ module Aptible
|
|
41
44
|
include Subcommands::SSH
|
42
45
|
include Subcommands::Backup
|
43
46
|
include Subcommands::Operation
|
47
|
+
include Subcommands::Inspect
|
44
48
|
|
45
49
|
# Forward return codes on failures.
|
46
50
|
def self.exit_on_failure?
|
@@ -34,20 +34,66 @@ module Aptible
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
-
desc 'apps:scale
|
37
|
+
desc 'apps:scale SERVICE ' \
|
38
|
+
'[--container-count COUNT] [--container-size SIZE]',
|
39
|
+
'Scale a service'
|
38
40
|
app_options
|
39
|
-
option :
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
16384,
|
45
|
-
32768,
|
46
|
-
65536]
|
47
|
-
define_method 'apps:scale' do |type, n|
|
48
|
-
num = Integer(n)
|
41
|
+
option :container_count, type: :numeric
|
42
|
+
option :container_size, type: :numeric
|
43
|
+
option :size, type: :numeric,
|
44
|
+
desc: 'DEPRECATED, use --container-size'
|
45
|
+
define_method 'apps:scale' do |type, *more|
|
49
46
|
app = ensure_app(options)
|
50
47
|
service = app.services.find { |s| s.process_type == type }
|
48
|
+
|
49
|
+
container_count = options[:container_count]
|
50
|
+
container_size = options[:container_size]
|
51
|
+
|
52
|
+
# There are two legacy options we have to process here:
|
53
|
+
# - We used to accept apps:scale SERVICE COUNT
|
54
|
+
# - We used to accept --size
|
55
|
+
case more.size
|
56
|
+
when 0
|
57
|
+
# Noop
|
58
|
+
when 1
|
59
|
+
if container_count.nil?
|
60
|
+
m = yellow('Passing container count as a positional ' \
|
61
|
+
'argument is deprecated, use --container-count')
|
62
|
+
$stderr.puts m
|
63
|
+
container_count = Integer(more.first)
|
64
|
+
else
|
65
|
+
raise Thor::Error, 'Container count was passed via both ' \
|
66
|
+
'the --container-count keyword argument ' \
|
67
|
+
'and a positional argument. ' \
|
68
|
+
'Use only --container-count to proceed.'
|
69
|
+
end
|
70
|
+
else
|
71
|
+
# Unfortunately, Thor does not want to let us easily hook into
|
72
|
+
# its usage formatting, so we have to work around it here.
|
73
|
+
command = thor.commands.fetch('apps:scale')
|
74
|
+
error = ArgumentError.new
|
75
|
+
args = [type] + more
|
76
|
+
thor.handle_argument_error(command, error, args, 1)
|
77
|
+
end
|
78
|
+
|
79
|
+
if options[:size]
|
80
|
+
if container_size.nil?
|
81
|
+
m = yellow('Passing container size via the --size keyword ' \
|
82
|
+
'argument is deprecated, use --container-size')
|
83
|
+
$stderr.puts m
|
84
|
+
container_size = options[:size]
|
85
|
+
else
|
86
|
+
raise Thor::Error, 'Container size was passed via both ' \
|
87
|
+
'--container-size and --size. ' \
|
88
|
+
'Use only --container-size to proceed.'
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
if container_count.nil? && container_size.nil?
|
93
|
+
raise Thor::Error,
|
94
|
+
'Provide at least --container-count or --container-size'
|
95
|
+
end
|
96
|
+
|
51
97
|
if service.nil?
|
52
98
|
valid_types = if app.services.empty?
|
53
99
|
'NONE (deploy the app first)'
|
@@ -58,9 +104,13 @@ module Aptible
|
|
58
104
|
"exist for app #{app.handle}. Valid " \
|
59
105
|
"types: #{valid_types}."
|
60
106
|
end
|
61
|
-
|
62
|
-
|
63
|
-
|
107
|
+
|
108
|
+
# We don't validate any parameters here: API will do that for us.
|
109
|
+
opts = { type: 'scale' }
|
110
|
+
opts[:container_count] = container_count if container_count
|
111
|
+
opts[:container_size] = container_size if container_size
|
112
|
+
|
113
|
+
op = service.create_operation!(opts)
|
64
114
|
attach_to_operation_logs(op)
|
65
115
|
end
|
66
116
|
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module Aptible
|
2
|
+
module CLI
|
3
|
+
module Subcommands
|
4
|
+
module Inspect
|
5
|
+
class InspectResourceCommand < Thor::HiddenCommand
|
6
|
+
def run(instance, args = [])
|
7
|
+
instance.inspect_resource(*args)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def inspect_resource(raw)
|
12
|
+
begin
|
13
|
+
uri = URI(raw)
|
14
|
+
rescue URI::InvalidURIError
|
15
|
+
raise Thor::Error, "Invalid URI: #{raw}"
|
16
|
+
end
|
17
|
+
|
18
|
+
if uri.scheme != 'https'
|
19
|
+
raise "Invalid scheme: #{uri.scheme} (use https)"
|
20
|
+
end
|
21
|
+
|
22
|
+
apis = [Aptible::Auth, Aptible::Api, Aptible::Billing]
|
23
|
+
|
24
|
+
api = apis.find do |klass|
|
25
|
+
uri.host == URI(klass.configuration.root_url).host
|
26
|
+
end
|
27
|
+
|
28
|
+
if api.nil?
|
29
|
+
hosts = apis.map(&:configuration).map(&:root_url).map do |u|
|
30
|
+
URI(u).host
|
31
|
+
end
|
32
|
+
m = "Invalid API: #{uri.host} (valid APIs: #{hosts.join(', ')})"
|
33
|
+
raise Thor::Error, m
|
34
|
+
end
|
35
|
+
|
36
|
+
res = api::Resource.new(token: fetch_token).find_by_url(uri.to_s)
|
37
|
+
puts JSON.pretty_generate(res.body)
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.included(thor)
|
41
|
+
# We have to manually register a command here since we can't override
|
42
|
+
# the inspect method!
|
43
|
+
desc = 'Inspect a resource as JSON by URL'
|
44
|
+
thor.commands['inspect'] = InspectResourceCommand.new(
|
45
|
+
:inspect, desc, desc, 'inspect URL'
|
46
|
+
)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/aptible/cli/version.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
1
3
|
def dummy_strategy_factory(app_handle, env_handle, usable,
|
2
4
|
options_receiver = [])
|
3
5
|
Class.new do
|
@@ -31,51 +33,129 @@ describe Aptible::CLI::Agent do
|
|
31
33
|
allow(Aptible::Api::Account).to receive(:all) { [account] }
|
32
34
|
end
|
33
35
|
|
34
|
-
|
35
|
-
|
36
|
-
{ app: 'hello', environment: 'foobar' }
|
37
|
-
end
|
38
|
-
expect(service).to receive(:create_operation!) { op }
|
39
|
-
expect(subject).to receive(:environment_from_handle)
|
40
|
-
.with('foobar')
|
41
|
-
.and_return(account)
|
42
|
-
expect(subject).to receive(:apps_from_handle).and_return([app])
|
43
|
-
subject.send('apps:scale', 'web', 3)
|
44
|
-
end
|
36
|
+
context 'with environment and app' do
|
37
|
+
let(:base_options) { { app: 'hello', environment: 'foobar' } }
|
45
38
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
.
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
39
|
+
before do
|
40
|
+
expect(subject).to receive(:environment_from_handle)
|
41
|
+
.with('foobar')
|
42
|
+
.and_return(account)
|
43
|
+
|
44
|
+
expect(subject).to receive(:apps_from_handle)
|
45
|
+
.with('hello', account)
|
46
|
+
.and_return([app])
|
47
|
+
end
|
48
|
+
|
49
|
+
def stub_options(**opts)
|
50
|
+
allow(subject).to receive(:options).and_return(base_options.merge(opts))
|
51
|
+
end
|
52
|
+
|
53
|
+
it 'should scale container size and count together' do
|
54
|
+
stub_options(container_count: 3, container_size: 1024)
|
55
|
+
expect($stderr).not_to receive(:puts)
|
56
|
+
expect(service).to receive(:create_operation!)
|
57
|
+
.with(type: 'scale', container_count: 3, container_size: 1024)
|
58
|
+
.and_return(op)
|
59
|
+
subject.send('apps:scale', 'web')
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'should scale container count alone' do
|
63
|
+
stub_options(container_count: 3)
|
64
|
+
expect($stderr).not_to receive(:puts)
|
65
|
+
expect(service).to receive(:create_operation!)
|
66
|
+
.with(type: 'scale', container_count: 3)
|
67
|
+
.and_return(op)
|
68
|
+
subject.send('apps:scale', 'web')
|
69
|
+
end
|
70
|
+
|
71
|
+
it 'should scale container size alone' do
|
72
|
+
stub_options(container_size: 1024)
|
73
|
+
expect($stderr).not_to receive(:puts)
|
74
|
+
expect(service).to receive(:create_operation!)
|
75
|
+
.with(type: 'scale', container_size: 1024)
|
76
|
+
.and_return(op)
|
77
|
+
subject.send('apps:scale', 'web')
|
78
|
+
end
|
79
|
+
|
80
|
+
it 'should fail if neither container_count nor container_size is set' do
|
81
|
+
stub_options
|
82
|
+
expect { subject.send('apps:scale', 'web') }
|
83
|
+
.to raise_error(/provide at least/im)
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'should scale container count (legacy)' do
|
87
|
+
stub_options
|
88
|
+
expect($stderr).to receive(:puts).once
|
89
|
+
expect(service).to receive(:create_operation!)
|
90
|
+
.with(type: 'scale', container_count: 3)
|
91
|
+
.and_return(op)
|
92
|
+
subject.send('apps:scale', 'web', '3')
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'should scale container size (legacy)' do
|
96
|
+
stub_options(size: 90210)
|
97
|
+
expect($stderr).to receive(:puts).once
|
98
|
+
expect(service).to receive(:create_operation!)
|
99
|
+
.with(type: 'scale', container_size: 90210)
|
100
|
+
.and_return(op)
|
101
|
+
subject.send('apps:scale', 'web')
|
102
|
+
end
|
103
|
+
|
104
|
+
it 'should fail when using both current and legacy count' do
|
105
|
+
stub_options(container_count: 2)
|
106
|
+
expect { subject.send('apps:scale', 'web', '3') }
|
107
|
+
.to raise_error(/count was passed via both/im)
|
108
|
+
end
|
109
|
+
|
110
|
+
it 'should fail when using both current and legacy size' do
|
111
|
+
stub_options(container_size: 1024, size: 512)
|
112
|
+
expect { subject.send('apps:scale', 'web') }
|
113
|
+
.to raise_error(/size was passed via both/im)
|
114
|
+
end
|
115
|
+
|
116
|
+
it 'should fail when using too many arguments' do
|
117
|
+
stub_options
|
118
|
+
expect { subject.send('apps:scale', 'web', '3', '4') }
|
119
|
+
.to raise_error(/usage:.*apps:scale/im)
|
120
|
+
end
|
121
|
+
|
122
|
+
it 'should fail if the service does not exist' do
|
123
|
+
stub_options(container_count: 2)
|
124
|
+
|
125
|
+
expect { subject.send('apps:scale', 'potato') }
|
126
|
+
.to raise_error(Thor::Error, /Service.* potato.* does not exist/)
|
127
|
+
end
|
128
|
+
|
129
|
+
it 'should fail if the app has no services' do
|
130
|
+
app.services = []
|
131
|
+
stub_options(container_count: 2)
|
132
|
+
|
133
|
+
expect { subject.send('apps:scale', 'web') }
|
134
|
+
.to raise_error(Thor::Error, /deploy the app first/)
|
135
|
+
end
|
58
136
|
end
|
59
137
|
|
60
138
|
it 'should fail if environment is non-existent' do
|
61
139
|
allow(subject).to receive(:options) do
|
62
|
-
{ environment: 'foo', app: 'web' }
|
140
|
+
{ environment: 'foo', app: 'web', container_count: 2 }
|
63
141
|
end
|
64
142
|
allow(Aptible::Api::Account).to receive(:all) { [] }
|
65
143
|
allow(service).to receive(:create_operation!) { op }
|
66
144
|
|
67
145
|
expect do
|
68
|
-
subject.send('apps:scale', 'web'
|
146
|
+
subject.send('apps:scale', 'web')
|
69
147
|
end.to raise_error(Thor::Error)
|
70
148
|
end
|
71
149
|
|
72
150
|
it 'should fail if app is non-existent' do
|
151
|
+
allow(subject).to receive(:options) { { container_count: 2 } }
|
73
152
|
expect do
|
74
|
-
subject.send('apps:scale', 'web'
|
153
|
+
subject.send('apps:scale', 'web')
|
75
154
|
end.to raise_error(Thor::Error)
|
76
155
|
end
|
77
156
|
|
78
|
-
it 'should fail if number is not a valid number' do
|
157
|
+
it 'should fail if number is not a valid number (legacy)' do
|
158
|
+
expect($stderr).to receive(:puts).once
|
79
159
|
allow(subject).to receive(:options) { { app: 'hello' } }
|
80
160
|
allow(service).to receive(:create_operation) { op }
|
81
161
|
|
@@ -83,38 +163,6 @@ describe Aptible::CLI::Agent do
|
|
83
163
|
subject.send('apps:scale', 'web', 'potato')
|
84
164
|
end.to raise_error(ArgumentError)
|
85
165
|
end
|
86
|
-
|
87
|
-
it 'should fail if the service does not exist' do
|
88
|
-
allow(subject).to receive(:options) do
|
89
|
-
{ app: 'hello', environment: 'foobar' }
|
90
|
-
end
|
91
|
-
expect(subject).to receive(:environment_from_handle)
|
92
|
-
.with('foobar')
|
93
|
-
.and_return(account)
|
94
|
-
expect(subject).to receive(:apps_from_handle).and_return([app])
|
95
|
-
|
96
|
-
expect do
|
97
|
-
subject.send('apps:scale', 'potato', 1)
|
98
|
-
end.to raise_error(Thor::Error, /Service.* potato.* does not exist/)
|
99
|
-
end
|
100
|
-
|
101
|
-
context 'no service' do
|
102
|
-
before { app.services = [] }
|
103
|
-
|
104
|
-
it 'should fail if the app has no services' do
|
105
|
-
allow(subject).to receive(:options) do
|
106
|
-
{ app: 'hello', environment: 'foobar' }
|
107
|
-
end
|
108
|
-
expect(subject).to receive(:environment_from_handle)
|
109
|
-
.with('foobar')
|
110
|
-
.and_return(account)
|
111
|
-
expect(subject).to receive(:apps_from_handle).and_return([app])
|
112
|
-
|
113
|
-
expect do
|
114
|
-
subject.send('apps:scale', 'web', 1)
|
115
|
-
end.to raise_error(Thor::Error, /deploy the app first/)
|
116
|
-
end
|
117
|
-
end
|
118
166
|
end
|
119
167
|
|
120
168
|
describe '#ensure_app' do
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Aptible::CLI::Agent do
|
4
|
+
describe '#inspect_resource' do
|
5
|
+
let(:token) { 'foo token' }
|
6
|
+
before { allow(subject).to receive(:fetch_token).and_return(token) }
|
7
|
+
|
8
|
+
it 'should fail if the URI is invalid' do
|
9
|
+
expect { subject.inspect_resource('^^') }
|
10
|
+
.to raise_error(/invalid uri/im)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should fail if the URI is not for a valid host' do
|
14
|
+
expect { subject.inspect_resource('https://foo.com') }
|
15
|
+
.to raise_error(/invalid api/im)
|
16
|
+
end
|
17
|
+
|
18
|
+
it 'should fail if the scheme is invalid' do
|
19
|
+
# Not necessarily a feature per-se, but the URI will be parsed improperly
|
20
|
+
# if we don't have a scheme.
|
21
|
+
expect { subject.inspect_resource('api.aptible.com') }
|
22
|
+
.to raise_error(/invalid scheme/im)
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'should succeed if the URI is complete' do
|
26
|
+
api = double('api')
|
27
|
+
expect(Aptible::Api::Resource).to receive(:new).with(token: token)
|
28
|
+
.and_return(api)
|
29
|
+
|
30
|
+
res = double('resource', body: { foo: 'bar' })
|
31
|
+
expect(api).to receive(:find_by_url).with('https://api.aptible.com/foo')
|
32
|
+
.and_return(res)
|
33
|
+
|
34
|
+
expect(subject).to receive(:puts) do |body|
|
35
|
+
expect(JSON.parse(body)).to eq('foo' => 'bar')
|
36
|
+
end
|
37
|
+
|
38
|
+
subject.inspect_resource('https://api.aptible.com/foo')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aptible-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Frank Macreery
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-05-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aptible-api
|
@@ -239,6 +239,7 @@ files:
|
|
239
239
|
- lib/aptible/cli/subcommands/config.rb
|
240
240
|
- lib/aptible/cli/subcommands/db.rb
|
241
241
|
- lib/aptible/cli/subcommands/domains.rb
|
242
|
+
- lib/aptible/cli/subcommands/inspect.rb
|
242
243
|
- lib/aptible/cli/subcommands/logs.rb
|
243
244
|
- lib/aptible/cli/subcommands/operation.rb
|
244
245
|
- lib/aptible/cli/subcommands/ps.rb
|
@@ -257,6 +258,7 @@ files:
|
|
257
258
|
- spec/aptible/cli/subcommands/backup_spec.rb
|
258
259
|
- spec/aptible/cli/subcommands/db_spec.rb
|
259
260
|
- spec/aptible/cli/subcommands/domains_spec.rb
|
261
|
+
- spec/aptible/cli/subcommands/inspect_spec.rb
|
260
262
|
- spec/aptible/cli/subcommands/logs_spec.rb
|
261
263
|
- spec/aptible/cli/subcommands/operation_spec.rb
|
262
264
|
- spec/aptible/cli/subcommands/restart_spec.rb
|
@@ -312,6 +314,7 @@ test_files:
|
|
312
314
|
- spec/aptible/cli/subcommands/backup_spec.rb
|
313
315
|
- spec/aptible/cli/subcommands/db_spec.rb
|
314
316
|
- spec/aptible/cli/subcommands/domains_spec.rb
|
317
|
+
- spec/aptible/cli/subcommands/inspect_spec.rb
|
315
318
|
- spec/aptible/cli/subcommands/logs_spec.rb
|
316
319
|
- spec/aptible/cli/subcommands/operation_spec.rb
|
317
320
|
- spec/aptible/cli/subcommands/restart_spec.rb
|