awslist 1.0.2 → 2.0.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/README.md +21 -3
- data/lib/awslist/version.rb +1 -1
- data/lib/awstool +177 -0
- metadata +3 -3
- data/lib/awslist.rb +0 -182
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9ebe1e0a348377c273f14f96e25d83eabcb16dbc
|
4
|
+
data.tar.gz: da77c0fc4588a573e4139a221be469ab2c229193
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 17238145bd85f8e7d28d2d199c36aa4ce83706bf03ec15f985be4fb49fffe7496074b6ec231aeb33f7b3e34def39dd9932d87520fe358fb1a0fb7960ea05d711
|
7
|
+
data.tar.gz: '0987468f19e490b18c10ab0d906c6541a554cf1106e293a879e4a5de4caa9d2df406975c02d80e2e4c1fac9f899120a37f2e9f00eb4b87a12485762293a94411'
|
data/README.md
CHANGED
@@ -23,13 +23,31 @@ Or install it yourself as:
|
|
23
23
|
|
24
24
|
## Usage
|
25
25
|
|
26
|
+
The new update makes this gem available to be used as command line tool.
|
27
|
+
|
28
|
+
Usage: awslist [options]
|
29
|
+
|
30
|
+
|
31
|
+
-os OPERATING_SYSTEM OS list : linux , rhel , sles , mswin , mswinSQL , mswinSQLWeb , mswinSQLEnterprise
|
32
|
+
|
33
|
+
-c, --cpu CPU_REQUIREMENT Basic value of cpu required in integer
|
34
|
+
|
35
|
+
-m, --mem MEMORY_REQUIREMENT Basic value of memory required in integer
|
36
|
+
|
37
|
+
-r, --region REGION Required region , list : us-east-1 , us-east-2 , us-west-2 , us-west-1 , ca-central-1 , eu-west-1 , eu-west-2 , eu-central-1 , ap-southeast-1 , ap-northeast-1 , ap-southeast-2 , ap-northeast-2 , ap-south-1 , sa-east-1 , us-gov-west-1
|
38
|
+
|
39
|
+
--reload y/n Fetch fresh data from website
|
40
|
+
|
41
|
+
-h, --help Displays Help
|
42
|
+
|
43
|
+
|
26
44
|
The gem contains basically 3 functions
|
27
45
|
|
28
46
|
1. get_input :
|
29
47
|
|
30
48
|
This function returns 5 parameters , which are later used to call main functionality.
|
31
49
|
|
32
|
-
@os , @region , @memory , @cpu_req , @hash = get_input
|
50
|
+
@os , @region , @memory , @cpu_req , @hash = Awslist.get_input
|
33
51
|
|
34
52
|
a. @os is the operating system value
|
35
53
|
|
@@ -49,7 +67,7 @@ The gem contains basically 3 functions
|
|
49
67
|
|
50
68
|
After taking the input from the user , refine output is called , with all above 5 paramenters , i.e.
|
51
69
|
|
52
|
-
@output = refine_output(@os , @region , @memory , @cpu_req , @hash)
|
70
|
+
@output = Awslist.refine_output(@os , @region , @memory , @cpu_req , @hash)
|
53
71
|
|
54
72
|
It will output a resulted array of the requirements matching instances
|
55
73
|
|
@@ -59,7 +77,7 @@ The gem contains basically 3 functions
|
|
59
77
|
|
60
78
|
It will take input as output of refine_output , and print the results
|
61
79
|
|
62
|
-
print(@output)
|
80
|
+
Awslist.print(@output)
|
63
81
|
|
64
82
|
|
65
83
|
## Development
|
data/lib/awslist/version.rb
CHANGED
data/lib/awstool
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'awslist/version'
|
4
|
+
require 'rest-client'
|
5
|
+
require 'nokogiri'
|
6
|
+
require 'json'
|
7
|
+
require 'optparse'
|
8
|
+
|
9
|
+
class Awslist
|
10
|
+
# Your code goes here...
|
11
|
+
attr_accessor :parser , :hash , :output
|
12
|
+
def initialize
|
13
|
+
@hash = {}
|
14
|
+
@set = 'n'
|
15
|
+
@options = {:os => 'linux' , :region => 'us-west-1' , :cpu_req => 0 , :mem_req => 0 , :reload => 'n'}
|
16
|
+
@os_list = {
|
17
|
+
'linux' => 0,
|
18
|
+
'rhel' => 0,
|
19
|
+
'sles' => 0,
|
20
|
+
'mswin' => 0,
|
21
|
+
'mswinSQL' => 0,
|
22
|
+
'mswinSQLWeb' => 0,
|
23
|
+
'mswinSQLEnterprise' => 0
|
24
|
+
}
|
25
|
+
@region_list = {
|
26
|
+
'us-east-1' => 0,
|
27
|
+
'us-east-2' => 0,
|
28
|
+
'us-west-2' => 0,
|
29
|
+
'us-west-1' => 0,
|
30
|
+
'ca-central-1' => 0,
|
31
|
+
'eu-west-1' => 0,
|
32
|
+
'eu-west-2' => 0,
|
33
|
+
'eu-central-1' => 0,
|
34
|
+
'ap-southeast-1' => 0,
|
35
|
+
'ap-northeast-1' => 0,
|
36
|
+
'ap-southeast-2' => 0,
|
37
|
+
'ap-northeast-2' => 0,
|
38
|
+
'ap-south-1' => 0,
|
39
|
+
'sa-east-1' => 0,
|
40
|
+
'us-gov-west-1' => 0
|
41
|
+
}
|
42
|
+
|
43
|
+
@parser = OptionParser.new do |opts|
|
44
|
+
opts.banner = 'Usage: awslist [options]'
|
45
|
+
opts.on('-os OPERATING_SYSTEM', 'OS list : linux , rhel , sles , mswin , mswinSQL , mswinSQLWeb , mswinSQLEnterprise' ) do |os|
|
46
|
+
@options[:os] = os.strip.downcase;
|
47
|
+
end
|
48
|
+
opts.on('-c', '--cpu CPU_REQUIREMENT', 'Basic value of cpu required in integer') do |cpu|
|
49
|
+
@options[:cpu_req] = cpu.strip;
|
50
|
+
end
|
51
|
+
opts.on('-m', '--mem MEMORY_REQUIREMENT', 'Basic value of memory required in integer') do |memory|
|
52
|
+
@options[:mem_req] = memory.strip;
|
53
|
+
end
|
54
|
+
opts.on('-r', '--region REGION', 'Required region , list : us-east-1 , us-east-2 , us-west-2 , us-west-1 , ca-central-1 , eu-west-1 , eu-west-2 , eu-central-1 , ap-southeast-1 , ap-northeast-1 , ap-southeast-2 , ap-northeast-2 , ap-south-1 , sa-east-1 , us-gov-west-1') do |reg|
|
55
|
+
@options[:region] = reg.strip.downcase;
|
56
|
+
end
|
57
|
+
opts.on('--reload y/n' , 'Fetch fresh data from website') do |get|
|
58
|
+
@options[:reload] = get.strip.downcase;
|
59
|
+
@set = 'y'
|
60
|
+
end
|
61
|
+
opts.on('-h', '--help', 'Displays Help') do
|
62
|
+
puts opts
|
63
|
+
exit
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
def reload_files
|
69
|
+
['linux','rhel','sles','mswin','mswinSQL','mswinSQLWeb','mswinSQLEnterprise'].each do |x|
|
70
|
+
s = RestClient.get "https://a0.awsstatic.com/pricing/1/ec2/#{x}-od.min.js"
|
71
|
+
s.gsub!(/^.*callback\(/, '') # removes the comment and callback function from the start of the string
|
72
|
+
s.gsub!(/\);$/, '') # removes the end of the callback function
|
73
|
+
s.gsub!(/(\w+):/, '"\1":')
|
74
|
+
hash = JSON.parse(s)
|
75
|
+
File.open("#{x}","w") { |file| file.write(hash.to_json) }
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def reload_hash
|
80
|
+
['linux','rhel','sles','mswin','mswinSQL','mswinSQLWeb','mswinSQLEnterprise'].each do |x|
|
81
|
+
s = JSON.parse(File.read(x))
|
82
|
+
@hash[x] = @hash.fetch(x,{})
|
83
|
+
s['config']['regions'].each do |region_spec|
|
84
|
+
str = region_spec['region']
|
85
|
+
@hash[x][str] = @hash[x].fetch(str,{})
|
86
|
+
@hash[x][str]['vCPU'] = @hash[x][str].fetch('vCPU',{})
|
87
|
+
@hash[x][str]['memoryGiB'] = @hash[x][str].fetch('memoryGiB',{})
|
88
|
+
|
89
|
+
region_spec['instanceTypes'].each do |type|
|
90
|
+
type['sizes'].each do |instance_spec|
|
91
|
+
instance_hash = {}
|
92
|
+
instance_hash['size'] = instance_spec['size']
|
93
|
+
instance_hash['vCPU'] = instance_spec['vCPU']
|
94
|
+
instance_hash['ECU'] = instance_spec['ECU']
|
95
|
+
instance_hash['memoryGiB'] = instance_spec['memoryGiB']
|
96
|
+
instance_hash['storageGB'] = instance_spec['storageGB']
|
97
|
+
instance_hash['price'] = instance_spec['valueColumns'][0]['prices']['USD']
|
98
|
+
|
99
|
+
cpu = instance_hash['vCPU']
|
100
|
+
mem = instance_hash['memoryGiB']
|
101
|
+
|
102
|
+
@hash[x][str]['vCPU'][cpu] = @hash[x][str]['vCPU'].fetch(cpu,[])
|
103
|
+
@hash[x][str]['vCPU'][cpu] << instance_hash
|
104
|
+
@hash[x][str]['memoryGiB'][mem] = @hash[x][str]['memoryGiB'].fetch(mem,[])
|
105
|
+
@hash[x][str]['memoryGiB'][mem] << instance_hash
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
110
|
+
File.open('Complete_Data','w'){ |file| file.write(@hash.to_json) }
|
111
|
+
end
|
112
|
+
|
113
|
+
def reloaded_hash
|
114
|
+
@hash = JSON.parse(File.read('Complete_Data'))
|
115
|
+
end
|
116
|
+
|
117
|
+
def refine_output
|
118
|
+
a = []
|
119
|
+
b = []
|
120
|
+
@hash[@options[:os]][@options[:region]]['vCPU'].each do |k,v|
|
121
|
+
if k.to_f >= @options[:cpu_req].to_s.strip.to_f
|
122
|
+
v.each do |c|
|
123
|
+
a << c
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
|
128
|
+
@hash[@options[:os]][@options[:region]]['memoryGiB'].each do |k,v|
|
129
|
+
if k.to_f >= @options[:mem_req].to_s.strip.to_f
|
130
|
+
v.each do |c|
|
131
|
+
b << c
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
@output = a & b
|
136
|
+
end
|
137
|
+
|
138
|
+
def prints
|
139
|
+
@output.each do |hashes_everywhere|
|
140
|
+
value = hashes_everywhere['price'].to_f
|
141
|
+
puts hashes_everywhere['size'] + ' -c ' + hashes_everywhere['vCPU'] + ' -m ' + hashes_everywhere['memoryGiB'] + ' -p ' + value.to_s + '$ per/hr and ' + (value*24*30).round(3).to_s + '$ per/month'
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
def what_to_call
|
146
|
+
if @options[:reload] == 'y' || !File.exist?('Complete_Data')
|
147
|
+
reload_files
|
148
|
+
reload_hash
|
149
|
+
elsif @set == 'y' && @options[:reload] != 'n'
|
150
|
+
puts @parser
|
151
|
+
exit
|
152
|
+
end
|
153
|
+
begin
|
154
|
+
raise if !Integer(@options[:cpu_req])
|
155
|
+
raise if !Integer(@options[:mem_req])
|
156
|
+
raise if !@os_list.key?(@options[:os])
|
157
|
+
raise if !@region_list.key?(@options[:region])
|
158
|
+
rescue
|
159
|
+
puts @parser
|
160
|
+
exit
|
161
|
+
end
|
162
|
+
reloaded_hash
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
hope = Awslist.new
|
167
|
+
#hope.initialize
|
168
|
+
begin hope.parser.parse! ARGV
|
169
|
+
rescue OptionParser::InvalidOption => e
|
170
|
+
puts e
|
171
|
+
puts hope.parser
|
172
|
+
exit 1
|
173
|
+
end
|
174
|
+
hope.what_to_call
|
175
|
+
hope.reloaded_hash
|
176
|
+
hope.refine_output
|
177
|
+
hope.prints
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: awslist
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Akkks
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rest-client
|
@@ -112,8 +112,8 @@ files:
|
|
112
112
|
- awslist.gemspec
|
113
113
|
- bin/console
|
114
114
|
- bin/setup
|
115
|
-
- lib/awslist.rb
|
116
115
|
- lib/awslist/version.rb
|
116
|
+
- lib/awstool
|
117
117
|
homepage: https://github.com/Akkks/awslist
|
118
118
|
licenses:
|
119
119
|
- MIT
|
data/lib/awslist.rb
DELETED
@@ -1,182 +0,0 @@
|
|
1
|
-
require 'awslist/version'
|
2
|
-
require 'rest-client'
|
3
|
-
require 'nokogiri'
|
4
|
-
require 'json'
|
5
|
-
|
6
|
-
module Awslist
|
7
|
-
# Your code goes here...
|
8
|
-
#def initialize
|
9
|
-
#@aws = Awslist.new
|
10
|
-
#end
|
11
|
-
|
12
|
-
def self.get_os(os_str)
|
13
|
-
os_list = {
|
14
|
-
'1' => 'linux' ,
|
15
|
-
'2' => 'rhel' ,
|
16
|
-
'3' => 'sles' ,
|
17
|
-
'4' => 'mswin' ,
|
18
|
-
'5' => 'mswinSQL' ,
|
19
|
-
'6' => 'mswinSQLWeb' ,
|
20
|
-
'7' => 'mswinSQLEnterprise'
|
21
|
-
}
|
22
|
-
return os_list[os_str.strip.to_s] if os_list.key?(os_str.strip.to_s)
|
23
|
-
puts 'Please input correct choice for Operating system'
|
24
|
-
abort
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.get_region(region_str)
|
28
|
-
region_list = {
|
29
|
-
'1' => 'us-east-1' ,
|
30
|
-
'2' => 'us-east-2' ,
|
31
|
-
'3' => 'us-west-2' ,
|
32
|
-
'4' => 'us-west-1' ,
|
33
|
-
'5' => 'ca-central-1' ,
|
34
|
-
'6' => 'eu-west-1' ,
|
35
|
-
'7' => 'eu-west-2' ,
|
36
|
-
'8' => 'eu-central-1' ,
|
37
|
-
'9' => 'ap-southeast-1' ,
|
38
|
-
'10' => 'ap-northeast-1' ,
|
39
|
-
'11' => 'ap-southeast-2' ,
|
40
|
-
'12' => 'ap-northeast-2' ,
|
41
|
-
'13' => 'ap-south-1' ,
|
42
|
-
'14' => 'sa-east-1' ,
|
43
|
-
'15' => 'us-gov-west-1'
|
44
|
-
}
|
45
|
-
return region_list[region_str.strip.to_s] if region_list.key?(region_str.strip.to_s)
|
46
|
-
puts 'Please input correct choice for Region'
|
47
|
-
abort
|
48
|
-
end
|
49
|
-
|
50
|
-
def self.reload_files
|
51
|
-
['linux','rhel','sles','mswin','mswinSQL','mswinSQLWeb','mswinSQLEnterprise'].each do |x|
|
52
|
-
s = RestClient.get "https://a0.awsstatic.com/pricing/1/ec2/#{x}-od.min.js"
|
53
|
-
s.gsub!(/^.*callback\(/, '') # removes the comment and callback function from the start of the string
|
54
|
-
s.gsub!(/\);$/, '') # removes the end of the callback function
|
55
|
-
s.gsub!(/(\w+):/, '"\1":')
|
56
|
-
hash = JSON.parse(s)
|
57
|
-
File.open("#{x}","w") { |file| file.write(hash.to_json) }
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def self.reload_hash
|
62
|
-
hash = {}
|
63
|
-
['linux','rhel','sles','mswin','mswinSQL','mswinSQLWeb','mswinSQLEnterprise'].each do |x|
|
64
|
-
s = JSON.parse(File.read(x))
|
65
|
-
hash[x] = hash.fetch(x,{})
|
66
|
-
s['config']['regions'].each do |region_spec|
|
67
|
-
str = region_spec['region']
|
68
|
-
hash[x][str] = hash[x].fetch(str,{})
|
69
|
-
hash[x][str]['vCPU'] = hash[x][str].fetch('vCPU',{})
|
70
|
-
hash[x][str]['memoryGiB'] = hash[x][str].fetch('memoryGiB',{})
|
71
|
-
|
72
|
-
region_spec['instanceTypes'].each do |type|
|
73
|
-
type['sizes'].each do |instance_spec|
|
74
|
-
instance_hash = {}
|
75
|
-
instance_hash['size'] = instance_spec['size']
|
76
|
-
instance_hash['vCPU'] = instance_spec['vCPU']
|
77
|
-
instance_hash['ECU'] = instance_spec['ECU']
|
78
|
-
instance_hash['memoryGiB'] = instance_spec['memoryGiB']
|
79
|
-
instance_hash['storageGB'] = instance_spec['storageGB']
|
80
|
-
instance_hash['price'] = instance_spec['valueColumns'][0]['prices']['USD']
|
81
|
-
|
82
|
-
cpu = instance_hash['vCPU']
|
83
|
-
mem = instance_hash['memoryGiB']
|
84
|
-
|
85
|
-
hash[x][str]['vCPU'][cpu] = hash[x][str]['vCPU'].fetch(cpu,[])
|
86
|
-
hash[x][str]['vCPU'][cpu] << instance_hash
|
87
|
-
hash[x][str]['memoryGiB'][mem] = hash[x][str]['memoryGiB'].fetch(mem,[])
|
88
|
-
hash[x][str]['memoryGiB'][mem] << instance_hash
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
end
|
93
|
-
File.open('Complete_Data','w'){ |file| file.write(hash.to_json) }
|
94
|
-
end
|
95
|
-
|
96
|
-
def self.reloaded_hash
|
97
|
-
hash = JSON.parse(File.read('Complete_Data'))
|
98
|
-
return hash
|
99
|
-
end
|
100
|
-
|
101
|
-
def self.get_input
|
102
|
-
puts 'Want to reload data?y/n'
|
103
|
-
@decision = STDIN.gets
|
104
|
-
if @decision.strip == 'y' || ! File.exist?('Complete_Data')
|
105
|
-
reload_files
|
106
|
-
reload_hash
|
107
|
-
end
|
108
|
-
@hash = reloaded_hash
|
109
|
-
|
110
|
-
puts 'Enter your choice of Operating system'
|
111
|
-
puts '
|
112
|
-
1 : linux
|
113
|
-
2 : rhel
|
114
|
-
3 : sles
|
115
|
-
4 : mswin
|
116
|
-
5 : mswinSQL
|
117
|
-
6 : mswinSQLWeb
|
118
|
-
7 : mswinSQLEnterprise'
|
119
|
-
@os = get_os(STDIN.gets)
|
120
|
-
puts 'Enter your choice of Region'
|
121
|
-
puts '
|
122
|
-
1 : us-east-1
|
123
|
-
2 : us-east-2
|
124
|
-
3 : us-west-2
|
125
|
-
4 : us-west-1
|
126
|
-
5 : ca-central-1
|
127
|
-
6 : eu-west-1
|
128
|
-
7 : eu-west-2
|
129
|
-
8 : eu-central-1
|
130
|
-
9 : ap-southeast-1
|
131
|
-
10 : ap-northeast-1
|
132
|
-
11 : ap-southeast-2
|
133
|
-
12 : ap-northeast-2
|
134
|
-
13 : ap-south-1
|
135
|
-
14 : sa-east-1
|
136
|
-
15 : us-gov-west-1'
|
137
|
-
@region = get_region(STDIN.gets)
|
138
|
-
puts 'Enter your memory requirement , else nil'
|
139
|
-
@memory = STDIN.gets
|
140
|
-
puts 'Enter your cpu requirement , else nil'
|
141
|
-
@cpu_req = STDIN.gets
|
142
|
-
|
143
|
-
return @os , @region , @memory , @cpu_req , @hash
|
144
|
-
end
|
145
|
-
|
146
|
-
def self.refine_output(os,region,memory,cpu_req,hash)
|
147
|
-
a = []
|
148
|
-
b = []
|
149
|
-
memory = '0' if memory.strip == 'nil'
|
150
|
-
cpu_req = '0' if cpu_req.strip == 'nil'
|
151
|
-
|
152
|
-
hash[os][region]['vCPU'].each do |k,v|
|
153
|
-
if k.to_f >= cpu_req.strip.to_f
|
154
|
-
v.each do |c|
|
155
|
-
a << c
|
156
|
-
end
|
157
|
-
end
|
158
|
-
end
|
159
|
-
|
160
|
-
hash[os][region]['memoryGiB'].each do |k,v|
|
161
|
-
if k.to_f >= memory.strip.to_f
|
162
|
-
v.each do |c|
|
163
|
-
b << c
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
output = a & b
|
168
|
-
|
169
|
-
return output
|
170
|
-
end
|
171
|
-
|
172
|
-
def self.print(output)
|
173
|
-
output.each do |hashes_everywhere|
|
174
|
-
value = hashes_everywhere['price'].to_f
|
175
|
-
puts hashes_everywhere['size'] + ' -c ' + hashes_everywhere['vCPU'] + ' -m ' + hashes_everywhere['memoryGiB'] + ' -p ' + value.to_s + '$ perhr and ' + (value*24).round(3).to_s + '$ perday'
|
176
|
-
end
|
177
|
-
end
|
178
|
-
|
179
|
-
#@os , @region , @memory , @cpu_req , @hash = get_input
|
180
|
-
#@output = refine_output(@os , @region , @memory , @cpu_req , @hash)
|
181
|
-
#print(@output)
|
182
|
-
end
|