awshark 1.1.0 → 1.2.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/.rubocop.yml +7 -3
- data/CHANGELOG.md +4 -0
- data/README.md +14 -11
- data/awshark.gemspec +1 -0
- data/lib/awshark/cli.rb +0 -2
- data/lib/awshark/cloud_formation/configuration.rb +22 -0
- data/lib/awshark/cloud_formation/stack.rb +1 -4
- data/lib/awshark/cloud_formation/template.rb +3 -5
- data/lib/awshark/ecs/cluster.rb +39 -0
- data/lib/awshark/ecs/configuration.rb +16 -0
- data/lib/awshark/ecs/manager.rb +73 -0
- data/lib/awshark/profile_resolver.rb +8 -3
- data/lib/awshark/s3/configuration.rb +17 -0
- data/lib/awshark/sts/configuration.rb +20 -0
- data/lib/awshark/subcommands/ecs.rb +24 -1
- data/lib/awshark/version.rb +1 -1
- data/lib/awshark.rb +17 -2
- metadata +22 -3
- data/lib/awshark/configuration.rb +0 -34
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d5706c9a35383e578bac90c8f432f2b4d730857556112222ff122ba7f7fba8e0
|
4
|
+
data.tar.gz: 6a3c0ca64b7f017aaea42c7fed255a5e5f44ec33bce1de59a00c875c1023e86e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a18d22c21cda523abfa5bd6369df2855b55eb479a2d43a0fa1bd66de0902e055db4e164bab332338f417fcc010094a168b4d2f92a16e4915a840fcb580608584
|
7
|
+
data.tar.gz: c4e5e7d9a2105ff44c58ce0f08ae742e48f780d18b4f63459d39ec6f670d372b5636e966f90e081fec071f4c56ad0923b3b1cb94549ef10cf819e064a57575ac
|
data/.rubocop.yml
CHANGED
@@ -7,9 +7,6 @@ AllCops:
|
|
7
7
|
TargetRubyVersion: 2.6
|
8
8
|
Exclude:
|
9
9
|
- 'bin/*'
|
10
|
-
- 'node_modules/**/*'
|
11
|
-
- 'vendor/**/*'
|
12
|
-
- 'spec/**/*'
|
13
10
|
- 'tmp/*'
|
14
11
|
|
15
12
|
Layout/BeginEndAlignment:
|
@@ -17,6 +14,9 @@ Layout/BeginEndAlignment:
|
|
17
14
|
EnforcedStyleAlignWith: begin
|
18
15
|
Layout/EmptyLinesAroundAttributeAccessor:
|
19
16
|
Enabled: true
|
17
|
+
Layout/FirstHashElementIndentation:
|
18
|
+
Exclude:
|
19
|
+
- 'spec/**/*'
|
20
20
|
Layout/SpaceAroundMethodCallOperator:
|
21
21
|
Enabled: true
|
22
22
|
|
@@ -70,6 +70,10 @@ Lint/UselessTimes:
|
|
70
70
|
Metrics/AbcSize:
|
71
71
|
Enabled: true
|
72
72
|
Max: 20
|
73
|
+
Metrics/BlockLength:
|
74
|
+
Exclude:
|
75
|
+
- '*.gemspec'
|
76
|
+
- 'spec/**/*'
|
73
77
|
Metrics/MethodLength:
|
74
78
|
Enabled: false
|
75
79
|
Metrics/ModuleLength:
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -14,32 +14,41 @@ gem install awshark
|
|
14
14
|
|
15
15
|
### Usage
|
16
16
|
|
17
|
+
Use `AWS_PROFILE=PROFILE` and/or `AWS_REGION=REGION` to configure the internal AWS clients.
|
18
|
+
|
17
19
|
#### S3 commands
|
18
20
|
|
19
21
|
List all S3 buckets
|
20
22
|
```
|
21
|
-
awshark s3 list
|
23
|
+
awshark s3 list
|
22
24
|
```
|
23
25
|
|
24
26
|
List all objects in a specific S3 bucket
|
25
27
|
```
|
26
|
-
awshark s3 objects BUCKET_NAME fonts/
|
28
|
+
awshark s3 objects BUCKET_NAME fonts/
|
27
29
|
```
|
28
30
|
|
29
31
|
#### EC2 commands
|
30
32
|
|
31
33
|
List all EC2 instances in a region
|
32
34
|
```
|
33
|
-
awshark ec2 list
|
35
|
+
awshark ec2 list
|
36
|
+
```
|
37
|
+
|
38
|
+
#### ECS commands
|
39
|
+
|
40
|
+
List all EC2 instances in a region
|
41
|
+
```
|
42
|
+
awshark ecs list
|
34
43
|
```
|
35
44
|
|
36
45
|
#### Cloud Formation commands
|
37
46
|
|
38
47
|
Update (diff) Cloud Formation stack
|
39
48
|
```
|
40
|
-
awshark cf deploy TEMPLATE_PATH --stage=STAGE --bucket=S3_BUCKET.bundesimmo.de
|
49
|
+
awshark cf deploy TEMPLATE_PATH --stage=STAGE --bucket=S3_BUCKET.bundesimmo.de
|
41
50
|
|
42
|
-
awshark cf diff TEMPLATE_PATH --stage=STAGE --bucket=S3_BUCKET.bundesimmo.de
|
51
|
+
awshark cf diff TEMPLATE_PATH --stage=STAGE --bucket=S3_BUCKET.bundesimmo.de
|
43
52
|
```
|
44
53
|
|
45
54
|
For a further information visit the [Wiki](https://github.com/jdahlke/awshark/wiki).
|
@@ -50,12 +59,6 @@ For a further information visit the [Wiki](https://github.com/jdahlke/awshark/wi
|
|
50
59
|
After checking out the repo, run `bin/setup` to install dependencies.
|
51
60
|
You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
52
61
|
|
53
|
-
To install this gem onto your local machine, run
|
54
|
-
|
55
|
-
gem build awshark.gemspec
|
56
|
-
gem install --local awshark-1.1.0.gem
|
57
|
-
rm awshark-1.1.0.gem
|
58
|
-
|
59
62
|
|
60
63
|
### Contributing
|
61
64
|
|
data/awshark.gemspec
CHANGED
@@ -34,6 +34,7 @@ Gem::Specification.new do |spec|
|
|
34
34
|
spec.add_dependency 'aws-sdk-cloudwatch'
|
35
35
|
spec.add_dependency 'aws-sdk-ec2'
|
36
36
|
spec.add_dependency 'aws-sdk-ecr'
|
37
|
+
spec.add_dependency 'aws-sdk-ecs'
|
37
38
|
spec.add_dependency 'aws-sdk-rds'
|
38
39
|
spec.add_dependency 'aws-sdk-s3'
|
39
40
|
spec.add_dependency 'aws-sdk-ssm', '~> 1.117.0'
|
data/lib/awshark/cli.rb
CHANGED
@@ -16,8 +16,6 @@ module Awshark
|
|
16
16
|
map '-v' => :version
|
17
17
|
|
18
18
|
class_option :help, type: :boolean, desc: 'Prints this help'
|
19
|
-
class_option :profile, type: :string, desc: 'Load the AWS credentials profile named PROFILE.'
|
20
|
-
class_option :region, type: :string, desc: 'Sets the AWS region name REGION.'
|
21
19
|
|
22
20
|
desc 'cf COMMAND', 'Run CloudFormation command'
|
23
21
|
subcommand 'cf', Awshark::Subcommands::CloudFormation
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Awshark
|
4
|
+
module CloudFormation
|
5
|
+
class Configuration
|
6
|
+
attr_reader :event_polling
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@event_polling = 3
|
10
|
+
end
|
11
|
+
|
12
|
+
def client
|
13
|
+
@client ||= begin
|
14
|
+
region = Aws.config[:region]
|
15
|
+
Aws::CloudFormation::Client.new(region: region)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
attr_writer :client
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -69,10 +69,7 @@ module Awshark
|
|
69
69
|
private
|
70
70
|
|
71
71
|
def client
|
72
|
-
|
73
|
-
|
74
|
-
region = Aws.config[:region]
|
75
|
-
@client ||= Aws::CloudFormation::Client.new(region: region)
|
72
|
+
Awshark.config.cloud_formation.client
|
76
73
|
end
|
77
74
|
|
78
75
|
def get_stack(stack_name)
|
@@ -35,7 +35,7 @@ module Awshark
|
|
35
35
|
|
36
36
|
{
|
37
37
|
context: RecursiveOpenStruct.new(context),
|
38
|
-
aws_account_id: Awshark.config.aws_account_id,
|
38
|
+
aws_account_id: Awshark.config.sts.aws_account_id,
|
39
39
|
stage: stage,
|
40
40
|
ssm: ssm
|
41
41
|
}
|
@@ -69,13 +69,11 @@ module Awshark
|
|
69
69
|
end
|
70
70
|
|
71
71
|
def region
|
72
|
-
|
72
|
+
Awshark.config.s3.region
|
73
73
|
end
|
74
74
|
|
75
75
|
def s3
|
76
|
-
|
77
|
-
|
78
|
-
@s3 ||= Aws::S3::Client.new(region: region, signature_version: 'v4')
|
76
|
+
Awshark.config.s3.client
|
79
77
|
end
|
80
78
|
|
81
79
|
def s3_key
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Awshark
|
4
|
+
module Ecs
|
5
|
+
class Cluster
|
6
|
+
attr_reader :arn
|
7
|
+
|
8
|
+
def initialize(arn)
|
9
|
+
@arn = arn
|
10
|
+
end
|
11
|
+
|
12
|
+
def name
|
13
|
+
arn.split('/').last
|
14
|
+
end
|
15
|
+
|
16
|
+
def tasks
|
17
|
+
@tasks ||= begin
|
18
|
+
response = client.list_tasks(cluster: arn)
|
19
|
+
response = client.describe_tasks(cluster: arn, tasks: response.task_arns)
|
20
|
+
response.tasks
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def services
|
25
|
+
@services ||= begin
|
26
|
+
response = client.list_services(cluster: arn)
|
27
|
+
response = client.describe_services(cluster: arn, services: response.service_arns)
|
28
|
+
response.services
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def client
|
35
|
+
Awshark.config.ecs.client
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Awshark
|
4
|
+
module Ecs
|
5
|
+
class Manager
|
6
|
+
def clusters
|
7
|
+
response = client.list_clusters
|
8
|
+
response.cluster_arns.map { |arn| Ecs::Cluster.new(arn) }
|
9
|
+
end
|
10
|
+
|
11
|
+
def inspect_cluster(cluster)
|
12
|
+
args = { name: cluster.name, services: cluster.services.size, tasks: cluster.tasks.size }
|
13
|
+
format("Cluster: %-20<name>s %<services>s services %<tasks>s tasks\n", args)
|
14
|
+
end
|
15
|
+
|
16
|
+
# https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECS/Types/Container.html
|
17
|
+
#
|
18
|
+
# @param task [Aws::ECS::Types::Container]
|
19
|
+
def inspect_container(container)
|
20
|
+
args = { name: container.name, health: container.health_status, status: container.last_status }
|
21
|
+
format("- %-15<name>s status: %<status>s\n", args)
|
22
|
+
end
|
23
|
+
|
24
|
+
# https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECS/Types/Service.html
|
25
|
+
#
|
26
|
+
# @param task [Aws::ECS::Types::Service]
|
27
|
+
def inspect_service(service)
|
28
|
+
task = task_definition(service.task_definition)
|
29
|
+
lines = []
|
30
|
+
|
31
|
+
args = {
|
32
|
+
name: service.service_name,
|
33
|
+
status: service.status,
|
34
|
+
running: service.running_count,
|
35
|
+
cpu: "#{task.cpu}MB",
|
36
|
+
memory: "#{task.memory}MB"
|
37
|
+
}
|
38
|
+
lines << format('Service: %-30<name>s status: %-8<status>s running: %-4<running>s ' \
|
39
|
+
"cpu: %-8<cpu>s mem: %<memory>s\n", args)
|
40
|
+
task.container_definitions.each do |c|
|
41
|
+
lines << format("- %-15<name>s\n", name: c.name)
|
42
|
+
end
|
43
|
+
|
44
|
+
lines.join
|
45
|
+
end
|
46
|
+
|
47
|
+
# https://docs.aws.amazon.com/sdk-for-ruby/v3/api/Aws/ECS/Types/Task.html
|
48
|
+
#
|
49
|
+
# @param task [Aws::ECS::Types::Task]
|
50
|
+
def inspect_task(task)
|
51
|
+
lines = []
|
52
|
+
|
53
|
+
args = { type: task.launch_type, cpu: "#{task.cpu} MB", memory: "#{task.memory} MB" }
|
54
|
+
lines << format("Task: %-20<type>s cpu: %-10<cpu>s memory: %<memory>s\n", args)
|
55
|
+
|
56
|
+
task.containers.each { |c| lines << inspect_container(c) }
|
57
|
+
|
58
|
+
lines.join
|
59
|
+
end
|
60
|
+
|
61
|
+
def task_definition(family)
|
62
|
+
response = client.describe_task_definition(task_definition: family)
|
63
|
+
response.task_definition
|
64
|
+
end
|
65
|
+
|
66
|
+
private
|
67
|
+
|
68
|
+
def client
|
69
|
+
Awshark.config.ecs.client
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -2,15 +2,13 @@
|
|
2
2
|
|
3
3
|
module Awshark
|
4
4
|
class ProfileResolver
|
5
|
-
attr_reader :region
|
6
|
-
|
7
5
|
def initialize(options)
|
8
6
|
@profile = options[:profile] || ENV['AWS_PROFILE']
|
9
7
|
@shared_config = ::Aws::SharedConfig.new(
|
10
8
|
profile_name: @profile,
|
11
9
|
config_enabled: true
|
12
10
|
)
|
13
|
-
@region = options[:region] ||
|
11
|
+
@region = options[:region] || ENV['REGION']
|
14
12
|
end
|
15
13
|
|
16
14
|
def credentials
|
@@ -32,6 +30,13 @@ module Awshark
|
|
32
30
|
@shared_config.credentials
|
33
31
|
end
|
34
32
|
|
33
|
+
# Returns Aws region from option, env or .aws/config
|
34
|
+
#
|
35
|
+
# @returns [String]
|
36
|
+
def region
|
37
|
+
@region || @shared_config.region || 'eu-central-1'
|
38
|
+
end
|
39
|
+
|
35
40
|
# Returns Aws credentials for configuration with
|
36
41
|
# [profile]
|
37
42
|
# role_arn = ROLE_ARN
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Awshark
|
4
|
+
module S3
|
5
|
+
class Configuration
|
6
|
+
def client
|
7
|
+
@client ||= Aws::S3::Client.new(region: region, signature_version: 'v4')
|
8
|
+
end
|
9
|
+
|
10
|
+
def region
|
11
|
+
Aws.config[:region] || 'eu-central-1'
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_writer :client
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Awshark
|
4
|
+
module Sts
|
5
|
+
class Configuration
|
6
|
+
def aws_account_id
|
7
|
+
@aws_account_id ||= begin
|
8
|
+
response = client.get_caller_identity
|
9
|
+
response.account
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def client
|
14
|
+
@client ||= Aws::STS::Client.new
|
15
|
+
end
|
16
|
+
|
17
|
+
attr_writer :client
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,12 +1,35 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'aws-sdk-ecr'
|
4
|
+
require 'aws-sdk-ecs'
|
5
|
+
|
6
|
+
require 'awshark/ecs/cluster'
|
7
|
+
require 'awshark/ecs/manager'
|
4
8
|
|
5
9
|
module Awshark
|
6
10
|
module Subcommands
|
7
11
|
class Ecs < Thor
|
8
12
|
include Awshark::Subcommands::ClassOptions
|
9
13
|
|
14
|
+
desc 'list', 'list ECS tasks'
|
15
|
+
long_desc <<-LONGDESC
|
16
|
+
List all running ECS tasks and services.
|
17
|
+
|
18
|
+
Example: `awshark ecs list`
|
19
|
+
LONGDESC
|
20
|
+
def list
|
21
|
+
process_class_options
|
22
|
+
|
23
|
+
manager = Awshark::Ecs::Manager.new
|
24
|
+
manager.clusters.each do |cluster|
|
25
|
+
puts "\n"
|
26
|
+
puts manager.inspect_cluster(cluster)
|
27
|
+
cluster.services.each do |service|
|
28
|
+
puts manager.inspect_service(service)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
10
33
|
desc 'login', 'docker login to AWS ECR'
|
11
34
|
long_desc <<-LONGDESC
|
12
35
|
Use docker login with AWS credentials to Elastic Container Registry
|
@@ -19,7 +42,7 @@ module Awshark
|
|
19
42
|
|
20
43
|
user_name = token.split(':').first
|
21
44
|
password = token.split(':').last
|
22
|
-
url = "https://#{Awshark.config.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com"
|
45
|
+
url = "https://#{Awshark.config.sts.aws_account_id}.dkr.ecr.eu-central-1.amazonaws.com"
|
23
46
|
|
24
47
|
`docker login -u #{user_name} -p #{password} #{url}`
|
25
48
|
end
|
data/lib/awshark/version.rb
CHANGED
data/lib/awshark.rb
CHANGED
@@ -6,13 +6,28 @@ require 'thor'
|
|
6
6
|
require 'yaml'
|
7
7
|
|
8
8
|
require 'awshark/version'
|
9
|
-
require 'awshark/configuration'
|
9
|
+
require 'awshark/cloud_formation/configuration'
|
10
|
+
require 'awshark/ecs/configuration'
|
11
|
+
require 'awshark/s3/configuration'
|
12
|
+
require 'awshark/sts/configuration'
|
10
13
|
|
11
14
|
module Awshark
|
12
15
|
class GracefulFail < StandardError; end
|
13
16
|
|
14
17
|
def self.config
|
15
|
-
@config ||=
|
18
|
+
@config ||= begin
|
19
|
+
cf = CloudFormation::Configuration.new
|
20
|
+
ecs = Ecs::Configuration.new
|
21
|
+
s3 = S3::Configuration.new
|
22
|
+
sts = Sts::Configuration.new
|
23
|
+
|
24
|
+
OpenStruct.new(
|
25
|
+
cloud_formation: cf,
|
26
|
+
ecs: ecs,
|
27
|
+
s3: s3,
|
28
|
+
sts: sts
|
29
|
+
)
|
30
|
+
end
|
16
31
|
end
|
17
32
|
|
18
33
|
def self.configure
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awshark
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joergen Dahlke
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-12-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: aws-sdk-ecs
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: aws-sdk-rds
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -239,6 +253,7 @@ files:
|
|
239
253
|
- gems.rb
|
240
254
|
- lib/awshark.rb
|
241
255
|
- lib/awshark/cli.rb
|
256
|
+
- lib/awshark/cloud_formation/configuration.rb
|
242
257
|
- lib/awshark/cloud_formation/file_loading.rb
|
243
258
|
- lib/awshark/cloud_formation/inferrer.rb
|
244
259
|
- lib/awshark/cloud_formation/manager.rb
|
@@ -246,15 +261,19 @@ files:
|
|
246
261
|
- lib/awshark/cloud_formation/stack.rb
|
247
262
|
- lib/awshark/cloud_formation/stack_events.rb
|
248
263
|
- lib/awshark/cloud_formation/template.rb
|
249
|
-
- lib/awshark/configuration.rb
|
250
264
|
- lib/awshark/ec2/instance.rb
|
251
265
|
- lib/awshark/ec2/manager.rb
|
266
|
+
- lib/awshark/ecs/cluster.rb
|
267
|
+
- lib/awshark/ecs/configuration.rb
|
268
|
+
- lib/awshark/ecs/manager.rb
|
252
269
|
- lib/awshark/profile_resolver.rb
|
253
270
|
- lib/awshark/rds/check_reservations.rb
|
254
271
|
- lib/awshark/rds/manager.rb
|
255
272
|
- lib/awshark/s3/artifact.rb
|
256
273
|
- lib/awshark/s3/bucket.rb
|
274
|
+
- lib/awshark/s3/configuration.rb
|
257
275
|
- lib/awshark/s3/manager.rb
|
276
|
+
- lib/awshark/sts/configuration.rb
|
258
277
|
- lib/awshark/subcommands/class_options.rb
|
259
278
|
- lib/awshark/subcommands/cloud_formation.rb
|
260
279
|
- lib/awshark/subcommands/ec2.rb
|
@@ -1,34 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module Awshark
|
4
|
-
class Configuration
|
5
|
-
attr_accessor :cloud_formation, :s3
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@cloud_formation = OpenStruct.new(
|
9
|
-
client: nil,
|
10
|
-
event_polling: 3
|
11
|
-
)
|
12
|
-
|
13
|
-
@s3 = OpenStruct.new(
|
14
|
-
client: nil
|
15
|
-
)
|
16
|
-
end
|
17
|
-
|
18
|
-
def aws_account_id
|
19
|
-
return @aws_account_id if defined?(@aws_account_id)
|
20
|
-
|
21
|
-
response = sts_client.get_caller_identity
|
22
|
-
|
23
|
-
@aws_account_id = response.account
|
24
|
-
end
|
25
|
-
|
26
|
-
def sts_client
|
27
|
-
@sts_client ||= Aws::STS::Client.new
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
attr_writer :sts_client
|
33
|
-
end
|
34
|
-
end
|