A client implementation for the Rackspace Openstack API (v2)
All functionality in this package is either implemented in pkgcloud or is in the process of being migrated to pkgcloud. Please only use this package for prototyping at this point as the next published version will remove functionality entirely.
The rackspace-openstack module is compliant with the Rackspace Openstack API. rackspace-openstack is a nearly feature complete wrapper for the Rackspace Openstack APIs and should work in most scenarios.
Currently, the following feature areas are supported:
- Open Stack CloudServers
- CloudDNS
- CloudLoadBalancers
Creating and authenticating your client against the Rackspace API is simple:
var rackspace = require('rackspace-openstack'),
config = {
auth : {
username: 'your-username',
apiKey: 'your-api-key'
}
};
var client = rackspace.createClient(config);
client.authorize(function(err) {
if (err) {
process.exit(1);
return;
}
// Do stuff here
}
client.createServer({
image: '5cebb13a-f783-4f8c-8058-c4182c724ccd',
flavor: 2,
name: 'My Server'
}, function(err, server) {
// Do stuff with your new server
});
var myDomainId = 1234567;
client.getDomain(myDomainId, function(err, domain) {
domain.addRecordsWithWait([
{
name: 'foo.' + domain.name,
type: 'A',
data: '1.2.3.4'
}
], function(err, records) {
// use your new records here
});
});
client.createLoadBalancer({
name: 'My Load Balancer',
nodes: [ {
address: '192.168.1.1',
port: '80',
condition: rackspace.NodeConditions.ENABLED
} ],
protocol: rackspace.Protocols.HTTP,
virtualIps: [{
type: rackspace.VirtualIpTypes.PUBLIC
}]
}, function(err, loadBalancer) {
// Use your new Load Balancer here
});
client.getServer(serverId, function(err, server) {
client.createVolume({
display_name: 'my new volume ' + serverId,
size: 100,
volume_type: rackspace.VolumeType.SATA
}, function(err, volume) {
server.attachVolume({
volumeId: volume.id,
device: '/dev/xvdb'
}, function(err, result) {
// Use your Volume Here
});
});
});
All rackspace-openstack tests are available by running make test
Much of the shape of this library was courtesy of Charlie Robbins and the team at Nodejitsu for node-cloudservers