rdstune 0.8.0 → 1.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.
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