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