aws_instance_list 0.1.0 → 1.2.6

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4accfdc3e9e42fd65adf25830f1a458592e2d5b6
4
- data.tar.gz: b2324a9500396b09d2186bf76284925956753dda
3
+ metadata.gz: 3a88a496e99edde8c7d285a465cfe304c38fbf82
4
+ data.tar.gz: c5db25fd4d65f23a849fd817636f180e5e65f676
5
5
  SHA512:
6
- metadata.gz: 5f49bf99a394d3f3b685d1ddbee029ee9f189d4a254a86b29484d507639b799458f72e8b1a079a08efdf3f02c61426bec8e16d50f10e4c74f79768c90a1c500f
7
- data.tar.gz: 0d8dd2b7261fe378152f157ef56769ac82274d8797fb324b4efc2107727d12ac9307e81f2cbe3449734f3f0da877e3e095fb0b14b66a5b29ad7a73393a81ef7c
6
+ metadata.gz: 9f2bff084b04f818baafcddd07bd24ed8635bcb48d43b473da90e2e8c26cf7acb063a1d532e85a8af6298dc372c36de1e621a9562e75bd8ccd6890926e20c52d
7
+ data.tar.gz: '02487fda68e8e17d02758a7e384f586d8f42e9b7be6c90d783facff877f3d11d855ec0173e2a5dd8133efbe82ddbd0a68eacce935ed708ebb7e41b926a5b726b'
data/.gitignore CHANGED
@@ -10,3 +10,6 @@
10
10
  # rspec failure tracking
11
11
  .rspec_status
12
12
  *.sw*
13
+ .env
14
+ test.env
15
+ .byebug_history
data/Gemfile.lock CHANGED
@@ -1,12 +1,36 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- aws_instance_list (0.1.0)
4
+ aws_instance_list (1.2.6)
5
+ aws-sdk-cloudwatch (~> 1.6)
6
+ aws-sdk-ec2 (~> 1.37)
7
+ aws-sdk-rds (~> 1.23)
8
+ dotenv (~> 2.5)
5
9
 
6
10
  GEM
7
11
  remote: https://rubygems.org/
8
12
  specs:
13
+ aws-eventstream (1.0.1)
14
+ aws-partitions (1.95.0)
15
+ aws-sdk-cloudwatch (1.6.0)
16
+ aws-sdk-core (~> 3)
17
+ aws-sigv4 (~> 1.0)
18
+ aws-sdk-core (3.22.1)
19
+ aws-eventstream (~> 1.0)
20
+ aws-partitions (~> 1.0)
21
+ aws-sigv4 (~> 1.0)
22
+ jmespath (~> 1.0)
23
+ aws-sdk-ec2 (1.38.0)
24
+ aws-sdk-core (~> 3)
25
+ aws-sigv4 (~> 1.0)
26
+ aws-sdk-rds (1.23.0)
27
+ aws-sdk-core (~> 3)
28
+ aws-sigv4 (~> 1.0)
29
+ aws-sigv4 (1.0.3)
30
+ byebug (10.0.2)
9
31
  diff-lcs (1.3)
32
+ dotenv (2.5.0)
33
+ jmespath (1.4.0)
10
34
  rake (10.5.0)
11
35
  rspec (3.7.0)
12
36
  rspec-core (~> 3.7.0)
@@ -28,6 +52,7 @@ PLATFORMS
28
52
  DEPENDENCIES
29
53
  aws_instance_list!
30
54
  bundler (~> 1.16)
55
+ byebug (~> 10.0)
31
56
  rake (~> 10.0)
32
57
  rspec (~> 3.0)
33
58
 
data/README.md CHANGED
@@ -2,7 +2,10 @@
2
2
 
3
3
  Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/aws_instance_list`. To experiment with that code, run `bin/console` for an interactive prompt.
4
4
 
5
- TODO: Delete this and the text above, and describe your gem
5
+ This gem is an easy way to get AWS instance list in all regions.
6
+ The class AwsIntanceList::List runs one Thread by region to get the data in each one. Finally join all in one Array.
7
+
8
+ Using the AWS describe instance we can get the instances but the metrics are not available.
6
9
 
7
10
  ## Installation
8
11
 
@@ -22,7 +25,47 @@ Or install it yourself as:
22
25
 
23
26
  ## Usage
24
27
 
25
- TODO: Write usage instructions here
28
+ As a library you need require it after install the gem.
29
+
30
+ ```ruby
31
+
32
+ require 'aws_instance_list'
33
+
34
+ list= AwsInstanceList::List.new
35
+
36
+ # sample to get all rds instances
37
+
38
+ list.db_list # will return an array like this
39
+
40
+ # db_instance_identifier, engine, storage (GBytes), status, free storage available, region
41
+
42
+ #\>
43
+ [
44
+ ["db1", "mysql", 50, "available", 45.3829460144043, "eu-west-1"],
45
+ ["db2", "mysql", 50, "available", 44.111881256103516, "eu-west-1"],
46
+ ["db3", "mysql", 20, "available", 15.590309143066406, "eu-west-2"],
47
+ ["db4", "mysql", 100, "available", 94.48283767700195, "eu-west-2"]
48
+ ]
49
+
50
+ ```
51
+
52
+
53
+
54
+ ## Test
55
+ Add a test.env file with:
56
+
57
+ ```bash
58
+ DB_INSTANCE_IDENTIFIER=identifier_name_db
59
+ REGION=aws_region_to_test # sample: eu-central-1
60
+ LONG_REGION=aws_region_with_pagination_to_test # sample: eu-west-1
61
+
62
+ ```
63
+
64
+ And run
65
+
66
+ ```bash
67
+ rspec
68
+ ```
26
69
 
27
70
  ## Development
28
71
 
@@ -34,5 +34,10 @@ Gem::Specification.new do |spec|
34
34
 
35
35
  spec.add_development_dependency "bundler", "~> 1.16"
36
36
  spec.add_development_dependency "rake", "~> 10.0"
37
+ spec.add_development_dependency "byebug", "~> 10.0"
37
38
  spec.add_development_dependency "rspec", "~> 3.0"
39
+ spec.add_dependency "aws-sdk-rds", "~> 1.23"
40
+ spec.add_dependency "aws-sdk-ec2", "~> 1.37"
41
+ spec.add_dependency "aws-sdk-cloudwatch", "~> 1.6"
42
+ spec.add_dependency "dotenv", "~> 2.5"
38
43
  end
@@ -0,0 +1,43 @@
1
+ module AwsInstanceList
2
+
3
+ class List
4
+
5
+ attr_accessor :regions
6
+
7
+ def initialize
8
+ @regions=AwsInstanceList::Region.list
9
+ @db_list={}
10
+ end
11
+
12
+ def db_list
13
+
14
+ if @db_list.empty?
15
+
16
+ threads = []
17
+
18
+ regions.each do |region|
19
+
20
+ threads << Thread.new do
21
+ @db_list[region]=rds_db_list region: region
22
+ end
23
+
24
+ end
25
+
26
+ loop do
27
+ break if threads.count { |th| th.alive? } == 0
28
+ end
29
+
30
+ end
31
+
32
+ @db_list.values.flatten(1)
33
+
34
+ end
35
+
36
+ def rds_db_list region:
37
+ rds=AwsInstanceList::RDS.new region: region
38
+ rds.db_instances
39
+ rds.db_list
40
+ end
41
+
42
+ end
43
+ end
@@ -0,0 +1,43 @@
1
+ require 'aws-sdk-cloudwatch'
2
+
3
+ module AwsInstanceList
4
+
5
+ class Metric
6
+
7
+ attr_accessor :client
8
+
9
+ def initialize region: 'eu-west-1'
10
+ @client=Aws::CloudWatch::Client.new region: region
11
+ end
12
+
13
+ def statistics options
14
+ client.get_metric_statistics options
15
+ end
16
+
17
+ def list options
18
+ client.list_metrics options
19
+ end
20
+
21
+ def free_storage_space db_instance_identifier
22
+ resp=statistics( {
23
+ namespace: "AWS/RDS",
24
+ metric_name: "FreeStorageSpace",
25
+ dimensions: [
26
+ {
27
+ name: "DBInstanceIdentifier",
28
+ value: db_instance_identifier,
29
+ },
30
+ ],
31
+ start_time: Time.now - 600,
32
+ end_time: Time.now ,
33
+ period: 60,
34
+ statistics: ["Minimum"]
35
+ })
36
+
37
+ resp.datapoints.last.minimum / ( 1024.0 ** 3)
38
+
39
+ end
40
+
41
+ end
42
+ end
43
+
@@ -0,0 +1,71 @@
1
+ require 'aws-sdk-rds'
2
+ require 'yaml'
3
+
4
+ module AwsInstanceList
5
+
6
+ class RDS
7
+
8
+ attr_accessor :client, :region
9
+
10
+ def initialize region: 'eu-west-1'
11
+
12
+ @region=region
13
+
14
+ @client=Aws::RDS::Client.new region: region
15
+
16
+ @db_instances = []
17
+
18
+ end
19
+
20
+ def db_descriptions options={}
21
+ client.describe_db_instances(options)
22
+ end
23
+
24
+ def db_instances options={}
25
+ descriptions=db_descriptions(options)
26
+ @db_instances+=descriptions.db_instances
27
+ if descriptions.marker
28
+ options[:marker]=descriptions.marker
29
+ db_instances(options)
30
+ else
31
+ @db_instances
32
+ end
33
+ end
34
+
35
+ def db_list options: {}, fields: nil
36
+
37
+ fields||=load_db_fields
38
+
39
+ db_instances(options).map do |i|
40
+ fields.map { |f| i.send(f) } << free_storage_space(i.db_instance_identifier) << region
41
+ end
42
+ end
43
+
44
+ def load_db_fields
45
+ yaml['db']['fields']
46
+ end
47
+
48
+ def yaml
49
+ @yaml||=yaml_default.merge(yaml_file)[demodulize]
50
+ end
51
+
52
+ def yaml_default
53
+ YAML.load_file AwsInstanceList::DEFAULT_SETTINGS
54
+ end
55
+
56
+ def yaml_file
57
+ ENV.has_key?('AWS_INSTANCE_LIST_YAML') ? YAML.load_file(ENV['AWS_INSTANCE_LIST_YAML']) : {}
58
+ end
59
+
60
+ def demodulize
61
+ self.class.name.split('::').last
62
+ end
63
+
64
+ def free_storage_space db_instance_identifier
65
+ metric = AwsInstanceList::Metric.new region: region
66
+ metric.free_storage_space db_instance_identifier
67
+ end
68
+
69
+ end
70
+
71
+ end
@@ -0,0 +1,26 @@
1
+ require 'aws-sdk-ec2'
2
+
3
+ module AwsInstanceList
4
+
5
+ class Region
6
+
7
+ class << self
8
+
9
+ def ec2
10
+ @ec2||=Aws::EC2::Client.new
11
+ end
12
+
13
+ def descriptions
14
+ @descriptions||=ec2.describe_regions
15
+ end
16
+
17
+ def list
18
+ descriptions.regions.map do |description|
19
+ description.region_name
20
+ end
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+ end
@@ -1,3 +1,3 @@
1
1
  module AwsInstanceList
2
- VERSION = "0.1.0"
2
+ VERSION = "1.2.6"
3
3
  end
@@ -1,5 +1,15 @@
1
- require "aws_instance_list/version"
1
+ require 'aws_instance_list/list'
2
+ require 'aws_instance_list/region'
3
+ require 'aws_instance_list/metric'
4
+ require 'aws_instance_list/rds'
5
+ require 'aws_instance_list/version'
6
+
7
+ require 'dotenv/load'
8
+
9
+ Dotenv.load
2
10
 
3
11
  module AwsInstanceList
4
- # Your code goes here...
12
+
13
+ DEFAULT_SETTINGS= File.join(File.dirname(__FILE__),%w(config default_settings.yaml))
14
+
5
15
  end
@@ -0,0 +1,8 @@
1
+ ---
2
+ RDS:
3
+ db:
4
+ fields:
5
+ - db_instance_identifier
6
+ - engine
7
+ - allocated_storage
8
+ - db_instance_status
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aws_instance_list
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Diego PL
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-07-05 00:00:00.000000000 Z
11
+ date: 2018-07-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -38,6 +38,20 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: byebug
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '10.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '10.0'
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: rspec
43
57
  requirement: !ruby/object:Gem::Requirement
@@ -52,6 +66,62 @@ dependencies:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
68
  version: '3.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: aws-sdk-rds
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1.23'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1.23'
83
+ - !ruby/object:Gem::Dependency
84
+ name: aws-sdk-ec2
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.37'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '1.37'
97
+ - !ruby/object:Gem::Dependency
98
+ name: aws-sdk-cloudwatch
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.6'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.6'
111
+ - !ruby/object:Gem::Dependency
112
+ name: dotenv
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: '2.5'
118
+ type: :runtime
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: '2.5'
55
125
  description: The target is get the instance lists of AWS accounts. Return array of
56
126
  data.
57
127
  email:
@@ -74,7 +144,12 @@ files:
74
144
  - bin/console
75
145
  - bin/setup
76
146
  - lib/aws_instance_list.rb
147
+ - lib/aws_instance_list/list.rb
148
+ - lib/aws_instance_list/metric.rb
149
+ - lib/aws_instance_list/rds.rb
150
+ - lib/aws_instance_list/region.rb
77
151
  - lib/aws_instance_list/version.rb
152
+ - lib/config/default_settings.yaml
78
153
  homepage: https://github.com/diegopiccinini/aws_instance_list
79
154
  licenses:
80
155
  - MIT