class Qurd::Action::Route53
Clean up route53 records @example Route53
configuration
auto_scaling_queues: staging: credentials: foo region: us-east-1 queues: - "/QueueName/i" route53: staging: hosted_zone: "staging.example.com."
Public Class Methods
configure(_action)
click to toggle source
Verify each auto_scaling_queue
has a corresponding route53
key and that each of those keys defines a hosted_zone
@param [String] _action the action being configured @raise [RuntimeError] if any auto_scaling_queues
do not have correctly
configured +route53+ keys
# File lib/qurd/action/route53.rb, line 32 def self.configure(_action) return if @configure_done check_configuration @configure_done = true end
Private Class Methods
check_configuration()
click to toggle source
# File lib/qurd/action/route53.rb, line 154 def self.check_configuration missing = [] qurd_configuration.auto_scaling_queues.each do |name, _monitor| missing << name unless config_valid?(name) end m = missing.join(', ') qurd_logger! "Missing configuration for route53: #{m}" unless m.empty? end
config_valid?(name)
click to toggle source
# File lib/qurd/action/route53.rb, line 144 def self.config_valid?(name) if qurd_configuration.route53.nil? || \ qurd_configuration.route53[name].nil? || \ qurd_configuration.route53[name].hosted_zone.nil? false else true end end
Public Instance Methods
terminate()
click to toggle source
Delete the record, if the message did not fail other processing steps and dry_run is not true @see {#Qurd::Message}
# File lib/qurd/action/route53.rb, line 41 def terminate if failed? qurd_logger.warn('Not deleting, message failed to process') elsif qurd_configuration.dry_run if !hosted_zone qurd_logger.debug('Dry run; missing hosted_zone') elsif !hostname qurd_logger.debug('Dry run; missing hostname') elsif !resource_record qurd_logger.debug('Dry run; missing resource_record') else qurd_logger.debug('Dry run; would delete') end else route53_delete end end
test()
click to toggle source
Respond to test actions
# File lib/qurd/action/route53.rb, line 60 def test qurd_logger.info('Test') end
Private Instance Methods
chef_node_name()
click to toggle source
# File lib/qurd/action/route53.rb, line 74 def chef_node_name return @chef_node_name if @chef_node_name @chef_node_name = chef_node.name qurd_logger.debug("Found chef name '#{@chef_node_name}'") @chef_node_name rescue NoMethodError qurd_logger.debug('No node found') nil end
hosted_zone(tries = nil)
click to toggle source
# File lib/qurd/action/route53.rb, line 129 def hosted_zone(tries = nil) return @hosted_zone if @hosted_zone name = qurd_route53.hosted_zone qurd_logger.debug("Looking for zone '#{name}'") aws_retryable(tries) do @hosted_zone = route53.list_hosted_zones_by_name( dns_name: name, max_items: 1 ).hosted_zones.first qurd_logger.debug "Found zone '#{@hosted_zone}'" end @hosted_zone || qurd_logger!("Zone not found: '#{name}'", Errors::ZoneNotFound) end
hostname()
click to toggle source
# File lib/qurd/action/route53.rb, line 84 def hostname @hostname = instance_name || chef_node_name @hostname.sub!(/([^.])$/, '\1.') qurd_logger.debug("Using host '#{@hostname}'") @hostname rescue NoMethodError qurd_logger!('No instance or chef information', Errors::HostNotFound) end
qurd_route53()
click to toggle source
# File lib/qurd/action/route53.rb, line 70 def qurd_route53 @config ||= qurd_configuration.route53[name] end
resource_record(tries = nil)
click to toggle source
# File lib/qurd/action/route53.rb, line 94 def resource_record(tries = nil) @rr = aws_retryable(tries) do route53.list_resource_record_sets( hosted_zone_id: hosted_zone.id, start_record_name: hostname, max_items: 1 ).resource_record_sets.first end @rr || qurd_logger!('Resource record not found', Errors::ResourceNotFound) end
route53()
click to toggle source
# File lib/qurd/action/route53.rb, line 66 def route53 @route53 ||= aws_client(:Route53) end
route53_delete(tries = nil)
click to toggle source
# File lib/qurd/action/route53.rb, line 106 def route53_delete(tries = nil) qurd_logger.debug('Deleting') aws_retryable(tries) do route53.change_resource_record_sets( hosted_zone_id: hosted_zone.id, change_batch: { changes: [ action: 'DELETE', resource_record_set: { name: resource_record.name, type: resource_record.type, ttl: resource_record.ttl, resource_records: resource_record.resource_records } ] } ) end rescue Qurd::Action::Route53::Errors => e qurd_logger.error("Failed to delete: #{e}") failed!(e) end