aptible-cli 0.18.0 → 0.19.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +63 -50
- data/lib/aptible/cli/agent.rb +9 -3
- data/lib/aptible/cli/helpers/config_path.rb +11 -0
- data/lib/aptible/cli/helpers/log_drain.rb +85 -0
- data/lib/aptible/cli/helpers/metric_drain.rb +39 -0
- data/lib/aptible/cli/helpers/ssh.rb +5 -1
- data/lib/aptible/cli/helpers/token.rb +5 -1
- data/lib/aptible/cli/resource_formatter.rb +66 -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 +24 -21
- 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/resource_formatter_spec.rb +1 -0
- data/spec/aptible/cli/subcommands/apps_spec.rb +10 -51
- 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/environment_spec.rb +4 -2
- 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 +3 -0
- data/spec/fabricators/app_fabricator.rb +1 -0
- data/spec/fabricators/database_disk_fabricator.rb +2 -1
- data/spec/fabricators/database_fabricator.rb +1 -0
- data/spec/fabricators/log_drain_fabricator.rb +21 -0
- data/spec/fabricators/metric_drain_fabricator.rb +8 -0
- data/spec/fabricators/service_fabricator.rb +1 -0
- data/spec/fabricators/vhost_fabricator.rb +1 -0
- data/spec/spec_helper.rb +4 -0
- metadata +15 -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
@@ -18,11 +18,13 @@ require_relative 'helpers/vhost/option_set_builder'
|
|
18
18
|
require_relative 'helpers/tunnel'
|
19
19
|
require_relative 'helpers/system'
|
20
20
|
require_relative 'helpers/security_key'
|
21
|
+
require_relative 'helpers/config_path'
|
22
|
+
require_relative 'helpers/log_drain'
|
23
|
+
require_relative 'helpers/metric_drain'
|
21
24
|
|
22
25
|
require_relative 'subcommands/apps'
|
23
26
|
require_relative 'subcommands/config'
|
24
27
|
require_relative 'subcommands/db'
|
25
|
-
require_relative 'subcommands/domains'
|
26
28
|
require_relative 'subcommands/environment'
|
27
29
|
require_relative 'subcommands/logs'
|
28
30
|
require_relative 'subcommands/rebuild'
|
@@ -34,6 +36,8 @@ require_relative 'subcommands/backup'
|
|
34
36
|
require_relative 'subcommands/operation'
|
35
37
|
require_relative 'subcommands/inspect'
|
36
38
|
require_relative 'subcommands/endpoints'
|
39
|
+
require_relative 'subcommands/log_drain'
|
40
|
+
require_relative 'subcommands/metric_drain'
|
37
41
|
|
38
42
|
module Aptible
|
39
43
|
module CLI
|
@@ -43,10 +47,10 @@ module Aptible
|
|
43
47
|
include Helpers::Token
|
44
48
|
include Helpers::Ssh
|
45
49
|
include Helpers::System
|
50
|
+
include Helpers::ConfigPath
|
46
51
|
include Subcommands::Apps
|
47
52
|
include Subcommands::Config
|
48
53
|
include Subcommands::DB
|
49
|
-
include Subcommands::Domains
|
50
54
|
include Subcommands::Environment
|
51
55
|
include Subcommands::Logs
|
52
56
|
include Subcommands::Rebuild
|
@@ -58,6 +62,8 @@ module Aptible
|
|
58
62
|
include Subcommands::Operation
|
59
63
|
include Subcommands::Inspect
|
60
64
|
include Subcommands::Endpoints
|
65
|
+
include Subcommands::LogDrain
|
66
|
+
include Subcommands::MetricDrain
|
61
67
|
|
62
68
|
# Forward return codes on failures.
|
63
69
|
def self.exit_on_failure?
|
@@ -209,7 +215,7 @@ module Aptible
|
|
209
215
|
# further: to do so, edit the file `.aptible/nag_toolbelt` and put a
|
210
216
|
# timestamp far into the future. For example, writing 1577836800 will
|
211
217
|
# disable the warning until 2020.
|
212
|
-
nag_file = File.join
|
218
|
+
nag_file = File.join aptible_config_path, 'nag_toolbelt'
|
213
219
|
nag_frequency = 12.hours
|
214
220
|
|
215
221
|
last_nag = begin
|
@@ -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
|
@@ -1,7 +1,11 @@
|
|
1
|
+
require_relative 'config_path'
|
2
|
+
|
1
3
|
module Aptible
|
2
4
|
module CLI
|
3
5
|
module Helpers
|
4
6
|
module Ssh
|
7
|
+
include Helpers::ConfigPath
|
8
|
+
|
5
9
|
def connect_to_ssh_portal(operation, *extra_ssh_args)
|
6
10
|
# NOTE: This is a little tricky to get rigt, so before you make any
|
7
11
|
# changes, read this.
|
@@ -126,7 +130,7 @@ module Aptible
|
|
126
130
|
end
|
127
131
|
|
128
132
|
def ssh_dir
|
129
|
-
File.join
|
133
|
+
File.join aptible_config_path, 'ssh'
|
130
134
|
end
|
131
135
|
|
132
136
|
def ssh_config_file
|
@@ -1,9 +1,13 @@
|
|
1
1
|
require 'aptible/auth'
|
2
2
|
|
3
|
+
require_relative 'config_path'
|
4
|
+
|
3
5
|
module Aptible
|
4
6
|
module CLI
|
5
7
|
module Helpers
|
6
8
|
module Token
|
9
|
+
include Helpers::ConfigPath
|
10
|
+
|
7
11
|
TOKEN_ENV_VAR = 'APTIBLE_ACCESS_TOKEN'.freeze
|
8
12
|
|
9
13
|
def fetch_token
|
@@ -40,7 +44,7 @@ module Aptible
|
|
40
44
|
end
|
41
45
|
|
42
46
|
def token_file
|
43
|
-
File.join
|
47
|
+
File.join(aptible_config_path, 'tokens.json').freeze
|
44
48
|
end
|
45
49
|
end
|
46
50
|
end
|
@@ -5,8 +5,27 @@ 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
|
+
|
14
|
+
origin = if backup.manual && !backup.copied_from
|
15
|
+
if bu_operation
|
16
|
+
"manual, #{bu_operation.user_email}"
|
17
|
+
else
|
18
|
+
'manual, unknown'
|
19
|
+
end
|
20
|
+
elsif backup.manual && backup.copied_from
|
21
|
+
'manual, copy'
|
22
|
+
elsif backup.copied_from
|
23
|
+
'automatic, copy'
|
24
|
+
else
|
25
|
+
'automatic'
|
26
|
+
end
|
8
27
|
description = "#{backup.id}: #{backup.created_at}, " \
|
9
|
-
"#{backup.aws_region}"
|
28
|
+
"#{backup.aws_region}, #{origin}"
|
10
29
|
|
11
30
|
if include_db
|
12
31
|
db = backup.database_with_deleted
|
@@ -30,6 +49,13 @@ module Aptible
|
|
30
49
|
inject_backup(n, backup.copied_from)
|
31
50
|
end
|
32
51
|
end
|
52
|
+
|
53
|
+
if bu_operation && \
|
54
|
+
backup.manual && !backup.copied_from
|
55
|
+
node.keyed_object('created_from_operation', 'id') do |n|
|
56
|
+
inject_operation(n, bu_operation)
|
57
|
+
end
|
58
|
+
end
|
33
59
|
end
|
34
60
|
|
35
61
|
def inject_deleted_database(node, database, account)
|
@@ -43,12 +69,15 @@ module Aptible
|
|
43
69
|
def inject_account(node, account)
|
44
70
|
node.value('id', account.id)
|
45
71
|
node.value('handle', account.handle)
|
72
|
+
node.value('created_at', account.created_at)
|
46
73
|
end
|
47
74
|
|
48
75
|
def inject_operation(node, operation)
|
49
76
|
node.value('id', operation.id)
|
50
77
|
node.value('status', operation.status)
|
51
|
-
|
78
|
+
if %w(deploy rebuild).include?(operation.type)
|
79
|
+
node.value('git_ref', operation.git_ref)
|
80
|
+
end
|
52
81
|
node.value('user_email', operation.user_email)
|
53
82
|
node.value('created_at', operation.created_at)
|
54
83
|
end
|
@@ -56,6 +85,7 @@ module Aptible
|
|
56
85
|
def inject_app(node, app, account)
|
57
86
|
node.value('id', app.id)
|
58
87
|
node.value('handle', app.handle)
|
88
|
+
node.value('created_at', app.created_at)
|
59
89
|
|
60
90
|
node.value('status', app.status)
|
61
91
|
node.value('git_remote', app.git_repo)
|
@@ -80,6 +110,7 @@ module Aptible
|
|
80
110
|
def inject_database(node, database, account)
|
81
111
|
node.value('id', database.id)
|
82
112
|
node.value('handle', database.handle)
|
113
|
+
node.value('created_at', database.created_at)
|
83
114
|
|
84
115
|
node.value('type', database.type)
|
85
116
|
node.value('version', database.database_image.version)
|
@@ -100,7 +131,7 @@ module Aptible
|
|
100
131
|
node.value('disk_modification_progress',
|
101
132
|
database.disk.modification_progress)
|
102
133
|
node.value('disk_modification_status', database.disk.status)
|
103
|
-
node.value('disk_provisioned_iops', database.disk.
|
134
|
+
node.value('disk_provisioned_iops', database.disk.baseline_iops)
|
104
135
|
end
|
105
136
|
|
106
137
|
if database.service
|
@@ -120,6 +151,7 @@ module Aptible
|
|
120
151
|
def inject_service(node, service, app)
|
121
152
|
node.value('id', service.id)
|
122
153
|
node.value('service', service.process_type)
|
154
|
+
node.value('created_at', service.created_at)
|
123
155
|
|
124
156
|
node.value('command', service.command || 'CMD')
|
125
157
|
node.value('container_count', service.container_count)
|
@@ -132,6 +164,7 @@ module Aptible
|
|
132
164
|
node.value('id', vhost.id)
|
133
165
|
node.value('hostname', vhost.external_host)
|
134
166
|
node.value('status', vhost.status)
|
167
|
+
node.value('created_at', vhost.created_at)
|
135
168
|
|
136
169
|
case vhost.type
|
137
170
|
when 'tcp', 'tls'
|
@@ -173,6 +206,36 @@ module Aptible
|
|
173
206
|
attach_service(node, service)
|
174
207
|
end
|
175
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
|
+
|
176
239
|
private
|
177
240
|
|
178
241
|
def attach_account(node, account)
|