mirror of
https://github.com/fog/fog.git
synced 2022-11-09 13:51:43 -05:00
Merge pull request #1006 from brianhartsock/rackspace_ssl_termination
Rackspace ssl termination
This commit is contained in:
commit
6e2ddec2b1
8 changed files with 198 additions and 2 deletions
|
@ -29,6 +29,9 @@ module Fog
|
|||
model :access_rule
|
||||
|
||||
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
|
||||
|
|
|
@ -58,6 +58,23 @@ module Fog
|
|||
nodes.load(new_nodes)
|
||||
end
|
||||
|
||||
def ssl_termination
|
||||
requires :identity
|
||||
ssl_termination = connection.get_ssl_termination(identity).body['sslTermination']
|
||||
rescue Fog::Rackspace::LoadBalancers::NotFound
|
||||
nil
|
||||
end
|
||||
|
||||
def enable_ssl_termination(securePort, privatekey, certificate, options = {})
|
||||
requires :identity
|
||||
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
|
||||
@virtual_ips ||= begin
|
||||
Fog::Rackspace::LoadBalancers::VirtualIps.new({
|
||||
|
|
|
@ -0,0 +1,15 @@
|
|||
module Fog
|
||||
module Rackspace
|
||||
class LoadBalancers
|
||||
class Real
|
||||
def get_ssl_termination(load_balancer_id)
|
||||
request(
|
||||
:expects => [200],
|
||||
:path => "loadbalancers/#{load_balancer_id}/ssltermination",
|
||||
:method => 'GET'
|
||||
)
|
||||
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
|
|
@ -0,0 +1,31 @@
|
|||
module Fog
|
||||
module Rackspace
|
||||
class LoadBalancers
|
||||
class Real
|
||||
def set_ssl_termination(load_balancer_id, securePort, privatekey, certificate, options = {})
|
||||
data = {
|
||||
securePort: securePort,
|
||||
privatekey: privatekey,
|
||||
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 => Fog::JSON.encode(data),
|
||||
:expects => [200, 202],
|
||||
:path => "loadbalancers/#{load_balancer_id}/ssltermination",
|
||||
:method => 'PUT'
|
||||
)
|
||||
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-----'
|
||||
|
||||
|
||||
|
|
|
@ -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…
Add table
Reference in a new issue