aptible-cli 0.18.3 → 0.19.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 +4 -4
- data/README.md +63 -50
- data/lib/aptible/cli/agent.rb +6 -2
- data/lib/aptible/cli/helpers/log_drain.rb +85 -0
- data/lib/aptible/cli/helpers/metric_drain.rb +39 -0
- data/lib/aptible/cli/resource_formatter.rb +43 -3
- data/lib/aptible/cli/subcommands/apps.rb +5 -40
- data/lib/aptible/cli/subcommands/backup.rb +15 -7
- data/lib/aptible/cli/subcommands/db.rb +23 -20
- data/lib/aptible/cli/subcommands/log_drain.rb +159 -0
- data/lib/aptible/cli/subcommands/metric_drain.rb +137 -0
- data/lib/aptible/cli/version.rb +1 -1
- data/spec/aptible/cli/subcommands/apps_spec.rb +0 -47
- data/spec/aptible/cli/subcommands/backup_spec.rb +1 -1
- data/spec/aptible/cli/subcommands/db_spec.rb +0 -26
- data/spec/aptible/cli/subcommands/log_drain_spec.rb +207 -0
- data/spec/aptible/cli/subcommands/metric_drain_spec.rb +183 -0
- data/spec/fabricators/account_fabricator.rb +2 -0
- data/spec/fabricators/log_drain_fabricator.rb +21 -0
- data/spec/fabricators/metric_drain_fabricator.rb +8 -0
- metadata +14 -5
- data/lib/aptible/cli/subcommands/domains.rb +0 -40
- data/spec/aptible/cli/subcommands/domains_spec.rb +0 -76
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ee325f4c1746513670e64830cd10d8856fc39cc96e836c8f822e4c34ed6c45ea
|
4
|
+
data.tar.gz: 0dab373981390ea9d3429a6f0f43634eef13285bd090542329866bb1ff24620c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 27fb8c12ceb02f977f29777bd418a2aa943c754d6b8cdc6a37ee55995bbe4a45dea9683c7191b4529017484b37dd3ef6dfcd3f2d70d2010ea032a0d1199409fd
|
7
|
+
data.tar.gz: b30888eb2d2855b388d04013eca773f4e69f77734c92aeee442499e7a266708c5a85800e0552ad0e739a40d1beb41956babcc4a2b9a0483d12be86939ac95c32
|
data/README.md
CHANGED
@@ -28,56 +28,69 @@ From `aptible help`:
|
|
28
28
|
<!-- BEGIN USAGE -->
|
29
29
|
```
|
30
30
|
Commands:
|
31
|
-
aptible apps
|
32
|
-
aptible apps:create HANDLE
|
33
|
-
aptible apps:deprovision
|
34
|
-
aptible apps:scale SERVICE [--container-count COUNT] [--container-size SIZE_MB]
|
35
|
-
aptible backup:list DB_HANDLE
|
36
|
-
aptible backup:orphaned
|
37
|
-
aptible backup:purge BACKUP_ID
|
38
|
-
aptible backup:restore BACKUP_ID [--environment ENVIRONMENT_HANDLE] [--handle HANDLE] [--container-size SIZE_MB] [--disk-size SIZE_GB] [--key-arn KEY_ARN]
|
39
|
-
aptible config
|
40
|
-
aptible config:add [VAR1=VAL1] [VAR2=VAL2] [...]
|
41
|
-
aptible config:rm [VAR1] [VAR2] [...]
|
42
|
-
aptible config:set [VAR1=VAL1] [VAR2=VAL2] [...]
|
43
|
-
aptible config:unset [VAR1] [VAR2] [...]
|
44
|
-
aptible db:backup HANDLE
|
45
|
-
aptible db:clone SOURCE DEST
|
46
|
-
aptible db:create HANDLE [--type TYPE] [--version VERSION] [--container-size SIZE_MB] [--disk-size SIZE_GB] [--key-arn KEY_ARN]
|
47
|
-
aptible db:deprovision HANDLE
|
48
|
-
aptible db:dump HANDLE [pg_dump options]
|
49
|
-
aptible db:execute HANDLE SQL_FILE [--on-error-stop]
|
50
|
-
aptible db:list
|
51
|
-
aptible db:modify HANDLE [--iops IOPS] [--volume-type [gp2, gp3]]
|
52
|
-
aptible db:reload HANDLE
|
53
|
-
aptible db:replicate HANDLE REPLICA_HANDLE [--container-size SIZE_MB] [--disk-size SIZE_GB] [--logical --version VERSION] [--key-arn KEY_ARN]
|
54
|
-
aptible db:restart HANDLE [--container-size SIZE_MB] [--disk-size SIZE_GB] [--iops IOPS] [--volume-type [gp2, gp3]]
|
55
|
-
aptible db:tunnel HANDLE
|
56
|
-
aptible db:url HANDLE
|
57
|
-
aptible db:versions
|
58
|
-
aptible deploy [OPTIONS] [VAR1=VAL1] [VAR2=VAL2] [...]
|
59
|
-
aptible
|
60
|
-
aptible endpoints:database
|
61
|
-
aptible endpoints:
|
62
|
-
aptible endpoints:https:
|
63
|
-
aptible endpoints:
|
64
|
-
aptible endpoints:
|
65
|
-
aptible endpoints:
|
66
|
-
aptible endpoints:tcp:
|
67
|
-
aptible endpoints:
|
68
|
-
aptible endpoints:tls:
|
69
|
-
aptible
|
70
|
-
aptible environment:
|
71
|
-
aptible
|
72
|
-
aptible
|
73
|
-
aptible
|
74
|
-
aptible
|
75
|
-
aptible
|
76
|
-
aptible
|
77
|
-
aptible
|
78
|
-
aptible
|
79
|
-
aptible
|
80
|
-
aptible
|
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_MB] # Scale a service
|
35
|
+
aptible backup:list DB_HANDLE # List backups for a database
|
36
|
+
aptible backup:orphaned # List backups associated with deprovisioned databases
|
37
|
+
aptible backup:purge BACKUP_ID # Permanently delete a backup and any copies of it
|
38
|
+
aptible backup:restore BACKUP_ID [--environment ENVIRONMENT_HANDLE] [--handle HANDLE] [--container-size SIZE_MB] [--disk-size SIZE_GB] [--key-arn KEY_ARN] # Restore a backup
|
39
|
+
aptible config # Print an app's current configuration
|
40
|
+
aptible config:add [VAR1=VAL1] [VAR2=VAL2] [...] # Add an ENV variable to an app
|
41
|
+
aptible config:rm [VAR1] [VAR2] [...] # Remove an ENV variable from an app
|
42
|
+
aptible config:set [VAR1=VAL1] [VAR2=VAL2] [...] # Add an ENV variable to an app
|
43
|
+
aptible config:unset [VAR1] [VAR2] [...] # Remove an ENV variable from an app
|
44
|
+
aptible db:backup HANDLE # Backup a database
|
45
|
+
aptible db:clone SOURCE DEST # Clone a database to create a new one
|
46
|
+
aptible db:create HANDLE [--type TYPE] [--version VERSION] [--container-size SIZE_MB] [--disk-size SIZE_GB] [--key-arn KEY_ARN] # Create a new database
|
47
|
+
aptible db:deprovision HANDLE # Deprovision a database
|
48
|
+
aptible db:dump HANDLE [pg_dump options] # Dump a remote database to file
|
49
|
+
aptible db:execute HANDLE SQL_FILE [--on-error-stop] # Executes sql against a database
|
50
|
+
aptible db:list # List all databases
|
51
|
+
aptible db:modify HANDLE [--iops IOPS] [--volume-type [gp2, gp3]] # Modify a database disk
|
52
|
+
aptible db:reload HANDLE # Reload a database
|
53
|
+
aptible db:replicate HANDLE REPLICA_HANDLE [--container-size SIZE_MB] [--disk-size SIZE_GB] [--logical --version VERSION] [--key-arn KEY_ARN] # Create a replica/follower of a database
|
54
|
+
aptible db:restart HANDLE [--container-size SIZE_MB] [--disk-size SIZE_GB] [--iops IOPS] [--volume-type [gp2, gp3]] # Restart a database
|
55
|
+
aptible db:tunnel HANDLE # Create a local tunnel to a database
|
56
|
+
aptible db:url HANDLE # Display a database URL
|
57
|
+
aptible db:versions # List available database versions
|
58
|
+
aptible deploy [OPTIONS] [VAR1=VAL1] [VAR2=VAL2] [...] # Deploy an app
|
59
|
+
aptible endpoints:database:create DATABASE # Create a Database Endpoint
|
60
|
+
aptible endpoints:deprovision [--app APP | --database DATABASE] ENDPOINT_HOSTNAME # Deprovision an App or Database Endpoint
|
61
|
+
aptible endpoints:https:create [--app APP] SERVICE # Create an App HTTPS Endpoint
|
62
|
+
aptible endpoints:https:modify [--app APP] ENDPOINT_HOSTNAME # Modify an App HTTPS Endpoint
|
63
|
+
aptible endpoints:list [--app APP | --database DATABASE] # List Endpoints for an App or Database
|
64
|
+
aptible endpoints:renew [--app APP] ENDPOINT_HOSTNAME # Renew an App Managed TLS Endpoint
|
65
|
+
aptible endpoints:tcp:create [--app APP] SERVICE # Create an App TCP Endpoint
|
66
|
+
aptible endpoints:tcp:modify [--app APP] ENDPOINT_HOSTNAME # Modify an App TCP Endpoint
|
67
|
+
aptible endpoints:tls:create [--app APP] SERVICE # Create an App TLS Endpoint
|
68
|
+
aptible endpoints:tls:modify [--app APP] ENDPOINT_HOSTNAME # Modify an App TLS Endpoint
|
69
|
+
aptible environment:ca_cert # Retrieve the CA certificate associated with the environment
|
70
|
+
aptible environment:list # List all environments
|
71
|
+
aptible help [COMMAND] # Describe available commands or one specific command
|
72
|
+
aptible log_drain:create:datadog HANDLE --url DATADOG_URL --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a Datadog Log Drain
|
73
|
+
aptible log_drain:create:elasticsearch HANDLE --db DATABASE_HANDLE --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create an Elasticsearch Log Drain
|
74
|
+
aptible log_drain:create:https HANDLE --url URL --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a HTTPS Drain
|
75
|
+
aptible log_drain:create:logdna HANDLE --url LOGDNA_URL --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a LogDNA Log Drain
|
76
|
+
aptible log_drain:create:papertrail HANDLE --host PAPERTRAIL_HOST --port PAPERTRAIL_PORT --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a Papertrail Log Drain
|
77
|
+
aptible log_drain:create:sumologic HANDLE --url SUMOLOGIC_URL --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a Sumologic Drain
|
78
|
+
aptible log_drain:create:syslog HANDLE --host SYSLOG_HOST --port SYSLOG_PORT [--token TOKEN] --environment ENVIRONMENT [--drain-apps true/false] [--drain_databases true/false] [--drain_ephemeral_sessions true/false] [--drain_proxies true/false] # Create a Papertrail Log Drain
|
79
|
+
aptible log_drain:deprovision HANDLE --environment ENVIRONMENT # Deprovisions a log drain
|
80
|
+
aptible log_drain:list # List all Log Drains
|
81
|
+
aptible login # Log in to Aptible
|
82
|
+
aptible logs [--app APP | --database DATABASE] # Follows logs from a running app or database
|
83
|
+
aptible metric_drain:create:datadog HANDLE --api_key DATADOG_API_KEY --environment ENVIRONMENT # Create a Datadog Metric Drain
|
84
|
+
aptible metric_drain:create:influxdb HANDLE --db DATABASE_HANDLE --environment ENVIRONMENT # Create an InfluxDB Metric Drain
|
85
|
+
aptible metric_drain:create:influxdb:custom HANDLE --username USERNAME --password PASSWORD --url URL_INCLUDING_PORT # Create an InfluxDB Metric Drain
|
86
|
+
aptible metric_drain:deprovision HANDLE --environment ENVIRONMENT # Deprovisions a Metric Drain
|
87
|
+
aptible metric_drain:list # List all Metric Drains
|
88
|
+
aptible operation:cancel OPERATION_ID # Cancel a running operation
|
89
|
+
aptible rebuild # Rebuild an app, and restart its services
|
90
|
+
aptible restart # Restart all services associated with an app
|
91
|
+
aptible services # List Services for an App
|
92
|
+
aptible ssh [COMMAND] # Run a command against an app
|
93
|
+
aptible version # Print Aptible CLI version
|
81
94
|
```
|
82
95
|
<!-- END USAGE -->
|
83
96
|
|
data/lib/aptible/cli/agent.rb
CHANGED
@@ -19,11 +19,12 @@ require_relative 'helpers/tunnel'
|
|
19
19
|
require_relative 'helpers/system'
|
20
20
|
require_relative 'helpers/security_key'
|
21
21
|
require_relative 'helpers/config_path'
|
22
|
+
require_relative 'helpers/log_drain'
|
23
|
+
require_relative 'helpers/metric_drain'
|
22
24
|
|
23
25
|
require_relative 'subcommands/apps'
|
24
26
|
require_relative 'subcommands/config'
|
25
27
|
require_relative 'subcommands/db'
|
26
|
-
require_relative 'subcommands/domains'
|
27
28
|
require_relative 'subcommands/environment'
|
28
29
|
require_relative 'subcommands/logs'
|
29
30
|
require_relative 'subcommands/rebuild'
|
@@ -35,6 +36,8 @@ require_relative 'subcommands/backup'
|
|
35
36
|
require_relative 'subcommands/operation'
|
36
37
|
require_relative 'subcommands/inspect'
|
37
38
|
require_relative 'subcommands/endpoints'
|
39
|
+
require_relative 'subcommands/log_drain'
|
40
|
+
require_relative 'subcommands/metric_drain'
|
38
41
|
|
39
42
|
module Aptible
|
40
43
|
module CLI
|
@@ -48,7 +51,6 @@ module Aptible
|
|
48
51
|
include Subcommands::Apps
|
49
52
|
include Subcommands::Config
|
50
53
|
include Subcommands::DB
|
51
|
-
include Subcommands::Domains
|
52
54
|
include Subcommands::Environment
|
53
55
|
include Subcommands::Logs
|
54
56
|
include Subcommands::Rebuild
|
@@ -60,6 +62,8 @@ module Aptible
|
|
60
62
|
include Subcommands::Operation
|
61
63
|
include Subcommands::Inspect
|
62
64
|
include Subcommands::Endpoints
|
65
|
+
include Subcommands::LogDrain
|
66
|
+
include Subcommands::MetricDrain
|
63
67
|
|
64
68
|
# Forward return codes on failures.
|
65
69
|
def self.exit_on_failure?
|
@@ -0,0 +1,85 @@
|
|
1
|
+
module Aptible
|
2
|
+
module CLI
|
3
|
+
module Helpers
|
4
|
+
module LogDrain
|
5
|
+
include Helpers::Token
|
6
|
+
|
7
|
+
def create_log_drain(account, drain_opts)
|
8
|
+
drain = account.create_log_drain!(drain_opts)
|
9
|
+
op = drain.create_operation(type: :provision)
|
10
|
+
|
11
|
+
if op.errors.any?
|
12
|
+
# NOTE: If we fail to provision the log drain, we should try and
|
13
|
+
# clean it up immediately.
|
14
|
+
drain.create_operation(type: :deprovision)
|
15
|
+
raise Thor::Error, op.errors.full_messages.first
|
16
|
+
end
|
17
|
+
|
18
|
+
attach_to_operation_logs(op)
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_https_based_log_drain(handle, options, url_format_msg: nil)
|
22
|
+
account = ensure_environment(options)
|
23
|
+
url = ensure_url(options, url_format_msg: url_format_msg)
|
24
|
+
|
25
|
+
opts = {
|
26
|
+
handle: handle,
|
27
|
+
url: url,
|
28
|
+
drain_apps: options[:drain_apps],
|
29
|
+
drain_databases: options[:drain_databases],
|
30
|
+
drain_ephemeral_sessions: options[:drain_ephemeral_sessions],
|
31
|
+
drain_proxies: options[:drain_proxies],
|
32
|
+
drain_type: :https_post
|
33
|
+
}
|
34
|
+
create_log_drain(account, opts)
|
35
|
+
end
|
36
|
+
|
37
|
+
def create_syslog_based_log_drain(handle, options)
|
38
|
+
account = ensure_environment(options)
|
39
|
+
|
40
|
+
opts = {
|
41
|
+
handle: handle,
|
42
|
+
drain_host: options[:host],
|
43
|
+
drain_port: options[:port],
|
44
|
+
logging_token: options[:token],
|
45
|
+
drain_apps: options[:drain_apps],
|
46
|
+
drain_databases: options[:drain_databases],
|
47
|
+
drain_ephemeral_sessions: options[:drain_ephemeral_sessions],
|
48
|
+
drain_proxies: options[:drain_proxies],
|
49
|
+
drain_type: :syslog_tls_tcp
|
50
|
+
}
|
51
|
+
create_log_drain(account, opts)
|
52
|
+
end
|
53
|
+
|
54
|
+
def ensure_url(options, url_format_msg: nil)
|
55
|
+
msg = '--url is required.'
|
56
|
+
msg = "#{msg} #{url_format_msg}" unless url_format_msg.nil?
|
57
|
+
|
58
|
+
url = options[:url]
|
59
|
+
raise Thor::Error, msg if url.nil?
|
60
|
+
|
61
|
+
# API already does url validation, so I'm not going
|
62
|
+
# to duplicate that logic here, even if it would
|
63
|
+
# get us an error faster
|
64
|
+
url
|
65
|
+
end
|
66
|
+
|
67
|
+
def ensure_log_drain(account, handle)
|
68
|
+
drains = account.log_drains.select { |d| d.handle == handle }
|
69
|
+
|
70
|
+
if drains.empty?
|
71
|
+
raise Thor::Error, "No drain found with handle #{handle}"
|
72
|
+
end
|
73
|
+
|
74
|
+
# Log Drain handles are globally unique, so this is excessive
|
75
|
+
unless drains.length == 1
|
76
|
+
raise Thor::Error, "#{drains.length} drains found with handle "\
|
77
|
+
"#{handle}"
|
78
|
+
end
|
79
|
+
|
80
|
+
drains.first
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
module Aptible
|
2
|
+
module CLI
|
3
|
+
module Helpers
|
4
|
+
module MetricDrain
|
5
|
+
include Helpers::Token
|
6
|
+
|
7
|
+
def create_metric_drain(account, drain_opts)
|
8
|
+
drain = account.create_metric_drain!(drain_opts)
|
9
|
+
op = drain.create_operation(type: :provision)
|
10
|
+
|
11
|
+
if op.errors.any?
|
12
|
+
# NOTE: If we fail to provision the log drain, we should try and
|
13
|
+
# clean it up immediately.
|
14
|
+
drain.create_operation(type: :deprovision)
|
15
|
+
raise Thor::Error, op.errors.full_messages.first
|
16
|
+
end
|
17
|
+
|
18
|
+
attach_to_operation_logs(op)
|
19
|
+
end
|
20
|
+
|
21
|
+
def ensure_metric_drain(account, handle)
|
22
|
+
drains = account.metric_drains.select { |d| d.handle == handle }
|
23
|
+
|
24
|
+
if drains.empty?
|
25
|
+
raise Thor::Error, "No drain found with handle #{handle}"
|
26
|
+
end
|
27
|
+
|
28
|
+
# Metric Drain handles are globally unique, so this is excessive
|
29
|
+
unless drains.length == 1
|
30
|
+
raise Thor::Error, "#{drains.length} drains found with handle "\
|
31
|
+
"#{handle}"
|
32
|
+
end
|
33
|
+
|
34
|
+
drains.first
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -5,8 +5,18 @@ module Aptible
|
|
5
5
|
NO_NESTING = Object.new.freeze
|
6
6
|
|
7
7
|
def inject_backup(node, backup, include_db: false)
|
8
|
+
bu_operation = begin
|
9
|
+
backup.created_from_operation
|
10
|
+
rescue HyperResource::ClientError
|
11
|
+
nil
|
12
|
+
end
|
13
|
+
|
8
14
|
origin = if backup.manual && !backup.copied_from
|
9
|
-
|
15
|
+
if bu_operation
|
16
|
+
"manual, #{bu_operation.user_email}"
|
17
|
+
else
|
18
|
+
'manual, unknown'
|
19
|
+
end
|
10
20
|
elsif backup.manual && backup.copied_from
|
11
21
|
'manual, copy'
|
12
22
|
elsif backup.copied_from
|
@@ -40,10 +50,10 @@ module Aptible
|
|
40
50
|
end
|
41
51
|
end
|
42
52
|
|
43
|
-
if
|
53
|
+
if bu_operation && \
|
44
54
|
backup.manual && !backup.copied_from
|
45
55
|
node.keyed_object('created_from_operation', 'id') do |n|
|
46
|
-
inject_operation(n,
|
56
|
+
inject_operation(n, bu_operation)
|
47
57
|
end
|
48
58
|
end
|
49
59
|
end
|
@@ -196,6 +206,36 @@ module Aptible
|
|
196
206
|
attach_service(node, service)
|
197
207
|
end
|
198
208
|
|
209
|
+
def inject_log_drain(node, log_drain, account)
|
210
|
+
node.value('id', log_drain.id)
|
211
|
+
node.value('handle', log_drain.handle)
|
212
|
+
node.value('drain_type', log_drain.drain_type)
|
213
|
+
node.value('created_at', log_drain.created_at)
|
214
|
+
node.value('drain_apps', log_drain.drain_apps)
|
215
|
+
node.value('drain_databases', log_drain.drain_databases)
|
216
|
+
node.value('drain_ephemeral_sessions',
|
217
|
+
log_drain.drain_ephemeral_sessions)
|
218
|
+
node.value('drain_proxies', log_drain.drain_proxies)
|
219
|
+
|
220
|
+
optional_attrs = %w(drain_username drain_host drain_port url)
|
221
|
+
optional_attrs.each do |attr|
|
222
|
+
value = log_drain.attributes[attr]
|
223
|
+
node.value(attr, value) unless value.nil?
|
224
|
+
end
|
225
|
+
|
226
|
+
attach_account(node, account)
|
227
|
+
end
|
228
|
+
|
229
|
+
def inject_metric_drain(node, metric_drain, account)
|
230
|
+
node.value('id', metric_drain.id)
|
231
|
+
node.value('handle', metric_drain.handle)
|
232
|
+
node.value('drain_type', metric_drain.drain_type)
|
233
|
+
node.value('created_at', metric_drain.created_at)
|
234
|
+
node.value('drain_configuration', metric_drain.drain_configuration)
|
235
|
+
|
236
|
+
attach_account(node, account)
|
237
|
+
end
|
238
|
+
|
199
239
|
private
|
200
240
|
|
201
241
|
def attach_account(node, account)
|
@@ -52,52 +52,17 @@ module Aptible
|
|
52
52
|
app_options
|
53
53
|
option :container_count, type: :numeric
|
54
54
|
option :container_size, type: :numeric
|
55
|
-
|
56
|
-
desc: 'DEPRECATED, use --container-size'
|
57
|
-
define_method 'apps:scale' do |type, *more|
|
55
|
+
define_method 'apps:scale' do |type|
|
58
56
|
service = ensure_service(options, type)
|
59
57
|
|
60
58
|
container_count = options[:container_count]
|
61
59
|
container_size = options[:container_size]
|
62
60
|
|
63
|
-
# There are two legacy options we have to process here:
|
64
|
-
# - We used to accept apps:scale SERVICE COUNT
|
65
|
-
# - We used to accept --size
|
66
|
-
case more.size
|
67
|
-
when 0
|
68
|
-
# Noop
|
69
|
-
when 1
|
70
|
-
if container_count.nil?
|
71
|
-
m = 'Passing container count as a positional ' \
|
72
|
-
'argument is deprecated, use --container-count'
|
73
|
-
CLI.logger.warn(m)
|
74
|
-
container_count = Integer(more.first)
|
75
|
-
else
|
76
|
-
raise Thor::Error, 'Container count was passed via both ' \
|
77
|
-
'the --container-count keyword argument ' \
|
78
|
-
'and a positional argument. ' \
|
79
|
-
'Use only --container-count to proceed.'
|
80
|
-
end
|
81
|
-
else
|
82
|
-
# Unfortunately, Thor does not want to let us easily hook into
|
83
|
-
# its usage formatting, so we have to work around it here.
|
84
|
-
command = thor.commands.fetch('apps:scale')
|
85
|
-
error = ArgumentError.new
|
86
|
-
args = [type] + more
|
87
|
-
thor.handle_argument_error(command, error, args, 1)
|
88
|
-
end
|
89
|
-
|
90
61
|
if options[:size]
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
container_size = options[:size]
|
96
|
-
else
|
97
|
-
raise Thor::Error, 'Container size was passed via both ' \
|
98
|
-
'--container-size and --size. ' \
|
99
|
-
'Use only --container-size to proceed.'
|
100
|
-
end
|
62
|
+
m = 'You have used the "--size" option to specify a container '\
|
63
|
+
'size. This abiguous option has been removed.'\
|
64
|
+
'Please use the "--container-size" option, instead.'
|
65
|
+
raise Thor::Error, m
|
101
66
|
end
|
102
67
|
|
103
68
|
if container_count.nil? && container_size.nil?
|
@@ -39,16 +39,17 @@ module Aptible
|
|
39
39
|
type: 'restore',
|
40
40
|
handle: handle,
|
41
41
|
container_size: options[:container_size],
|
42
|
-
disk_size: options[:disk_size]
|
42
|
+
disk_size: options[:disk_size],
|
43
43
|
destination_account: destination_account,
|
44
44
|
key_arn: options[:key_arn]
|
45
45
|
}.delete_if { |_, v| v.nil? }
|
46
46
|
|
47
|
-
|
48
|
-
'You have used the "--size" option to specify a disk size.'
|
49
|
-
|
50
|
-
|
51
|
-
|
47
|
+
if options[:size]
|
48
|
+
m = 'You have used the "--size" option to specify a disk size.'\
|
49
|
+
'This abiguous option has been removed.'\
|
50
|
+
'Please use the "--disk-size" option, instead.'
|
51
|
+
raise Thor::Error, m
|
52
|
+
end
|
52
53
|
|
53
54
|
operation = backup.create_operation!(opts)
|
54
55
|
CLI.logger.info "Restoring backup into #{handle}"
|
@@ -123,7 +124,14 @@ module Aptible
|
|
123
124
|
|
124
125
|
operation = backup.create_operation!(type: 'purge')
|
125
126
|
CLI.logger.info "Purging backup #{backup_id}"
|
126
|
-
|
127
|
+
begin
|
128
|
+
attach_to_operation_logs(operation)
|
129
|
+
rescue HyperResource::ClientError => e
|
130
|
+
# A 404 here means that the operation completed successfully,
|
131
|
+
# and was removed faster than attach_to_operation_logs
|
132
|
+
# could attach to the logs.
|
133
|
+
raise if e.response.status != 404
|
134
|
+
end
|
127
135
|
end
|
128
136
|
end
|
129
137
|
end
|