rdstune 0.8.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. checksums.yaml +4 -4
  2. data/bin/rdstune +10 -10
  3. data/lib/rdstune.rb +88 -82
  4. data/lib/version.rb +3 -1
  5. metadata +5 -5
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 83bde836e4413eeea8e3885fc07c908125e96226
4
- data.tar.gz: 741dffc42a9a8e332d595dbe393a38642a75d2fc
3
+ metadata.gz: 9b304bd65c257d28fe26645a22f45af55266b6b5
4
+ data.tar.gz: 1e828da1b0e0a1f664619dba251ce75001c3b43c
5
5
  SHA512:
6
- metadata.gz: d3dde8892b10db353007b1d54a6af0631fa95e47589388b31fff01d816612fda5c55258d9ac6f345649873ee412e4fb252142aabd76b2edebcceee4684317b2e
7
- data.tar.gz: 9949fa00c33055f1accd770e62dc839fc4f2c1167fb52d7309a8870d63e3d2dc4bfd4b7b7a33313c6fd98d63eaf1baae794edb3c37687012849b39ef7e8e77fd
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.3'
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], options
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
- class RdsTune < MrTuner
5
+ module RDSTUNE
6
+ class RdsTune < MrTuner
6
7
 
7
- def initialize(type, memory, options={})
8
- @rds = Aws::RDS::Client.new
9
- @type = type
10
- @memory = memory
11
- @options = options
12
- super(@type, @memory, @options)
13
- end
14
-
15
- def create_parameter_group(name = nil, family = nil)
16
- abort("Please Specify a Parameter Group Name: #{name} or Family: #{family}") unless name && family
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
- private
30
- def update_parameter_group(group_name)
31
- begin
32
- @rds.modify_db_parameter_group({
33
- :db_parameter_group_name => group_name,
34
- :parameters => generate_update(group_name)
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
- puts "Group #{group_name } created."
37
- return group_name
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
- # Convert Bytes to Kibibytes for Memory parameters
52
- case parameter[:parameter_name]
53
- when 'work_mem','maintenance_work_mem'
54
- v = v / 1024
55
- when 'shared_buffers','effective_cache_size'
56
- v = (v / 1024) / 8
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
- case parameter[:data_type]
60
- when 'float'
61
- v = low if v.to_f < low.to_f
62
- v = high if v.to_f > high.to_f
63
- parameter[:parameter_value] = v.to_f.to_s
64
- when 'integer'
65
- v = low if v.to_f < low.to_f
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
- if parameter[:apply_type] == 'dynamic'
71
- parameter[:apply_method] = 'immediate'
72
- else
73
- parameter[:apply_method] = 'pending-reboot'
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.push(parameter)
82
+ out
76
83
  end
77
- out
78
- end
79
84
 
80
- def get_all_parameters(group_name)
81
- marker = ""
82
- parameters = []
83
- loop do
84
- resp = @rds.describe_db_parameters( :db_parameter_group_name => group_name, :marker => marker)
85
- parameters += resp[:parameters]
86
- marker = resp[:marker]
87
- break unless marker
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
- def find_parameter_group(name)
93
- begin
94
- @rds.describe_db_parameter_groups( { :db_parameter_group_name => name } )
95
- rescue Aws::RDS::Errors::DBParameterGroupNotFound
96
- nil
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
- def get_parameter(name, parameters)
101
- parameters.select {|parameter| parameter[:parameter_name] == name}.first
102
- end
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
@@ -1 +1,3 @@
1
- VERSION = "0.8.0"
1
+ module RDSTUNE
2
+ VERSION = "1.0.0"
3
+ end
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.8.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 00:00:00.000000000 Z
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.5
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