galoshes/galoshes

View on GitHub
libraries/provider_load_balancer.rb

Summary

Maintainability
A
0 mins
Test Coverage
# TODO
# validate in resource def that availability zone or subnet, but not both set
# compare lists with set to make sure order doesn't matter

require_relative 'service_elb'

class Chef::Provider::GaloshesLoadBalancer < Chef::Provider::GaloshesBase
  include Galoshes::DeleteMixin
  include Galoshes::ElbService

  def load_current_resource
    require 'fog'
    require 'fog/aws/models/elb/load_balancers'

    @collection = Fog::AWS::ELB::LoadBalancers.new(:service => service)
    @current_resource = @collection.new(:id => new_resource.name, :service => service)
    Chef::Log.debug "curr: #{@current_resource}"
    @current_resource.reload
    Chef::Log.debug "curr.reload: #{@current_resource}"
    @exists = !(@current_resource.created_at.nil?)
    new_resource.glean_read_only_attributes(@current_resource) if @exists

    @current_resource
  end

  def action_create
    Chef::Log.debug("new_resource: #{new_resource}")

    converge_unless(@exists, "create #{resource_str}") do
      create_attributes = [:id, :availability_zones, :security_groups, :scheme, :listeners, :subnet_ids, :health_check]
      copy_attributes(create_attributes)
      Chef::Log.debug("current_resource before save: #{current_resource}")

      result = @current_resource.save
      Chef::Log.debug("create as result: #{result}")
      @exists = true

      new_resource.glean_read_only_attributes(@current_resource)
      new_resource.updated_by_last_action(true)
    end
    action_update
  end

  def action_update
    verify_attribute(:security_groups) do
      @current_resource.security_groups = new_resource.security_groups
      service.apply_security_groups(new_resource.security_groups, @current_resource.id)
    end

    verify_attribute(:subnet_ids) do
      @current_resource.subnet_ids = new_resource.subnet_ids
      service.enable_subnets(new_resource.subnet_ids, @current_resource.id)
    end

    verify_attribute(:health_check) do
      @current_resource.health_check = new_resource.health_check
      service.configure_health_check(new_resource.name, @current_resource.health_check)
    end
  end
end