Split OpenStack Compute and Rackspace Cloud Servers
1.6. Release Overview
This release is part of the greater effort to split out Rackspace specific functionality out of OpenStack.NET into the Rackspace SDK. It also is our first release using Semantic Versioning, e.g. versions follow the scheme: breaking.feature.bug
.
The 1.6 release is focused on OpenStack Compute v2.1. The majority of the API has been implemented in this release; see the list of remaining compute api items that will be addressed in a later release.
net.openstack.Providers.Rackspace.CloudServersProvider
has been marked as deprecated in v1.6 and will be removed in v2.0. The replacement is OpenStack.Compute.v2_1.ComputeService
or if you are a Rackspace user, the upcoming v0.3 of the Rackspace package, will provide Rackspace.CloudServers.v2.CloudServerService
.
Here is an example of how to use the replacement service.
// Configure authentication
var user = new CloudIdentityWithProject
{
Username = username,
Password = password,
ProjectName = project
};
var identity = new OpenStackIdentityProvider(new Uri(identityEndpoint), user);
var compute = new ComputeService(identity, region);
Console.WriteLine("Looking up the tiny flavor...");
var flavors = await compute.ListFlavorsAsync();
var tinyFlavor = flavors.FirstOrDefault(x => x.Name.Contains("tiny"));
if(tinyFlavor == null) throw new Exception("Unable to find a flavor with the 'tiny' in the name!");
Console.WriteLine("Looking up the cirros image...");
var images = await compute.ListImagesAsync(new ImageListOptions {Name = "cirros"});
var cirrosImage = images.FirstOrDefault();
if(cirrosImage == null) throw new Exception("Unable to find an image named 'cirros'");
Console.WriteLine("Creating Sample server... ");
var serverDefinition = new ServerCreateDefinition("sample", cirrosImage.Id, tinyFlavor.Id);
var server = await compute.CreateServerAsync(serverDefinition);
Console.WriteLine("Waiting for the sample server to come online...");
await server.WaitUntilActiveAsync();
Console.WriteLine("Taking a snaphot of the sample server...");
var snapshot = await server.SnapshotAsync(new SnapshotServerRequest("sample-snapshot"));
await snapshot.WaitUntilActiveAsync();
Console.WriteLine();
Console.WriteLine("Sample Server Information:");
Console.WriteLine();
Console.WriteLine($"Server Id: {server.Id}");
Console.WriteLine($"Server Name: {server.Name}");
Console.WriteLine($"Server Status: {server.Status}");
Console.WriteLine($"Server Address: {server.IPv4Address}");
Console.WriteLine();
Console.WriteLine("Sample Snapshot Information:");
Console.WriteLine();
Console.WriteLine($"Image Id: {snapshot.Id}");
Console.WriteLine($"Image Name: {snapshot.Name}");
Console.WriteLine($"Image Status: {snapshot.Status}");
Console.WriteLine($"Image Type: {snapshot.Type}");
Console.WriteLine();
Console.WriteLine("Deleting Sample Server...");
await snapshot.DeleteAsync();
await server.DeleteAsync();
Heads Up
net.openstack.Providers.Rackspace.CloudServersProvider
will be marked as deprecated in v1.6 and removed in v2.0. The replacement isOpenStack.Compute.v2_1.ComputeService
or if you are a Rackspace user, the upcoming v0.3 of the Rackspace package, will provideRackspace.CloudServers.v2.CloudServerService
.OpenStackNet.Configure
is being deprecated as it's no longer necessary to explicitly call, unless extending the SDK and require http/json customizations.
User Requests Completed
- Addressed #551. This means that the OpenStack.NET SDK configuration no longer modifies the global Flurl or Json.NET configuration.
- Addressed #344, adds support for
Server.Suspend
andServer.Resume
. - Addressed #561, adds support for booting servers from a volume or snapshot.
- Addressed #339, removes ambiguous situations where a property may or may not be populated depending on the service call. Going forward the following standard is used:
List<Resource>Summaries()
returns<Resource>Summary
objects which contain a subset of data for a resource, usually the name and id.List<Resource>s()
returns full<Resource>
objects.Get<Resource>()
returns the full<Resource>
object.- References to a resource from another, such as
Server.Image
, use<Resource>Reference
with just the id populated and provideGet<Resource>()
to retrieve the full object.