Skip to content

Releases: openstacknetsdk/openstack.net

v1.7.6

20 Sep 18:29
Compare
Choose a tag to compare

Fixes #630: OpenStack token expiration deserialization was affected by the current culture settings

Download v1.7.6 on nuget.org

v1.7.5

14 Sep 19:08
Compare
Choose a tag to compare

Fixes #629: Intermediate certificate property has the wrong name in json.

Download v1.7.5 on nuget.org

v1.7.4

02 Sep 20:35
Compare
Choose a tag to compare

Fixes #628 which was preventing range headers from being passed to Cloud Files.

Download v1.7.4 on nuget.org

Here's an example of how to pass in range headers:

var cloudfiles = new CloudFilesProvider(user);

var headers = new Dictionary<string, string>();
headers.Add("Range", "bytes=0-4");
using (var buffer = new MemoryStream())
{
    cloudfiles.GetObject("test", "helloworld.html", buffer, 4096, headers, region);

    using (var reader = new StreamReader(buffer))
    {
        buffer.Position = 0;
        Console.WriteLine("Read: {0}", reader.ReadToEnd());
        // Read: hello
    }
}

v1.7.3

03 Aug 20:43
Compare
Choose a tag to compare

This updates our NuGet dependencies to allow for json.net v9. See #626.

Download v1.7.3 on nuget.org

v1.7.1

06 Jul 15:25
Compare
Choose a tag to compare

This fixes a regression in our NuGet package introduced in v1.7.0. We are now building against the lowest version of our dependencies listed in our nuspec to avoid assembly binding redirect problems.

Download v1.7.1 on nuget.org

v1.7.0

07 Jun 21:26
Compare
Choose a tag to compare
  • Support Neutron Floating IPs. #606
  • Support Layer 3 Networking extension for listing Network Security Groups and Rules #619. Thanks @JiangZehua!
  • Fix behavior when ObjectStorage.MoveObject is called with the same source and destination. #613
  • Update json.net reference to support versions 6-8. #614

Download v1.7.0 on nuget.org

v1.6.1

12 Apr 19:06
Compare
Choose a tag to compare

Bug Fixes

  • Fixed #612 where an object could end up deleted when CloudFilesProvider.MoveObject was called with the same source and destination. This now results in a noop.

Download v1.6.1 on nuget.org

Split OpenStack Compute and Rackspace Cloud Servers

16 Feb 15:21
Compare
Choose a tag to compare

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.

Download v1.6.0 on nuget.org

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 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.
  • 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 and Server.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 provide Get<Resource>() to retrieve the full object.

v1.6.0-beta.2

12 Jan 17:25
Compare
Choose a tag to compare
v1.6.0-beta.2 Pre-release
Pre-release
  • Addressed #551. This means that the OpenStack.NET SDK configuration no longer impacts the global Flurl or Json.NET configuration.
  • OpenStackNet.Configure is being deprecated as it's no longer necessary to explicitly call, unless extending the SDK and require http/json customizations.

1.6. Release Overview

This beta 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, including the microversions.

net.openstack.Providers.Rackspace.CloudServersProvider will be marked as deprecated in v1.6 and 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.

Download v1.6.0-beta.2 on nuget.org

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();

Restrict NuGet Dependency Version Range

12 Jan 15:47
Compare
Choose a tag to compare

Update our NuGet package to set an upper-bound on our dependency versions. This prevents VS 2015 Update 1 from auto-updating our dependencies to unsupported versions.

Download v1.5.0.2 on nuget.org