mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
[rackspace|lb] ssl termination fixes
This commit is contained in:
parent
5fbdd80bec
commit
39f504a4ac
9 changed files with 159 additions and 22 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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-----'
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
Loading…
Reference in a new issue