rdstune 0.8.0 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/rdstune +10 -10
- data/lib/rdstune.rb +88 -82
- data/lib/version.rb +3 -1
- metadata +5 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9b304bd65c257d28fe26645a22f45af55266b6b5
|
4
|
+
data.tar.gz: 1e828da1b0e0a1f664619dba251ce75001c3b43c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 46f46ddd08ccdbcbaf82eccaf1bd843fecd0235b8a083c35c723340528846064518c9bb8238e46394a160cd8ee8be3df0561791bcb4dbc98f04e161c15085f2e
|
7
|
+
data.tar.gz: 13c519d846d21ecacbb9627b0448689356d594deab4421a84973ad52cf4a5e7085a2ac8b6cbabba9dd0942668a8ecfb55648b05108c951d96831c22fba3b981d
|
data/bin/rdstune
CHANGED
@@ -5,18 +5,11 @@ require_relative '../lib/rdstune'
|
|
5
5
|
require_relative '../lib/version'
|
6
6
|
|
7
7
|
p = Trollop::Parser.new do
|
8
|
-
version "rdstune version: #{VERSION}"
|
8
|
+
version "rdstune version: #{RDSTUNE::VERSION}"
|
9
9
|
banner <<-EOS
|
10
10
|
|
11
11
|
This gem creates a Parameter Group with sane defaults for your PostgreSQL RDS instances
|
12
12
|
|
13
|
-
Make sure you set the following environment variables
|
14
|
-
(or their ~/.aws/credentials equivilant)
|
15
|
-
|
16
|
-
export AWS_ACCESS_KEY="AWS_ACCESS_KEY"
|
17
|
-
export AWS_SECRET_KEY="AWS_SECRET_KEY"
|
18
|
-
export AWS_REGION='REGION' # ex: us-west-2
|
19
|
-
|
20
13
|
Options:
|
21
14
|
EOS
|
22
15
|
opt :type, "Type of Database Server (Web/DW/Mixed/Desktop)", :type => :string, :default => 'web'
|
@@ -24,7 +17,10 @@ EOS
|
|
24
17
|
opt :connections, "Specify the Target Max Connections", :type => :integer
|
25
18
|
opt :oversubscribe, "Oversubscribe the number of connections", :type => :integer
|
26
19
|
opt :name, "Name of your RDS Parameter Group", :type => :string
|
27
|
-
opt :family, "Database Family (Postgres version)", :type => :string, :default => 'postgres9.
|
20
|
+
opt :family, "Database Family (Postgres version)", :type => :string, :default => 'postgres9.4'
|
21
|
+
opt :access_key_id, "Set the AWS Access Key for the account (default: $AWS_ACCESS_KEY_ID)", :type => :string, :default => ENV['AWS_ACCESS_KEY_ID']
|
22
|
+
opt :secret_access_key, "Set the AWS Secret Key for the account (default: $AWS_SECRET_ACCESS_KEY)", :type => :string, :default => ENV['AWS_SECRET_ACCESS_KEY']
|
23
|
+
opt :region, "Specify the AWS Region for the account (default: $AWS_REGION)", :type => :string, :default => ENV['AWS_REGION']
|
28
24
|
opt :version, "Show the current version of rdstune"
|
29
25
|
end
|
30
26
|
|
@@ -38,8 +34,12 @@ end
|
|
38
34
|
|
39
35
|
name = opts[:name] || "rdstune-#{opts[:type]}-#{opts[:memory]}-#{opts[:connections]}".gsub('.','-')
|
40
36
|
options = {}
|
37
|
+
aws_credentials = { :access_key_id => opts[:access_key_id],
|
38
|
+
:secret_access_key => opts[:secret_access_key],
|
39
|
+
:region => opts[:region] }
|
41
40
|
options['connections'] = opts[:connections] if opts[:connections]
|
42
41
|
options['oversubscribe'] = opts[:oversubscribe] if opts[:oversubscribe]
|
43
|
-
rdstune = RdsTune.new opts[:type], opts[:memory],
|
42
|
+
rdstune = RDSTUNE::RdsTune.new(type: opts[:type], memory: opts[:memory],
|
43
|
+
aws_credentials: aws_credentials, options: options)
|
44
44
|
rdstune.create_parameter_group name, opts[:family]
|
45
45
|
rdstune.display_config
|
data/lib/rdstune.rb
CHANGED
@@ -2,104 +2,110 @@ require 'aws-sdk'
|
|
2
2
|
require 'mrtuner'
|
3
3
|
|
4
4
|
|
5
|
-
|
5
|
+
module RDSTUNE
|
6
|
+
class RdsTune < MrTuner
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
group_name = name
|
18
|
-
group_family = family
|
19
|
-
unless find_parameter_group(group_name)
|
20
|
-
@rds.create_db_parameter_group({
|
21
|
-
:db_parameter_group_name => group_name,
|
22
|
-
:db_parameter_group_family => group_family,
|
23
|
-
:description => "Created by RdsTune - #{@type} - #{@memory} - #{Time.now.to_s}"
|
24
|
-
})
|
8
|
+
def initialize(type:, memory:, options: {}, aws_credentials: {}, rds_client: nil)
|
9
|
+
if rds_client
|
10
|
+
@rds = rds_client
|
11
|
+
else
|
12
|
+
@rds = Aws::RDS::Client.new(aws_credentials)
|
13
|
+
end
|
14
|
+
@type = type
|
15
|
+
@memory = memory
|
16
|
+
@options = options
|
17
|
+
super(@type, @memory, @options)
|
25
18
|
end
|
26
|
-
update_parameter_group(group_name)
|
27
|
-
end
|
28
19
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
20
|
+
def create_parameter_group(name = nil, family = nil)
|
21
|
+
abort("Please Specify a Parameter Group Name: #{name} or Family: #{family}") unless name && family
|
22
|
+
group_name = name
|
23
|
+
group_family = family
|
24
|
+
unless find_parameter_group(group_name)
|
25
|
+
@rds.create_db_parameter_group({
|
26
|
+
:db_parameter_group_name => group_name,
|
27
|
+
:db_parameter_group_family => group_family,
|
28
|
+
:description => "Created by RdsTune - #{@type} - #{@memory} - #{Time.now.to_s}"
|
35
29
|
})
|
36
|
-
|
37
|
-
|
38
|
-
rescue Aws::RDS::Errors::InvalidDBParameterGroupState
|
39
|
-
abort("Parameter group not updateable at this time " + Aws::RDS::Errors::InvalidDBParameterGroupState)
|
30
|
+
end
|
31
|
+
update_parameter_group(group_name)
|
40
32
|
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def generate_update(group_name)
|
44
|
-
parameters = get_all_parameters(group_name)
|
45
|
-
new_config = get_config
|
46
|
-
out = Array.new
|
47
|
-
new_config.each do |p, v|
|
48
|
-
parameter = get_parameter(p.to_s, parameters)
|
49
|
-
low,high = parameter[:allowed_values].split('-')
|
50
33
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
34
|
+
private
|
35
|
+
def update_parameter_group(group_name)
|
36
|
+
begin
|
37
|
+
@rds.modify_db_parameter_group({
|
38
|
+
:db_parameter_group_name => group_name,
|
39
|
+
:parameters => generate_update(group_name)
|
40
|
+
})
|
41
|
+
puts "Group #{group_name } created."
|
42
|
+
return group_name
|
43
|
+
rescue Aws::RDS::Errors::InvalidDBParameterGroupState
|
44
|
+
abort("Parameter group not updateable at this time " + Aws::RDS::Errors::InvalidDBParameterGroupState)
|
57
45
|
end
|
46
|
+
end
|
58
47
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
v = high if v.to_f > high.to_f
|
67
|
-
parameter[:parameter_value] = v.to_i.to_s
|
68
|
-
end
|
48
|
+
def generate_update(group_name)
|
49
|
+
parameters = get_all_parameters(group_name)
|
50
|
+
new_config = get_config
|
51
|
+
out = Array.new
|
52
|
+
new_config.each do |p, v|
|
53
|
+
parameter = get_parameter(p.to_s, parameters)
|
54
|
+
low,high = parameter[:allowed_values].split('-')
|
69
55
|
|
70
|
-
|
71
|
-
parameter[:
|
72
|
-
|
73
|
-
|
56
|
+
# Convert Bytes to Kibibytes for Memory parameters
|
57
|
+
case parameter[:parameter_name]
|
58
|
+
when 'work_mem','maintenance_work_mem'
|
59
|
+
v = v / 1024
|
60
|
+
when 'shared_buffers','effective_cache_size'
|
61
|
+
v = (v / 1024) / 8
|
62
|
+
end
|
63
|
+
|
64
|
+
case parameter[:data_type]
|
65
|
+
when 'float'
|
66
|
+
v = low if v.to_f < low.to_f
|
67
|
+
v = high if v.to_f > high.to_f
|
68
|
+
parameter[:parameter_value] = v.to_f.to_s
|
69
|
+
when 'integer'
|
70
|
+
v = low if v.to_f < low.to_f
|
71
|
+
v = high if v.to_f > high.to_f
|
72
|
+
parameter[:parameter_value] = v.to_i.to_s
|
73
|
+
end
|
74
|
+
|
75
|
+
if parameter[:apply_type] == 'dynamic'
|
76
|
+
parameter[:apply_method] = 'immediate'
|
77
|
+
else
|
78
|
+
parameter[:apply_method] = 'pending-reboot'
|
79
|
+
end
|
80
|
+
out.push(parameter)
|
74
81
|
end
|
75
|
-
out
|
82
|
+
out
|
76
83
|
end
|
77
|
-
out
|
78
|
-
end
|
79
84
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
85
|
+
def get_all_parameters(group_name)
|
86
|
+
marker = ""
|
87
|
+
parameters = []
|
88
|
+
loop do
|
89
|
+
resp = @rds.describe_db_parameters( :db_parameter_group_name => group_name, :marker => marker)
|
90
|
+
parameters += resp[:parameters]
|
91
|
+
marker = resp[:marker]
|
92
|
+
break unless marker
|
93
|
+
end
|
94
|
+
parameters
|
88
95
|
end
|
89
|
-
parameters
|
90
|
-
end
|
91
96
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
+
def find_parameter_group(name)
|
98
|
+
begin
|
99
|
+
@rds.describe_db_parameter_groups( { :db_parameter_group_name => name } )
|
100
|
+
rescue Aws::RDS::Errors::DBParameterGroupNotFound
|
101
|
+
nil
|
102
|
+
end
|
97
103
|
end
|
98
|
-
end
|
99
104
|
|
100
|
-
|
101
|
-
|
102
|
-
|
105
|
+
def get_parameter(name, parameters)
|
106
|
+
parameters.select {|parameter| parameter[:parameter_name] == name}.first
|
107
|
+
end
|
103
108
|
|
104
109
|
|
110
|
+
end
|
105
111
|
end
|
data/lib/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdstune
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- David Kerr
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02-
|
11
|
+
date: 2016-02-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -74,9 +74,9 @@ require_paths:
|
|
74
74
|
- lib
|
75
75
|
required_ruby_version: !ruby/object:Gem::Requirement
|
76
76
|
requirements:
|
77
|
-
- - "
|
77
|
+
- - "~>"
|
78
78
|
- !ruby/object:Gem::Version
|
79
|
-
version: '0'
|
79
|
+
version: '2.0'
|
80
80
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
81
|
requirements:
|
82
82
|
- - ">="
|
@@ -84,7 +84,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
84
84
|
version: '0'
|
85
85
|
requirements: []
|
86
86
|
rubyforge_project:
|
87
|
-
rubygems_version: 2.4.
|
87
|
+
rubygems_version: 2.4.1
|
88
88
|
signing_key:
|
89
89
|
specification_version: 4
|
90
90
|
summary: Creates Tuned RDS Parameter Group for Postgres
|