[rackspace|lb] ssl termination fixes

This commit is contained in:
Brian Hartsock 2012-06-26 00:35:07 -04:00
parent 5fbdd80bec
commit 39f504a4ac
9 changed files with 159 additions and 22 deletions

View File

@ -31,6 +31,7 @@ module Fog
request_path 'fog/rackspace/requests/load_balancers'
request :get_ssl_termination
request :set_ssl_termination
request :remove_ssl_termination
request :create_load_balancer
request :get_load_balancer
request :list_load_balancers

View File

@ -27,7 +27,6 @@ module Fog
attribute :name
attribute :state, :aliases => 'status'
attribute :nodes
attribute :ssl_termination, :aliases => 'ssltermination'
def initialize(attributes)
#HACK - Since we are hacking how sub-collections work, we have to make sure the connection is valid first.
@ -61,13 +60,19 @@ module Fog
def ssl_termination
requires :identity
ssl_termination = connection.get_ssl_termination(identity)
(ssl_termination.status == 404) ? nil : ssl_termination.body["sslTermination"]
ssl_termination = connection.get_ssl_termination(identity).body['sslTermination']
rescue Fog::Rackspace::LoadBalancers::NotFound
nil
end
def enable_ssl_termination(securePort, privatekey, certificate, enabled=true, secureTrafficOnly=false)
def enable_ssl_termination(securePort, privatekey, certificate, options = {})
requires :identity
connection.set_ssl_termination(identity, securePort, privatekey, certificate, enabled, secureTrafficOnly)
connection.set_ssl_termination(identity, securePort, privatekey, certificate, options)
end
def disable_ssl_termination
requires :identity
connection.remove_ssl_termination(identity)
end
def virtual_ips

View File

@ -4,7 +4,7 @@ module Fog
class Real
def get_ssl_termination(load_balancer_id)
request(
:expects => [200,404],
:expects => [200],
:path => "loadbalancers/#{load_balancer_id}/ssltermination",
:method => 'GET'
)
@ -12,4 +12,4 @@ module Fog
end
end
end
end
end

View File

@ -0,0 +1,15 @@
module Fog
module Rackspace
class LoadBalancers
class Real
def remove_ssl_termination(load_balancer_id)
request(
:expects => [200, 202],
:path => "loadbalancers/#{load_balancer_id}/ssltermination",
:method => 'DELETE'
)
end
end
end
end
end

View File

@ -2,16 +2,25 @@ module Fog
module Rackspace
class LoadBalancers
class Real
def set_ssl_termination(load_balancer_id, securePort, privatekey, certificate, enabled, secureTrafficOnly)
def set_ssl_termination(load_balancer_id, securePort, privatekey, certificate, options = {})
data = {
securePort: securePort,
privatekey: privatekey,
certificate: certificate,
#intermediatecertificate: intermediatecertificate
certificate: certificate
}
if options.has_key? :intermediate_certificate
data['intermediateCertificate'] = options[:intermediate_certificate]
end
if options.has_key? :enabled
data['enabled'] = options[:enabled]
end
if options.has_key? :secure_traffic_only
data['secureTrafficOnly'] - options[:secure_traffic_only]
end
request(
:body => MultiJson.encode(data),
:expects => [202,404],
:expects => [200, 202],
:path => "loadbalancers/#{load_balancer_id}/ssltermination",
:method => 'PUT'
)
@ -19,4 +28,4 @@ module Fog
end
end
end
end
end

View File

@ -124,6 +124,26 @@ Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer', ['rackspace']) do
@instance.reset_error_page
end
@instance.wait_for { ready? }
tests("#ssl_termination is nil").returns(nil) do
@instance.ssl_termination
end
@instance.wait_for { ready? }
tests("#enable_ssl_termination(443, PRIVATE_KEY, CERTIFICATE").succeeds do
@instance.enable_ssl_termination(443, PRIVATE_KEY, CERTIFICATE)
end
@instance.wait_for { ready? }
tests("#ssl_termination").succeeds do
@instance.ssl_termination
end
@instance.wait_for { ready? }
tests("#disable_ssl_termination").succeeds do
@instance.disable_ssl_termination
end
@instance.wait_for { ready? }
end

View File

@ -35,10 +35,10 @@ LOAD_BALANCER_USAGE_FORMAT = {
SSL_TERMINATION_FORMAT = {
'sslTermination' => {
'certificate' => String,
'privateKey' => String,
'privatekey' => String,
'enabled' => Fog::Boolean,
'securePort' => Integer,
'secureTrafficOnly' => Integer,
'secureTrafficOnly' => Fog::Boolean,
'intermediateCertificate' => Fog::Nullable::String
}
}
@ -157,3 +157,60 @@ ERROR_PAGE_FORMAT = {
'content' => String
}
}
PRIVATE_KEY = '-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAqSXePu8qLmniU7jNxoWq3SLkR8txMsl1gFYftpq7NIFaGfzV
f4ZswYdEYDVWWRepQjS0TvsB0d5+usEUy/pcdZAlQLnn+540iLkvxKPVMzojUbG6
yOAmjC/xAZuExJHtfCrRHUQ4WQCwqyqANfP81y1inAb0zJGbtWUreV+nv8Ue77qX
77fOuqI6zOHinGZU7l25XGLcVUphgt8UtHZBzz2ahoftZ97DhUyQiSJQCaHXJd3Q
eIHAq9qc7hu+usiYZWz34A0lw/gAl+RYcdvVc8kIwWxpiSieqqBPOwNzN5B0+9uu
5sDzMGMFnnSWcNKIPumX0rke3xFUl3UD6GJwvwIDAQABAoIBABQ7alT+yH3avm6j
OUHYtTJUPRf1VqnrfPmH061E3sWN/1gCbQse6h1P77bOSnDHqsA3i6Wy0mnnAiOW
esVXQf3x6vLOCdiH+OKtu+/6ZMMG3jikWKI0ZYf5KAu4LW5RwiVK/c5RXagPtBIV
OFa7w299h0EAeAGMHSLaYhPXhDokyJa6yDkAQL3n+9L3V8kNWeCELfrqXnXF4X0K
CJp622tS/fW6kzppJyLJ4GPkK9HNMpu02/n2Z7swWypfF+7set+9/aNTooDYWzCu
dbnRgqEIG1IP8+t6HG6x9VujJVJLIW/WLITnQ/WTRXOQHBGhazgmwe1GPdxsQgXu
/wIcsIkCgYEA8Si0q+QhmJyoAm8vTHjo6+DD06YYTvSODLJOpOqr1ncGGDJ/evBw
x+9QsK3veXMbAK5G7Xss32IuXbBfjqQ89+/q/YT4BnS3T0OQa2WlR8tURNphCDr5
B3yD212kJTTehC+p7BI9zhnWXD9kImh4vm4XcOsC9iqOSCZkGfvRPRsCgYEAs46t
Y85v2Pk235r1BPbgKwqYR+jElH4VWKu+EguUeQ4BlS47KktlLhvHtwrTv/UZ+lPx
8gSJTgyy7iEmzcGwPf1/MI5xg+DPgGhbr2G8EvrThmdHy+rPF2YSp1iBmJ4xq/1r
6XYKvf6ST3iujxTPU5xPEDUSLsH2ejJD/ddqSS0CgYEAkIdxyDa//8ObWWIjObSY
+4zIMBcyKFeernNKeMH/3FeW+neBOT/Sh7CgblK/28ylWUIZVghlOzePTC0BB+7c
b0eFUQ0YzF204rc+XW8coCt2xJEQaCtXxinUqGq1jmriFNyv/MBt9BA+DSkcrRZp
js9SEyV1r+yPOyRvB7eIjhMCgYEAkd5yG+fkU1c6bfNb4/mPaUgFKD4AHUZEnzF+
ivhfWOy4+nGBXT285/VnjNs95O8AeK3jmyJ2TTLh1bSW6obUX7flsRO3QlTLHd0p
xtPWT3D3kHOtDwslzDN/KfYr6klxvvB0z0e3OFxsjiVTYiecuqb8UAVdTSED1Ier
Vre+v80CgYB86OqcAlR3diNaIwHgwK5kP2NAH1DaSwZXoobYpdkjsUQfJN5jwJbD
4/6HVydoc5xe0z8B+O1VUzC+QA0gdXgHbmLZBIUeQU8sE4hGELoe/eWULXGwI91M
FyEWg03jZj8FkFh2954zwU6BOcbeL+9GrTdTPu1vuHoTitmNEye4iw==
-----END RSA PRIVATE KEY-----'
CERTIFICATE = '-----BEGIN CERTIFICATE-----
MIIEWjCCA0KgAwIBAgIGATTTGu/tMA0GCSqGSIb3DQEBBQUAMHkxCzAJBgNVBAYT
AlVTMQ4wDAYDVQQIEwVUZXhhczEOMAwGA1UEBxMFVGV4YXMxGjAYBgNVBAoTEVJh
Y2tTcGFjZSBIb3N0aW5nMRQwEgYDVQQLEwtSYWNrRXhwIENBNTEYMBYGA1UEAxMP
Y2E1LnJhY2tleHAub3JnMB4XDTEyMDExMjE4MDgwNVoXDTM5MDUzMDE4MDgwNVow
gZcxCzAJBgNVBAYTAlVTMQ4wDAYDVQQIEwVUZXhhczEUMBIGA1UEBxMLU2FuIEFu
dG9uaW8xEDAOBgNVBAoTB1JhY2tFeHAxEDAOBgNVBAsTB1JhY2tEZXYxPjA8BgNV
BAMMNW15c2l0ZS5jb20vZW1haWxBZGRyZXNzPXBoaWxsaXAudG9vaGlsbEByYWNr
c3BhY2UuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqSXePu8q
LmniU7jNxoWq3SLkR8txMsl1gFYftpq7NIFaGfzVf4ZswYdEYDVWWRepQjS0TvsB
0d5+usEUy/pcdZAlQLnn+540iLkvxKPVMzojUbG6yOAmjC/xAZuExJHtfCrRHUQ4
WQCwqyqANfP81y1inAb0zJGbtWUreV+nv8Ue77qX77fOuqI6zOHinGZU7l25XGLc
VUphgt8UtHZBzz2ahoftZ97DhUyQiSJQCaHXJd3QeIHAq9qc7hu+usiYZWz34A0l
w/gAl+RYcdvVc8kIwWxpiSieqqBPOwNzN5B0+9uu5sDzMGMFnnSWcNKIPumX0rke
3xFUl3UD6GJwvwIDAQABo4HIMIHFMIGjBgNVHSMEgZswgZiAFIkXQizRaftxVDaL
P/Fb/F2ht017oX2kezB5MQswCQYDVQQGEwJVUzEOMAwGA1UECBMFVGV4YXMxDjAM
BgNVBAcTBVRleGFzMRowGAYDVQQKExFSYWNrU3BhY2UgSG9zdGluZzEUMBIGA1UE
CxMLUmFja0V4cCBDQTQxGDAWBgNVBAMTD2NhNC5yYWNrZXhwLm9yZ4IBAjAdBgNV
HQ4EFgQUQUXHjce1JhjJDA4nhYcbebMrIGYwDQYJKoZIhvcNAQEFBQADggEBACLe
vxcDSx91uQoc1uancb+vfkaNpvfAxOkUtrdRSHGXxvUkf/EJpIyG/M0jt5CLmEpE
UedeCFlRN+Qnsqt589ZemWWJwth/Jbu0wQodfSo1cP0J2GFZDyTd5cWgm0IxD8A/
ZRGzNnTx3xskv6/lOh7so9ULppEbOsZTNqQ4ahbxbiaR2iDTQGF3XKSHha8O93RB
YlnFahKZ2j0CpYvg0lJjfN0Lvj7Sm6GBA74n2OrGuB14H27wklD+PtIEFniyxKbq
5TDO0l4yDgkR7PsckmZqK22GP9c3fQkmXodtpV1wRjcSAxxVWYm+S24XvMFERs3j
yXEf+VJ0H+voAvxgbAk=
-----END CERTIFICATE-----'

View File

@ -47,14 +47,6 @@ Shindo.tests('Fog::Rackspace::LoadBalancers | load_balancer_tests', ['rackspace'
@service.update_load_balancer(@lb_id, { :port => 80 }).body
end
tests("#ssl_termination(#{@lb_id})").succeeds do
@service.ssl_termination(@lb_id).body
end
tests("#enable_ssl_termination(#{@lb_id})").succeeds do
@service.enable_ssl_termination(@lb_id, "443", "private", "public", true, false).body
end
until @service.get_load_balancer(@lb_id).body["loadBalancer"]["status"] == STATUS_ACTIVE
sleep 10
end

View File

@ -0,0 +1,38 @@
Shindo.tests('Fog::Rackspace::LoadBalancers | ssl_termination', ['rackspace']) do
pending if Fog.mocking?
given_a_load_balancer_service do
given_a_load_balancer do
tests('success') do
@lb.wait_for { ready? }
tests("#set_ssl_termination(#{@lb.id}, 443, PRIVATE_KEY, CERTIFICATE)").succeeds do
@service.set_ssl_termination(@lb.id, 443, PRIVATE_KEY, CERTIFICATE)
end
@lb.wait_for { ready? }
tests("#get_ssl_termination(#{@lb.id})").formats(SSL_TERMINATION_FORMAT) do
@service.get_ssl_termination(@lb.id).body
end
@lb.wait_for { ready? }
tests("#remove_ssl_termination(#{@lb.id})").succeeds do
@service.remove_ssl_termination(@lb.id).body
end
end
tests('failure') do
@lb.wait_for { ready? }
tests("#get_ssl_termination(#{@lb.id})").raises(Fog::Rackspace::LoadBalancers::NotFound) do
@service.get_ssl_termination(@lb.id).body
end
tests("#set_ssl_termination(#{@lb.id}, 443, '', CERTIFICATE)").raises(Fog::Rackspace::LoadBalancers::BadRequest) do
@service.set_ssl_termination(@lb.id, 443, '', CERTIFICATE)
end
end
end
end
end