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
|
model :access_rule
|
||||||
|
|
||||||
request_path 'fog/rackspace/requests/load_balancers'
|
request_path 'fog/rackspace/requests/load_balancers'
|
||||||
|
request :get_ssl_termination
|
||||||
|
request :set_ssl_termination
|
||||||
|
request :remove_ssl_termination
|
||||||
request :create_load_balancer
|
request :create_load_balancer
|
||||||
request :get_load_balancer
|
request :get_load_balancer
|
||||||
request :list_load_balancers
|
request :list_load_balancers
|
||||||
|
|
|
@ -58,6 +58,23 @@ module Fog
|
||||||
nodes.load(new_nodes)
|
nodes.load(new_nodes)
|
||||||
end
|
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
|
def virtual_ips
|
||||||
@virtual_ips ||= begin
|
@virtual_ips ||= begin
|
||||||
Fog::Rackspace::LoadBalancers::VirtualIps.new({
|
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
|
@instance.reset_error_page
|
||||||
end
|
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? }
|
@instance.wait_for { ready? }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -35,10 +35,10 @@ LOAD_BALANCER_USAGE_FORMAT = {
|
||||||
SSL_TERMINATION_FORMAT = {
|
SSL_TERMINATION_FORMAT = {
|
||||||
'sslTermination' => {
|
'sslTermination' => {
|
||||||
'certificate' => String,
|
'certificate' => String,
|
||||||
'privateKey' => String,
|
'privatekey' => String,
|
||||||
'enabled' => Fog::Boolean,
|
'enabled' => Fog::Boolean,
|
||||||
'securePort' => Integer,
|
'securePort' => Integer,
|
||||||
'secureTrafficOnly' => Integer,
|
'secureTrafficOnly' => Fog::Boolean,
|
||||||
'intermediateCertificate' => Fog::Nullable::String
|
'intermediateCertificate' => Fog::Nullable::String
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -157,3 +157,60 @@ ERROR_PAGE_FORMAT = {
|
||||||
'content' => String
|
'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