Class: Chef::Knife::RdsPgFromDataBag
- Inherits:
-
Chef::Knife
- Object
- Chef::Knife
- Chef::Knife::RdsPgFromDataBag
- Includes:
- RdsBase, RdsBaseDataBag
- Defined in:
- lib/chef/knife/rds_pg_from_data_bag.rb
Constant Summary
Constants included from RdsBase
Chef::Knife::RdsBase::APPLY_METHODS
Instance Method Summary collapse
-
#assign_parameters_to_db_parameter_group!(apply_method = 'pending-reboot') ⇒ Object
Assigns all of data bag parameters to the parameter group AWS API support a maximum of 20 parameters updated in one call.
-
#create_db_parameter_group! ⇒ Object
Create a new RDS Parameter group using the provideda data bag.
-
#data_bag_item_name ⇒ Object
For use with base data bag module.
-
#db_parameter_group ⇒ Object
Load the DB Parameter Group resource from AWS using the API.
-
#db_parameter_group_name ⇒ Object
The name of the database parameter group, extracted from name arguments.
-
#modify_db_parameter_group_with_params!(params = []) ⇒ Object
Modify the parameters of an existing RDS Parameter Group.
-
#reset_parameters_from_db_parameter_group!(apply_method) ⇒ Object
Revoke custom db parameters from this group that are not present in data bag Check the parameters with soure = ‘user’ that exist on parameter group.
-
#reset_parameters_with_params!(params = []) ⇒ Object
Reset specified parameters in parameter group back to defaults.
- #run ⇒ Object
Methods included from RdsBaseDataBag
#assert_data_bag_exists!, #assert_data_bag_item_exists!, #assert_data_bag_item_valid!, #assert_required_data_bag_options_present!, #data_bag_exists?, #data_bag_item, #defined_params, included, #required_data_bag_options
Methods included from RdsBase
#assert_name_args_at_least!, #assert_valid_apply_method!, #authenticate!, #connect!, included, #rds
Instance Method Details
#assign_parameters_to_db_parameter_group!(apply_method = 'pending-reboot') ⇒ Object
Assigns all of data bag parameters to the parameter group AWS API support a maximum of 20 parameters updated in one call
97 98 99 100 101 102 103 104 105 106 107 108 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 97 def assign_parameters_to_db_parameter_group!(apply_method = 'pending-reboot') params = [] data_bag_item['parameters'].each do |k, v| ui.info("Assigning #{k} with value #{v}") params << {parameter_name: k, parameter_value: v.to_s, apply_method: apply_method} if params.length == 20 modify_db_parameter_group_with_params!(params) params = [] end end modify_db_parameter_group_with_params!(params) unless params.empty? end |
#create_db_parameter_group! ⇒ Object
Create a new RDS Parameter group using the provideda data bag
122 123 124 125 126 127 128 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 122 def create_db_parameter_group! rds.client.create_db_parameter_group( db_parameter_group_name: db_parameter_group_name, db_parameter_group_family: data_bag_item['db_parameter_group_family'], description: data_bag_item['description'] ) end |
#data_bag_item_name ⇒ Object
For use with base data bag module.
138 139 140 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 138 def data_bag_item_name db_parameter_group_name end |
#db_parameter_group ⇒ Object
Load the DB Parameter Group resource from AWS using the API
Returns AWS::RDS::DBParameterGroup or nil
145 146 147 148 149 150 151 152 153 154 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 145 def db_parameter_group unless @db_parameter_group begin @db_parameter_group = rds.client.describe_db_parameter_groups(db_parameter_group_name: db_parameter_group_name) rescue AWS::RDS::Errors::DBParameterGroupNotFound @db_parameter_group = nil end @db_parameter_group end end |
#db_parameter_group_name ⇒ Object
The name of the database parameter group, extracted from name arguments
Returns string
133 134 135 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 133 def db_parameter_group_name name_args.first end |
#modify_db_parameter_group_with_params!(params = []) ⇒ Object
Modify the parameters of an existing RDS Parameter Group
111 112 113 114 115 116 117 118 119 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 111 def modify_db_parameter_group_with_params!(params = []) begin rds.client.modify_db_parameter_group(db_parameter_group_name: db_parameter_group_name, parameters: params) rescue AWS::RDS::Errors::InvalidParameterValue => e ui.error "Unable to update this batch parameter values. Please check that your parameters are correct." ui.error "#{params.collect { |p| p[:parameter_name] }.join(', ') } not updated." ui.error "#{e.}" end end |
#reset_parameters_from_db_parameter_group!(apply_method) ⇒ Object
Revoke custom db parameters from this group that are not present in data bag Check the parameters with soure = ‘user’ that exist on parameter group. If they are NOT in data bag, use reset API call to roll back to defaults
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 67 def reset_parameters_from_db_parameter_group!(apply_method) # Params to reset reset_params = [] # Get user sources user_params = rds.client.describe_db_parameters(db_parameter_group_name: db_parameter_group_name, source: 'user') user_params[:parameters].each do |p| param_name = p[:parameter_name] unless data_bag_item['parameters'].keys.include?(param_name) ui.info "Revoking #{param_name}" reset_params << { parameter_name: param_name, apply_method: apply_method } if reset_params.length == 20 reset_parameters_with_params!(reset_params) reset_params = [] end else ui.info "Keeping #{param_name}" end end reset_parameters_with_params!(reset_params) unless reset_params.empty? end |
#reset_parameters_with_params!(params = []) ⇒ Object
Reset specified parameters in parameter group back to defaults
params - Array of hashes of format APPLY_METHOD, name: PARAMETER_NAME
91 92 93 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 91 def reset_parameters_with_params!(params = []) rds.client.reset_db_parameter_group(db_parameter_group_name: db_parameter_group_name, parameters: params) end |
#run ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/chef/knife/rds_pg_from_data_bag.rb', line 30 def run assert_name_args_at_least!(1, "Parameter group name is required!") assert_data_bag_item_valid! assert_valid_apply_method! authenticate! # Check if exists parameter groups exists. If not, ask to create, and assign parameters if db_parameter_group.nil? ui.info("The parameter group #{db_parameter_group_name} does not exist.") confirm("Would you like to create it") create_db_parameter_group! apply_method = 'immediate' else ui.info("The parameter group #{db_parameter_group_name} exists.") confirm("Would you like to update #{db_parameter_group_name} with apply method #{config[:apply_method]}") apply_method = config[:apply_method] end # Reset user parameters no longer present in data bag # Values will be rolled back to default reset_parameters_from_db_parameter_group!(apply_method) # Assign the parameters to the parameter group assign_parameters_to_db_parameter_group!(apply_method) # Success ui.info("Assigned parameters to #{db_parameter_group_name}") exit 0 end |