awshark 1.1.0 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|