lib/terraforming/resource/elb.rb in terraforming-0.1.1 vs lib/terraforming/resource/elb.rb in terraforming-0.1.2
- old
+ new
@@ -26,20 +26,25 @@
"availability_zones.#" => load_balancer.availability_zones.length.to_s,
"connection_draining" => load_balancer_attributes.connection_draining.enabled.to_s,
"connection_draining_timeout" => load_balancer_attributes.connection_draining.timeout.to_s,
"cross_zone_load_balancing" => load_balancer_attributes.cross_zone_load_balancing.enabled.to_s,
"dns_name" => load_balancer.dns_name,
- "health_check.#" => "1",
"id" => load_balancer.load_balancer_name,
"idle_timeout" => load_balancer_attributes.connection_settings.idle_timeout.to_s,
"instances.#" => load_balancer.instances.length.to_s,
- "listener.#" => load_balancer.listener_descriptions.length.to_s,
"name" => load_balancer.load_balancer_name,
- "security_groups.#" => load_balancer.security_groups.length.to_s,
"source_security_group" => load_balancer.source_security_group.group_name,
- "subnets.#" => load_balancer.subnets.length.to_s,
}
+
+ attributes.merge!(healthcheck_attributes_of(load_balancer))
+ attributes.merge!(listeners_attributes_of(load_balancer))
+ attributes.merge!(sg_attributes_of(load_balancer))
+ attributes.merge!(subnets_attributes_of(load_balancer))
+ attributes.merge!(instances_attributes_of(load_balancer))
+ attributes.merge!(tags_attributes_of(load_balancer))
+
+
result["aws_elb.#{module_name_of(load_balancer)}"] = {
"type" => "aws_elb",
"primary" => {
"id" => load_balancer.load_balancer_name,
"attributes" => attributes
@@ -48,9 +53,111 @@
result
end
generate_tfstate(resources, tfstate_base)
+ end
+
+ def healthcheck_attributes_of(elb)
+ hashcode = healthcheck_hashcode_of(elb.health_check)
+ attributes = {
+ # Now each ELB supports one heatlhcheck
+ "health_check.#" => "1",
+ "health_check.#{hashcode}.healthy_threshold" => elb.health_check.healthy_threshold.to_s,
+ "health_check.#{hashcode}.interval" => elb.health_check.interval.to_s,
+ "health_check.#{hashcode}.target" => elb.health_check.target,
+ "health_check.#{hashcode}.timeout" => elb.health_check.timeout.to_s,
+ "health_check.#{hashcode}.unhealthy_threshold" => elb.health_check.unhealthy_threshold.to_s
+ }
+
+ attributes
+ end
+
+ def healthcheck_hashcode_of(health_check)
+ string =
+ "#{health_check.healthy_threshold}-" <<
+ "#{health_check.unhealthy_threshold}-" <<
+ "#{health_check.target}-" <<
+ "#{health_check.interval}-" <<
+ "#{health_check.timeout}-"
+
+ Zlib.crc32(string)
+ end
+
+ def tags_attributes_of(elb)
+ tags = @client.describe_tags(load_balancer_names: [elb.load_balancer_name]).tag_descriptions.first.tags
+ attributes = {"tags.#" => tags.length.to_s}
+
+ tags.each do |tag|
+ attributes["tags.#{tag.key}"] = tag.value
+ end
+
+ attributes
+ end
+
+ def instances_attributes_of(elb)
+ attributes = {"instances.#" => elb.instances.length.to_s}
+
+ elb.instances.each do |instance|
+ attributes["instances.#{Zlib.crc32(instance.instance_id)}"] = instance.instance_id
+ end
+
+ attributes
+ end
+
+ def subnets_attributes_of(elb)
+ attributes = {"subnets.#" => elb.subnets.length.to_s}
+
+ elb.subnets.each do |subnet_id|
+ attributes["subnets.#{Zlib.crc32(subnet_id)}"] = subnet_id
+ end
+
+ attributes
+ end
+
+ def sg_attributes_of(elb)
+ attributes = {"security_groups.#" => elb.security_groups.length.to_s}
+
+ elb.security_groups.each do |sg_id|
+ attributes["security_groups.#{Zlib.crc32(sg_id)}"] = sg_id
+ end
+
+ attributes
+ end
+
+ def listeners_attributes_of(elb)
+ attributes = {"listener.#" => elb.listener_descriptions.length.to_s}
+
+ elb.listener_descriptions.each do |listener_description|
+ attributes.merge!(listener_attributes_of(listener_description.listener))
+ end
+
+ attributes
+ end
+
+ def listener_attributes_of(listener)
+ hashcode = listener_hashcode_of(listener)
+
+ attributes = {
+ "listener.#{hashcode}.instance_port" => listener.instance_port.to_s,
+ "listener.#{hashcode}.instance_protocol" => listener.instance_protocol.downcase,
+ "listener.#{hashcode}.lb_port" => listener.load_balancer_port.to_s,
+ "listener.#{hashcode}.lb_protocol" => listener.protocol.downcase,
+ "listener.#{hashcode}.ssl_certificate_id" => listener.ssl_certificate_id
+ }
+
+ attributes
+ end
+
+ def listener_hashcode_of(listener)
+ string =
+ "#{listener.instance_port}-" <<
+ "#{listener.instance_protocol.downcase}-" <<
+ "#{listener.load_balancer_port}-" <<
+ "#{listener.protocol.downcase}-" <<
+ "#{listener.ssl_certificate_id}-"
+
+ Zlib.crc32(string)
end
def load_balancers
@client.describe_load_balancers.load_balancer_descriptions
end