diff --git a/lib/fog/aws/models/elb/load_balancer.rb b/lib/fog/aws/models/elb/load_balancer.rb index dbe136d01..ec3844998 100644 --- a/lib/fog/aws/models/elb/load_balancer.rb +++ b/lib/fog/aws/models/elb/load_balancer.rb @@ -117,12 +117,17 @@ module Fog def policies Fog::AWS::ELB::Policies.new({ - :data => attributes['Policies'], + :data => policy_descriptions, :service => service, :load_balancer => self }) end + def policy_descriptions + requires :id + @policy_descriptions ||= service.describe_load_balancer_policies(id).body["DescribeLoadBalancerPoliciesResult"]["PolicyDescriptions"] + end + def set_listener_policy(port, policy_name) requires :id policy_name = [policy_name].flatten @@ -167,6 +172,7 @@ module Fog def reload super @instance_health = nil + @policy_descriptions = nil self end diff --git a/lib/fog/aws/models/elb/policies.rb b/lib/fog/aws/models/elb/policies.rb index a94e52f6e..bab7dc3cb 100644 --- a/lib/fog/aws/models/elb/policies.rb +++ b/lib/fog/aws/models/elb/policies.rb @@ -17,23 +17,22 @@ module Fog end private - # Munge a hash like: - # {'LBCookieStickinessPolicies' => [policies...], - # 'AppCookieStickinessPolicies' => [policies...], - # 'OtherPolicies' => [policies...]} - # to a single array of policies with an optional cookie_stickiness value def munged_data - munged_data = [] - data['LBCookieStickinessPolicies'].each do |policy| - munged_data << policy.merge(:cookie_stickiness => :lb) - end - data['AppCookieStickinessPolicies'].each do |policy| - munged_data << policy.merge(:cookie_stickiness => :app) - end - data['OtherPolicies'].each do |policy| - munged_data << {'PolicyName' => policy} - end - munged_data + data.inject([]){|m,e| + m << { + :id => e["PolicyName"], + :type_name => e["PolicyTypeName"], + :policy_attributes => policy_attributes(e["PolicyAttributeDescriptions"]) + } + m + } + end + + def policy_attributes(policy_attribute_descriptions) + policy_attribute_descriptions.inject({}){|m,e| + m[e["AttributeName"]] = e["AttributeValue"] + m + } end end @@ -41,4 +40,3 @@ module Fog end end end - diff --git a/tests/aws/models/elb/model_tests.rb b/tests/aws/models/elb/model_tests.rb index 21eebcd9f..749f3054b 100644 --- a/tests/aws/models/elb/model_tests.rb +++ b/tests/aws/models/elb/model_tests.rb @@ -280,7 +280,11 @@ Shindo.tests('AWS::ELB | models', ['aws', 'elb']) do public_key_policy_id = 'fog-public-key-policy' tests('create public key policy') do elb.policies.create(:id => public_key_policy_id, :type_name => 'PublicKeyPolicyType', :policy_attributes => {'PublicKey' => AWS::IAM::SERVER_CERT_PUBLIC_KEY}) - returns(public_key_policy_id) { elb.policies.get(public_key_policy_id).id } + policy = elb.policies.get(public_key_policy_id) + + returns(public_key_policy_id) { policy.id } + returns("PublicKeyPolicyType") { policy.type_name } + returns(false) { policy.policy_attributes["PublicKey"].nil? } end tests('a malformed policy') do