Class: SQSPoller::Handler::Puppetsdb

Inherits:
Object
  • Object
show all
Defined in:
lib/sqspoller/handlers/puppetsdb.rb

Instance Method Summary collapse

Instance Method Details

#add_node_from_ref(ref_node, dest_node, as_name) ⇒ Object



63
64
65
66
67
68
69
70
71
# File 'lib/sqspoller/handlers/puppetsdb.rb', line 63

def add_node_from_ref(ref_node, dest_node, as_name)
  yaml_data = @puppet_enc.get_node_yaml(ref_node)
  if yaml_data.empty?
    SQSPoller.warn("#{@queue_name}: Reference node configuration '#{ref_node}' not found for autoscaling group '#{as_name}'")
  else
    SQSPoller.info("#{@queue_name}: Writing node configuration for #{dest_node} due to event from autoscaling group #{as_name}")
    @puppet_enc.write_node_data(dest_node, yaml_data)
  end
end

#del_node(node, as_name) ⇒ Object



73
74
75
76
# File 'lib/sqspoller/handlers/puppetsdb.rb', line 73

def del_node(node, as_name)
    SQSPoller.info("#{@queue_name}: Deleting node configuration for #{node} due to event from autoscaling group #{as_name}")
    @puppet_enc.delete_item(node)
end

#process(queue_name, msg, conf) ⇒ Object



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
# File 'lib/sqspoller/handlers/puppetsdb.rb', line 33

def process(queue_name, msg, conf)
  @queue_name = queue_name
  domain = conf['domain']
  template_map = conf['template_map']
  begin
    msg_data = msg.as_sns_message.to_h
    sns_msg_data = JSON.load(msg_data[:body])
  rescue
    SQSPoller.warn("#{@queue_name}: Message is not a properly formatted SNS message")
    return
  end
  msg_id = msg_data.message_id
  instance_id = sns_msg_data['EC2InstanceId']
  event_type = sns_msg_data['Event']
  autoscale_name = sns_msg_data['AutoScalingGroupName']
  reference_node = template_map[autoscale_name]

  SQSPoller.debug("#{@queue_name}: Found message '#{msg_id}'")
  SQSPoller.debug("#{@queue_name}: Processing event '#{event_type}' for autoscaling group '#{autoscale_name}' and instance-id #{instance_id}")
  (SQSPoller.warn("#{@queue_name}: Unregistered autoscaling group: #{autoscale_name}"); return) if reference_node.nil?

  @puppet_enc = PuppetSDB::PuppetSDB.new(:domain => domain)
  case event_type
  when "autoscaling:EC2_INSTANCE_LAUNCH"
    add_node_from_ref(reference_node, instance_id, autoscale_name)
  when "autoscaling:EC2_INSTANCE_TERMINATE"
    del_node(instance_id, autoscale_name)
  end
end