Skip to content
This repository has been archived by the owner on Apr 5, 2020. It is now read-only.

Commit

Permalink
Adding SSL Termination to RS LB config
Browse files Browse the repository at this point in the history
  • Loading branch information
Ken Perkins committed Dec 18, 2012
1 parent a0c3c9b commit 6c19755
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 16 deletions.
31 changes: 15 additions & 16 deletions lib/client/cloudloadbalancers.js
Expand Up @@ -73,7 +73,8 @@ exports.CloudLoadBalancers = {
var lb = {
name: details.name,
nodes: details.nodes,
protocol: details.protocol,
protocol: details.protocol.name,
port: details.protocol.port,
virtualIps: details.virtualIps
};

Expand Down Expand Up @@ -101,10 +102,6 @@ exports.CloudLoadBalancers = {
lb.metadata = details.metadata;
}

if (details.port) {
lb.port = details.port;
}

if (details.timeout) {
lb.timeout = details.timeout;
}
Expand All @@ -123,13 +120,16 @@ exports.CloudLoadBalancers = {
var requestOptions = {
uri: '/loadbalancers',
method: 'POST',
data: lb,
data: {
loadBalancer: lb
},
endpoint: rackspace.Endpoints.CloudLoadBalancer
};

console.log(require('util').inspect(requestOptions, false, null, true));
self.authorizedRequest(requestOptions, function(err, res, body) {
if (err || !body.loadBalancer) {
callback(err);
callback(err ? err : body);
return;
}

Expand Down Expand Up @@ -198,7 +198,7 @@ exports.CloudLoadBalancers = {
});

var requestOptions = {
uri: '/loadbalancers/' + self.id,
uri: '/loadbalancers',
method: 'DELETE',
qs: {
id: lbIds
Expand All @@ -208,7 +208,7 @@ exports.CloudLoadBalancers = {

self.authorizedRequest(requestOptions, function(err, res, body) {
if (err || res.statusCode !== 202) {
callback(err);
callback(err ? err : body);
return;
}

Expand Down Expand Up @@ -357,6 +357,10 @@ validateLbInputs = function(inputs) {
errors.requiredParametersMissing.push('protocol');
}

if (!inputs.port) {
errors.requiredParametersMissing.push('port');
}

if (!inputs.virtualIps) {
errors.requiredParametersMissing.push('virtualIps');
}
Expand All @@ -374,16 +378,11 @@ validateLbInputs = function(inputs) {
}

if (!inputs.protocol ||
typeof(inputs.protocol) !== 'object' ||
!rackspace.Protocols[inputs.protocol.name]) {
typeof(inputs.protocol) !== 'string' ||
!rackspace.Protocols[inputs.protocol]) {
errors.invalidInputs.push('please specify a valid protocol');
}

if (!inputs.virtualIps !== rackspace.VirtualIpTypes.PUBLIC ||
!inputs.virtualIps !== rackspace.VirtualIpTypes.SERVICENET) {
errors.invalidInputs.push('virtualIps must be PUBLIC or SERVICENET');
}

// TODO Node validation

if (errors.requiredParametersMissing.length) {
Expand Down
88 changes: 88 additions & 0 deletions lib/cloudloadbalancers/loadbalancer.js
Expand Up @@ -88,6 +88,94 @@ LoadBalancer.prototype = {
});
},

/**
* @name LoadBalancer.getSSLConfig
* @description Get the SSL Termintation configuration for this LB
* @param {Function} callback handles the callback of your api call
*/
getSSLConfig: function(callback) {
var self = this,
requestOptions = {
uri: '/loadbalancers/' + self.id + '/ssltermination',
endpoint: rackspace.Endpoints.CloudLoadBalancer
};

self.client.authorizedRequest(requestOptions, function(err, res, body) {
if (err || res.statusCode !== 200) {
callback(err ? err : body);
return;
}

self.sslTermination = body.sslTermination;
callback(err, body.sslTermination);
});
},

/**
* @name LoadBalancer.disableSSLTermination
* @description Disable and remove the connection throttle
* @param {Function} callback handles the callback of your api call
*/
disableSSLTermination: function(callback) {
var self = this,
requestOptions = {
uri: '/loadbalancers/' + self.id + '/ssltermination',
method: 'DELETE',
endpoint: rackspace.Endpoints.CloudLoadBalancer
};

self.client.authorizedRequest(requestOptions, function(err, res, body) {
if (err || res.statusCode !== 202) {
callback(err ? err : body);
return;
}

delete(self.sslTermination);
callback(err, self);
});
},

/**
* @name LoadBalancer.enableSSLTermination
* @description Enable the ssl termination for your LB
* @param {Object} details details for the new load balancer
* @param {Function} callback handles the callback of your api call
*/
enableSSLTermination: function(details, callback) {
var self = this,
sslConfig = {
certificate: details.certificate,
enabled: typeof(details.enabled) === 'boolean' ? details.enabled : true,
secureTrafficOnly: typeof(details.secureTrafficOnly) === 'boolean' ?
details.secureTrafficOnly : false,
privatekey: details.privatekey,
securePort: details.securePort
},
requestOptions = {
uri: '/loadbalancers/' + self.id + '/ssltermination',
method: 'PUT',
endpoint: rackspace.Endpoints.CloudLoadBalancer
};

if (details.intermediateCertificate) {
sslConfig.intermediateCertificate = details.intermediateCertificate;
}

requestOptions.data = {
sslTermination: sslConfig
};

self.client.authorizedRequest(requestOptions, function(err, res, body) {
if (err || res.statusCode !== 202) {
callback(err ? err : body);
return;
}

self.connectionThrottle = requestOptions.data.connectionThrottle;
callback(err, self);
});
},

/**
* @name LoadBalancer.getAccessList
* @description Gets the access list for your load balancer
Expand Down

0 comments on commit 6c19755

Please sign in to comment.