aptible-cli 0.24.10 → 0.26.1
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/.github/workflows/release.yml +27 -0
- data/.github/workflows/test.yml +1 -1
- data/Dockerfile +8 -5
- data/Gemfile.lock +28 -17
- data/Makefile +50 -2
- data/README.md +2 -1
- data/aptible-cli.gemspec +5 -2
- data/docker-compose.yml +5 -1
- data/lib/aptible/cli/agent.rb +9 -0
- data/lib/aptible/cli/helpers/aws_account.rb +158 -0
- data/lib/aptible/cli/helpers/database.rb +182 -2
- data/lib/aptible/cli/helpers/token.rb +14 -0
- data/lib/aptible/cli/helpers/vhost/option_set_builder.rb +8 -15
- data/lib/aptible/cli/renderer/text.rb +33 -2
- data/lib/aptible/cli/subcommands/aws_accounts.rb +252 -0
- data/lib/aptible/cli/subcommands/db.rb +67 -3
- data/lib/aptible/cli/subcommands/deploy.rb +45 -11
- data/lib/aptible/cli/subcommands/endpoints.rb +0 -2
- data/lib/aptible/cli/subcommands/organizations.rb +55 -0
- data/lib/aptible/cli/subcommands/services.rb +20 -8
- data/lib/aptible/cli/version.rb +1 -1
- data/spec/aptible/cli/helpers/database_spec.rb +118 -0
- data/spec/aptible/cli/helpers/token_spec.rb +70 -0
- data/spec/aptible/cli/subcommands/db_spec.rb +553 -0
- data/spec/aptible/cli/subcommands/deploy_spec.rb +42 -7
- data/spec/aptible/cli/subcommands/external_aws_accounts_spec.rb +737 -0
- data/spec/aptible/cli/subcommands/organizations_spec.rb +90 -0
- data/spec/aptible/cli/subcommands/services_spec.rb +77 -0
- data/spec/fabricators/app_external_aws_rds_connection_fabricator.rb +55 -0
- data/spec/fabricators/external_aws_account_fabricator.rb +49 -0
- data/spec/fabricators/external_aws_database_credential_fabricator.rb +46 -0
- data/spec/fabricators/external_aws_resource_fabricator.rb +72 -0
- metadata +64 -6
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe Aptible::CLI::Agent do
|
|
6
|
+
let(:token) { double('token') }
|
|
7
|
+
before { allow(subject).to receive(:fetch_token).and_return(token) }
|
|
8
|
+
|
|
9
|
+
describe '#organizations' do
|
|
10
|
+
let(:org1) { double('org1', id: 'org-1-id', name: 'Org One') }
|
|
11
|
+
let(:org2) { double('org2', id: 'org-2-id', name: 'Org Two') }
|
|
12
|
+
let(:role1) do
|
|
13
|
+
double('role1', id: 'role-1-id', name: 'Admin', organization: org1)
|
|
14
|
+
end
|
|
15
|
+
let(:role2) do
|
|
16
|
+
double('role2', id: 'role-2-id', name: 'Developer', organization: org1)
|
|
17
|
+
end
|
|
18
|
+
let(:role3) do
|
|
19
|
+
double('role3', id: 'role-3-id', name: 'Account Owners',
|
|
20
|
+
organization: org2)
|
|
21
|
+
end
|
|
22
|
+
let(:user) do
|
|
23
|
+
double('user', roles_with_organizations: [role1, role2, role3])
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
before do
|
|
27
|
+
allow(subject).to receive(:whoami).and_return(user)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
it 'lists organizations with roles' do
|
|
31
|
+
subject.send('organizations')
|
|
32
|
+
|
|
33
|
+
expect(captured_output_text).to include('Id: org-1-id')
|
|
34
|
+
expect(captured_output_text).to include('Name: Org One')
|
|
35
|
+
expect(captured_output_text).to include('Id: org-2-id')
|
|
36
|
+
expect(captured_output_text).to include('Name: Org Two')
|
|
37
|
+
expect(captured_output_text).to include('Roles:')
|
|
38
|
+
expect(captured_output_text).to include('Name: Admin')
|
|
39
|
+
expect(captured_output_text).to include('Name: Developer')
|
|
40
|
+
expect(captured_output_text).to include('Name: Account Owners')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
it 'handles user with no roles' do
|
|
44
|
+
allow(user).to receive(:roles_with_organizations).and_return([])
|
|
45
|
+
|
|
46
|
+
subject.send('organizations')
|
|
47
|
+
|
|
48
|
+
expect(captured_output_text).to eq('')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
it 'renders JSON output' do
|
|
52
|
+
allow(Aptible::CLI::Renderer).to receive(:format).and_return('json')
|
|
53
|
+
|
|
54
|
+
subject.send('organizations')
|
|
55
|
+
|
|
56
|
+
json = captured_output_json
|
|
57
|
+
expect(json).to be_a(Array)
|
|
58
|
+
expect(json.length).to eq(2)
|
|
59
|
+
|
|
60
|
+
org1_json = json.find { |o| o['id'] == 'org-1-id' }
|
|
61
|
+
expect(org1_json['name']).to eq('Org One')
|
|
62
|
+
expect(org1_json['roles'].length).to eq(2)
|
|
63
|
+
role_names = org1_json['roles'].map { |r| r['name'] }
|
|
64
|
+
expect(role_names).to contain_exactly('Admin', 'Developer')
|
|
65
|
+
|
|
66
|
+
org2_json = json.find { |o| o['id'] == 'org-2-id' }
|
|
67
|
+
expect(org2_json['name']).to eq('Org Two')
|
|
68
|
+
expect(org2_json['roles'].length).to eq(1)
|
|
69
|
+
expect(org2_json['roles'][0]['name']).to eq('Account Owners')
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
it 'raises Thor::Error on whoami API error' do
|
|
73
|
+
allow(subject).to receive(:whoami)
|
|
74
|
+
.and_raise(Thor::Error, '401 (invalid_token) Invalid Token')
|
|
75
|
+
|
|
76
|
+
expect { subject.send('organizations') }
|
|
77
|
+
.to raise_error(Thor::Error, /Invalid Token/)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
it 'raises Thor::Error on roles_with_organizations API error' do
|
|
81
|
+
response = Faraday::Response.new(status: 403)
|
|
82
|
+
error = HyperResource::ClientError.new('403 (forbidden) Access denied',
|
|
83
|
+
response: response)
|
|
84
|
+
allow(user).to receive(:roles_with_organizations).and_raise(error)
|
|
85
|
+
|
|
86
|
+
expect { subject.send('organizations') }
|
|
87
|
+
.to raise_error(Thor::Error, /Access denied/)
|
|
88
|
+
end
|
|
89
|
+
end
|
|
90
|
+
end
|
|
@@ -106,6 +106,83 @@ describe Aptible::CLI::Agent do
|
|
|
106
106
|
|
|
107
107
|
subject.send('services:settings', 'foo')
|
|
108
108
|
end
|
|
109
|
+
|
|
110
|
+
it 'allows enabling restart_free_scaling' do
|
|
111
|
+
stub_options(restart_free_scaling: true)
|
|
112
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
113
|
+
|
|
114
|
+
expect(service).to receive(:update!).with(restart_free_scaling: true)
|
|
115
|
+
|
|
116
|
+
subject.send('services:settings', 'foo')
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
it 'allows disabling restart_free_scaling' do
|
|
120
|
+
stub_options(restart_free_scaling: false)
|
|
121
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
122
|
+
|
|
123
|
+
expect(service).to receive(:update!).with(restart_free_scaling: false)
|
|
124
|
+
|
|
125
|
+
subject.send('services:settings', 'foo')
|
|
126
|
+
end
|
|
127
|
+
|
|
128
|
+
it 'allows setting restart_free_scaling with other options' do
|
|
129
|
+
stub_options(
|
|
130
|
+
restart_free_scaling: true,
|
|
131
|
+
force_zero_downtime: true,
|
|
132
|
+
stop_timeout: 45
|
|
133
|
+
)
|
|
134
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
135
|
+
|
|
136
|
+
expect(service).to receive(:update!)
|
|
137
|
+
.with(
|
|
138
|
+
restart_free_scaling: true,
|
|
139
|
+
force_zero_downtime: true,
|
|
140
|
+
stop_timeout: 45
|
|
141
|
+
)
|
|
142
|
+
|
|
143
|
+
subject.send('services:settings', 'foo')
|
|
144
|
+
end
|
|
145
|
+
|
|
146
|
+
it 'does not include nil values in updates' do
|
|
147
|
+
stub_options(restart_free_scaling: nil, force_zero_downtime: true)
|
|
148
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
149
|
+
|
|
150
|
+
expect(service).to receive(:update!).with(force_zero_downtime: true)
|
|
151
|
+
|
|
152
|
+
subject.send('services:settings', 'foo')
|
|
153
|
+
end
|
|
154
|
+
|
|
155
|
+
it 'does not call update! when no valid options are provided' do
|
|
156
|
+
stub_options(
|
|
157
|
+
restart_free_scaling: nil,
|
|
158
|
+
force_zero_downtime: nil,
|
|
159
|
+
simple_health_check: nil,
|
|
160
|
+
stop_timeout: nil
|
|
161
|
+
)
|
|
162
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
163
|
+
|
|
164
|
+
expect(service).not_to receive(:update!)
|
|
165
|
+
|
|
166
|
+
subject.send('services:settings', 'foo')
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
it 'handles false values correctly (not treated as nil)' do
|
|
170
|
+
stub_options(
|
|
171
|
+
restart_free_scaling: false,
|
|
172
|
+
force_zero_downtime: false,
|
|
173
|
+
simple_health_check: false
|
|
174
|
+
)
|
|
175
|
+
service = Fabricate(:service, app: app, process_type: 'foo')
|
|
176
|
+
|
|
177
|
+
expect(service).to receive(:update!)
|
|
178
|
+
.with(
|
|
179
|
+
restart_free_scaling: false,
|
|
180
|
+
force_zero_downtime: false,
|
|
181
|
+
naive_health_check: false
|
|
182
|
+
)
|
|
183
|
+
|
|
184
|
+
subject.send('services:settings', 'foo')
|
|
185
|
+
end
|
|
109
186
|
end
|
|
110
187
|
|
|
111
188
|
describe '#services:sizing_policy' do
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class StubAppExternalAwsRdsConnection < OpenStruct
|
|
2
|
+
def attributes
|
|
3
|
+
{
|
|
4
|
+
'id' => id,
|
|
5
|
+
'app_id' => app_id,
|
|
6
|
+
'external_aws_resource_id' => external_aws_resource_id,
|
|
7
|
+
'database_name' => database_name,
|
|
8
|
+
'database_user' => database_user,
|
|
9
|
+
'superuser' => superuser,
|
|
10
|
+
'created_at' => created_at,
|
|
11
|
+
'updated_at' => updated_at
|
|
12
|
+
}
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
Fabricator(:app_external_aws_rds_connection,
|
|
17
|
+
from: :stub_app_external_aws_rds_connection) do
|
|
18
|
+
id do
|
|
19
|
+
Fabricate.sequence(:app_external_aws_rds_connection_id) { |i| i }
|
|
20
|
+
end
|
|
21
|
+
app
|
|
22
|
+
external_aws_resource do
|
|
23
|
+
Fabricate(:external_aws_resource, resource_type: 'aws_rds_db_instance')
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
database_name { Fabricate.sequence(:db_name) { |i| "db_#{i}" } }
|
|
27
|
+
database_user { Fabricate.sequence(:db_user) { |i| "user_#{i}" } }
|
|
28
|
+
superuser { false }
|
|
29
|
+
|
|
30
|
+
created_at { Time.now }
|
|
31
|
+
updated_at { Time.now }
|
|
32
|
+
|
|
33
|
+
app_id do |attrs|
|
|
34
|
+
attrs[:app] ? attrs[:app].id : nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
external_aws_resource_id do |attrs|
|
|
38
|
+
attrs[:external_aws_resource] ? attrs[:external_aws_resource].id : nil
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
links do |attrs|
|
|
42
|
+
hash = {}
|
|
43
|
+
if attrs[:app]
|
|
44
|
+
hash[:app] = OpenStruct.new(
|
|
45
|
+
href: "/apps/#{attrs[:app].id}"
|
|
46
|
+
)
|
|
47
|
+
end
|
|
48
|
+
if attrs[:external_aws_resource]
|
|
49
|
+
hash[:external_aws_resource] = OpenStruct.new(
|
|
50
|
+
href: "/external_aws_resources/#{attrs[:external_aws_resource].id}"
|
|
51
|
+
)
|
|
52
|
+
end
|
|
53
|
+
OpenStruct.new(hash)
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class StubExternalAwsAccount < OpenStruct
|
|
2
|
+
def attributes
|
|
3
|
+
{
|
|
4
|
+
'aws_account_id' => aws_account_id,
|
|
5
|
+
'account_name' => account_name,
|
|
6
|
+
'aws_region_primary' => aws_region_primary,
|
|
7
|
+
'status' => status,
|
|
8
|
+
'discovery_enabled' => discovery_enabled,
|
|
9
|
+
'discovery_frequency' => discovery_frequency,
|
|
10
|
+
'discovery_role_arn' => discovery_role_arn,
|
|
11
|
+
'account_id' => account_id,
|
|
12
|
+
'created_at' => created_at,
|
|
13
|
+
'updated_at' => updated_at
|
|
14
|
+
}
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
Fabricator(:external_aws_account, from: :stub_external_aws_account) do
|
|
19
|
+
id { Fabricate.sequence(:external_aws_account_id) { |i| i } }
|
|
20
|
+
account
|
|
21
|
+
errors { Aptible::Resource::Errors.new }
|
|
22
|
+
|
|
23
|
+
account_name { |attrs| "External AWS Account #{attrs[:id]}" }
|
|
24
|
+
aws_account_id do
|
|
25
|
+
Fabricate.sequence(:aws_account_id) do |i|
|
|
26
|
+
format('%012d', 10_000_000_000 + i)
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
discovery_role_arn do |attrs|
|
|
30
|
+
"arn:aws:iam::#{attrs[:aws_account_id]}:role/ExampleRole"
|
|
31
|
+
end
|
|
32
|
+
aws_region_primary 'us-east-1'
|
|
33
|
+
status 'active'
|
|
34
|
+
discovery_enabled false
|
|
35
|
+
discovery_frequency 'daily'
|
|
36
|
+
account_id { |attrs| attrs[:account] ? attrs[:account].id : nil }
|
|
37
|
+
created_at { Time.now }
|
|
38
|
+
updated_at { Time.now }
|
|
39
|
+
|
|
40
|
+
links do |attrs|
|
|
41
|
+
hash = {}
|
|
42
|
+
if attrs[:account]
|
|
43
|
+
hash[:account] = OpenStruct.new(
|
|
44
|
+
href: "/accounts/#{attrs[:account].id}"
|
|
45
|
+
)
|
|
46
|
+
end
|
|
47
|
+
OpenStruct.new(hash)
|
|
48
|
+
end
|
|
49
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
class StubExternalAwsDatabaseCredential < OpenStruct
|
|
2
|
+
def attributes
|
|
3
|
+
{
|
|
4
|
+
'id' => id,
|
|
5
|
+
'external_aws_resource_id' => external_aws_resource_id,
|
|
6
|
+
'type' => type,
|
|
7
|
+
'default' => default,
|
|
8
|
+
'connection_url' => connection_url,
|
|
9
|
+
'created_at' => created_at,
|
|
10
|
+
'updated_at' => updated_at
|
|
11
|
+
}
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
Fabricator(:external_aws_database_credential,
|
|
16
|
+
from: :stub_external_aws_database_credential) do
|
|
17
|
+
id do
|
|
18
|
+
Fabricate.sequence(:external_aws_database_credential_id) { |i| i }
|
|
19
|
+
end
|
|
20
|
+
external_aws_resource do
|
|
21
|
+
Fabricate(:external_aws_resource, resource_type: 'aws_rds_db_instance')
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
type do
|
|
25
|
+
Fabricate.sequence(:external_aws_db_cred_type) { |i| "primary-#{i}" }
|
|
26
|
+
end
|
|
27
|
+
default { false }
|
|
28
|
+
connection_url { 'postgres://user:pass@host:5432/dbname' }
|
|
29
|
+
|
|
30
|
+
created_at { Time.now }
|
|
31
|
+
updated_at { Time.now }
|
|
32
|
+
|
|
33
|
+
external_aws_resource_id do |attrs|
|
|
34
|
+
attrs[:external_aws_resource] ? attrs[:external_aws_resource].id : nil
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
links do |attrs|
|
|
38
|
+
hash = {}
|
|
39
|
+
if attrs[:external_aws_resource]
|
|
40
|
+
hash[:external_aws_resource] = OpenStruct.new(
|
|
41
|
+
href: "/external_aws_resources/#{attrs[:external_aws_resource].id}"
|
|
42
|
+
)
|
|
43
|
+
end
|
|
44
|
+
OpenStruct.new(hash)
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
class StubExternalAwsResource < OpenStruct
|
|
2
|
+
def attributes
|
|
3
|
+
{
|
|
4
|
+
'id' => id,
|
|
5
|
+
'external_aws_account_id' => external_aws_account_id,
|
|
6
|
+
'resource_type' => resource_type,
|
|
7
|
+
'resource_arn' => resource_arn,
|
|
8
|
+
'resource_id' => resource_id,
|
|
9
|
+
'resource_name' => resource_name,
|
|
10
|
+
'region' => region,
|
|
11
|
+
'metadata' => metadata,
|
|
12
|
+
'tags' => tags,
|
|
13
|
+
'discovered_at' => discovered_at,
|
|
14
|
+
'last_synced_at' => last_synced_at,
|
|
15
|
+
'sync_status' => sync_status,
|
|
16
|
+
'created_at' => created_at,
|
|
17
|
+
'updated_at' => updated_at
|
|
18
|
+
}
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def app_external_aws_rds_connections
|
|
22
|
+
@app_external_aws_rds_connections ||= []
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def external_aws_database_credentials
|
|
26
|
+
@external_aws_database_credentials ||= []
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
Fabricator(:external_aws_resource, from: :stub_external_aws_resource) do
|
|
31
|
+
id { Fabricate.sequence(:external_aws_resource_id) { |i| i } }
|
|
32
|
+
external_aws_account
|
|
33
|
+
|
|
34
|
+
resource_type { 'aws_rds_db_instance' }
|
|
35
|
+
resource_arn do
|
|
36
|
+
Fabricate.sequence(:external_aws_resource_arn) do |i|
|
|
37
|
+
"arn:aws:rds:us-east-1:123456789012:db:example-db-#{i}"
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
resource_id do
|
|
41
|
+
Fabricate.sequence(:external_aws_resource_resource_id) do |i|
|
|
42
|
+
"db-EXAMPLE#{i}"
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
resource_name do
|
|
46
|
+
Fabricate.sequence(:external_aws_resource_name) { |i| "example-db-#{i}" }
|
|
47
|
+
end
|
|
48
|
+
region { 'us-east-1' }
|
|
49
|
+
|
|
50
|
+
metadata { { 'engine' => 'postgres', 'engine_version' => '14.7' } }
|
|
51
|
+
tags { { 'env' => 'test', 'owner' => 'spec' } }
|
|
52
|
+
|
|
53
|
+
discovered_at { Time.now }
|
|
54
|
+
last_synced_at { Time.now }
|
|
55
|
+
sync_status { 'current' }
|
|
56
|
+
created_at { Time.now }
|
|
57
|
+
updated_at { Time.now }
|
|
58
|
+
|
|
59
|
+
external_aws_account_id do |attrs|
|
|
60
|
+
attrs[:external_aws_account] ? attrs[:external_aws_account].id : nil
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
links do |attrs|
|
|
64
|
+
hash = {}
|
|
65
|
+
if attrs[:external_aws_account]
|
|
66
|
+
hash[:external_aws_account] = OpenStruct.new(
|
|
67
|
+
href: "/external_aws_accounts/#{attrs[:external_aws_account].id}"
|
|
68
|
+
)
|
|
69
|
+
end
|
|
70
|
+
OpenStruct.new(hash)
|
|
71
|
+
end
|
|
72
|
+
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.26.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Frank Macreery
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-01-13 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -36,28 +36,28 @@ dependencies:
|
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: 1.
|
|
39
|
+
version: '1.12'
|
|
40
40
|
type: :runtime
|
|
41
41
|
prerelease: false
|
|
42
42
|
version_requirements: !ruby/object:Gem::Requirement
|
|
43
43
|
requirements:
|
|
44
44
|
- - "~>"
|
|
45
45
|
- !ruby/object:Gem::Version
|
|
46
|
-
version: 1.
|
|
46
|
+
version: '1.12'
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: aptible-auth
|
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements:
|
|
51
51
|
- - "~>"
|
|
52
52
|
- !ruby/object:Gem::Version
|
|
53
|
-
version: 1.
|
|
53
|
+
version: '1.4'
|
|
54
54
|
type: :runtime
|
|
55
55
|
prerelease: false
|
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
|
57
57
|
requirements:
|
|
58
58
|
- - "~>"
|
|
59
59
|
- !ruby/object:Gem::Version
|
|
60
|
-
version: 1.
|
|
60
|
+
version: '1.4'
|
|
61
61
|
- !ruby/object:Gem::Dependency
|
|
62
62
|
name: aptible-billing
|
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -422,6 +422,48 @@ dependencies:
|
|
|
422
422
|
- - "~>"
|
|
423
423
|
- !ruby/object:Gem::Version
|
|
424
424
|
version: 2.15.2
|
|
425
|
+
- !ruby/object:Gem::Dependency
|
|
426
|
+
name: httplog
|
|
427
|
+
requirement: !ruby/object:Gem::Requirement
|
|
428
|
+
requirements:
|
|
429
|
+
- - "<"
|
|
430
|
+
- !ruby/object:Gem::Version
|
|
431
|
+
version: '1.6'
|
|
432
|
+
type: :development
|
|
433
|
+
prerelease: false
|
|
434
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
435
|
+
requirements:
|
|
436
|
+
- - "<"
|
|
437
|
+
- !ruby/object:Gem::Version
|
|
438
|
+
version: '1.6'
|
|
439
|
+
- !ruby/object:Gem::Dependency
|
|
440
|
+
name: minitest
|
|
441
|
+
requirement: !ruby/object:Gem::Requirement
|
|
442
|
+
requirements:
|
|
443
|
+
- - "<"
|
|
444
|
+
- !ruby/object:Gem::Version
|
|
445
|
+
version: '5.16'
|
|
446
|
+
type: :development
|
|
447
|
+
prerelease: false
|
|
448
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
449
|
+
requirements:
|
|
450
|
+
- - "<"
|
|
451
|
+
- !ruby/object:Gem::Version
|
|
452
|
+
version: '5.16'
|
|
453
|
+
- !ruby/object:Gem::Dependency
|
|
454
|
+
name: hashie
|
|
455
|
+
requirement: !ruby/object:Gem::Requirement
|
|
456
|
+
requirements:
|
|
457
|
+
- - "<"
|
|
458
|
+
- !ruby/object:Gem::Version
|
|
459
|
+
version: '5.1'
|
|
460
|
+
type: :development
|
|
461
|
+
prerelease: false
|
|
462
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
463
|
+
requirements:
|
|
464
|
+
- - "<"
|
|
465
|
+
- !ruby/object:Gem::Version
|
|
466
|
+
version: '5.1'
|
|
425
467
|
description: Aptible CLI
|
|
426
468
|
email:
|
|
427
469
|
- frank@macreery.com
|
|
@@ -432,6 +474,7 @@ extra_rdoc_files: []
|
|
|
432
474
|
files:
|
|
433
475
|
- ".dockerignore"
|
|
434
476
|
- ".github/CODEOWNERS"
|
|
477
|
+
- ".github/workflows/release.yml"
|
|
435
478
|
- ".github/workflows/test.yml"
|
|
436
479
|
- ".gitignore"
|
|
437
480
|
- ".rspec"
|
|
@@ -462,6 +505,7 @@ files:
|
|
|
462
505
|
- lib/aptible/cli/formatter/value.rb
|
|
463
506
|
- lib/aptible/cli/helpers/app.rb
|
|
464
507
|
- lib/aptible/cli/helpers/app_or_database.rb
|
|
508
|
+
- lib/aptible/cli/helpers/aws_account.rb
|
|
465
509
|
- lib/aptible/cli/helpers/config_path.rb
|
|
466
510
|
- lib/aptible/cli/helpers/database.rb
|
|
467
511
|
- lib/aptible/cli/helpers/date_helpers.rb
|
|
@@ -485,6 +529,7 @@ files:
|
|
|
485
529
|
- lib/aptible/cli/renderer/text.rb
|
|
486
530
|
- lib/aptible/cli/resource_formatter.rb
|
|
487
531
|
- lib/aptible/cli/subcommands/apps.rb
|
|
532
|
+
- lib/aptible/cli/subcommands/aws_accounts.rb
|
|
488
533
|
- lib/aptible/cli/subcommands/backup.rb
|
|
489
534
|
- lib/aptible/cli/subcommands/backup_retention_policy.rb
|
|
490
535
|
- lib/aptible/cli/subcommands/config.rb
|
|
@@ -498,6 +543,7 @@ files:
|
|
|
498
543
|
- lib/aptible/cli/subcommands/maintenance.rb
|
|
499
544
|
- lib/aptible/cli/subcommands/metric_drain.rb
|
|
500
545
|
- lib/aptible/cli/subcommands/operation.rb
|
|
546
|
+
- lib/aptible/cli/subcommands/organizations.rb
|
|
501
547
|
- lib/aptible/cli/subcommands/rebuild.rb
|
|
502
548
|
- lib/aptible/cli/subcommands/restart.rb
|
|
503
549
|
- lib/aptible/cli/subcommands/services.rb
|
|
@@ -527,18 +573,21 @@ files:
|
|
|
527
573
|
- spec/aptible/cli/subcommands/deploy_spec.rb
|
|
528
574
|
- spec/aptible/cli/subcommands/endpoints_spec.rb
|
|
529
575
|
- spec/aptible/cli/subcommands/environment_spec.rb
|
|
576
|
+
- spec/aptible/cli/subcommands/external_aws_accounts_spec.rb
|
|
530
577
|
- spec/aptible/cli/subcommands/inspect_spec.rb
|
|
531
578
|
- spec/aptible/cli/subcommands/log_drain_spec.rb
|
|
532
579
|
- spec/aptible/cli/subcommands/logs_spec.rb
|
|
533
580
|
- spec/aptible/cli/subcommands/maintenance_spec.rb
|
|
534
581
|
- spec/aptible/cli/subcommands/metric_drain_spec.rb
|
|
535
582
|
- spec/aptible/cli/subcommands/operation_spec.rb
|
|
583
|
+
- spec/aptible/cli/subcommands/organizations_spec.rb
|
|
536
584
|
- spec/aptible/cli/subcommands/rebuild_spec.rb
|
|
537
585
|
- spec/aptible/cli/subcommands/restart_spec.rb
|
|
538
586
|
- spec/aptible/cli/subcommands/services_spec.rb
|
|
539
587
|
- spec/aptible/cli/subcommands/ssh_spec.rb
|
|
540
588
|
- spec/aptible/cli_spec.rb
|
|
541
589
|
- spec/fabricators/account_fabricator.rb
|
|
590
|
+
- spec/fabricators/app_external_aws_rds_connection_fabricator.rb
|
|
542
591
|
- spec/fabricators/app_fabricator.rb
|
|
543
592
|
- spec/fabricators/backup_fabricator.rb
|
|
544
593
|
- spec/fabricators/backup_retention_policy_fabricator.rb
|
|
@@ -548,6 +597,9 @@ files:
|
|
|
548
597
|
- spec/fabricators/database_disk_fabricator.rb
|
|
549
598
|
- spec/fabricators/database_fabricator.rb
|
|
550
599
|
- spec/fabricators/database_image_fabricator.rb
|
|
600
|
+
- spec/fabricators/external_aws_account_fabricator.rb
|
|
601
|
+
- spec/fabricators/external_aws_database_credential_fabricator.rb
|
|
602
|
+
- spec/fabricators/external_aws_resource_fabricator.rb
|
|
551
603
|
- spec/fabricators/log_drain_fabricator.rb
|
|
552
604
|
- spec/fabricators/maintenance_app_fabricator.rb
|
|
553
605
|
- spec/fabricators/maintenance_database_fabricator.rb
|
|
@@ -614,18 +666,21 @@ test_files:
|
|
|
614
666
|
- spec/aptible/cli/subcommands/deploy_spec.rb
|
|
615
667
|
- spec/aptible/cli/subcommands/endpoints_spec.rb
|
|
616
668
|
- spec/aptible/cli/subcommands/environment_spec.rb
|
|
669
|
+
- spec/aptible/cli/subcommands/external_aws_accounts_spec.rb
|
|
617
670
|
- spec/aptible/cli/subcommands/inspect_spec.rb
|
|
618
671
|
- spec/aptible/cli/subcommands/log_drain_spec.rb
|
|
619
672
|
- spec/aptible/cli/subcommands/logs_spec.rb
|
|
620
673
|
- spec/aptible/cli/subcommands/maintenance_spec.rb
|
|
621
674
|
- spec/aptible/cli/subcommands/metric_drain_spec.rb
|
|
622
675
|
- spec/aptible/cli/subcommands/operation_spec.rb
|
|
676
|
+
- spec/aptible/cli/subcommands/organizations_spec.rb
|
|
623
677
|
- spec/aptible/cli/subcommands/rebuild_spec.rb
|
|
624
678
|
- spec/aptible/cli/subcommands/restart_spec.rb
|
|
625
679
|
- spec/aptible/cli/subcommands/services_spec.rb
|
|
626
680
|
- spec/aptible/cli/subcommands/ssh_spec.rb
|
|
627
681
|
- spec/aptible/cli_spec.rb
|
|
628
682
|
- spec/fabricators/account_fabricator.rb
|
|
683
|
+
- spec/fabricators/app_external_aws_rds_connection_fabricator.rb
|
|
629
684
|
- spec/fabricators/app_fabricator.rb
|
|
630
685
|
- spec/fabricators/backup_fabricator.rb
|
|
631
686
|
- spec/fabricators/backup_retention_policy_fabricator.rb
|
|
@@ -635,6 +690,9 @@ test_files:
|
|
|
635
690
|
- spec/fabricators/database_disk_fabricator.rb
|
|
636
691
|
- spec/fabricators/database_fabricator.rb
|
|
637
692
|
- spec/fabricators/database_image_fabricator.rb
|
|
693
|
+
- spec/fabricators/external_aws_account_fabricator.rb
|
|
694
|
+
- spec/fabricators/external_aws_database_credential_fabricator.rb
|
|
695
|
+
- spec/fabricators/external_aws_resource_fabricator.rb
|
|
638
696
|
- spec/fabricators/log_drain_fabricator.rb
|
|
639
697
|
- spec/fabricators/maintenance_app_fabricator.rb
|
|
640
698
|
- spec/fabricators/maintenance_database_fabricator.rb
|