1
0
Fork 0
mirror of https://github.com/fog/fog.git synced 2022-11-09 13:51:43 -05:00

[AWS|ELB] fetch policy descriptions for elb.policies model call

This commit is contained in:
Michael Hale 2013-08-02 18:21:42 -04:00
parent 8128fce600
commit 5c1a859852
3 changed files with 27 additions and 19 deletions

View file

@ -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

View file

@ -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

View file

@ -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