Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions src/corelib/Core/Domain/Volume.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
using System;
using System.Runtime.Serialization;

namespace net.openstack.Core.Domain
{
[DataContract]
public class Volume
{
[DataMember]
public string Id { get; set; }

[DataMember(Name = "display_name")]
public string DisplayName { get; set; }

[DataMember(Name = "display_description")]
public string DisplayDescription { get; set; }

[DataMember]
public int Size { get; set; }

[DataMember(Name = "volume_type")]
public string VolumeType { get; set; }

[DataMember(Name = "snapshot_id")]
public string SnapshotId { get; set; }

[DataMember]
public string[] Attachments { get; set; }

[DataMember]
public string Status { get; set; }

[DataMember(Name = "availability_zone")]
public string AvailabilityZone { get; set; }

[DataMember(Name = "created_at")]
public DateTime CreatedAt { get; set; }
}
}
5 changes: 4 additions & 1 deletion src/corelib/Core/ICloudBlockStorageProvider.cs
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
using net.openstack.Core.Domain;
using System.Collections.Generic;
using net.openstack.Core.Domain;

namespace net.openstack.Core
{
public interface ICloudBlockStorageProvider
{
bool CreateVolume(int size, string display_description = null, string display_name = null, string snapshot_id = null, string volume_type = null, string region = null, CloudIdentity identity = null);
IEnumerable<Volume> ListVolumes(string region = null, CloudIdentity identity = null);
Volume ShowVolume(string volume_id, string region = null, CloudIdentity identity = null);
}
}
29 changes: 29 additions & 0 deletions src/corelib/Providers/Rackspace/CloudBlockStorageProvider.cs
Original file line number Diff line number Diff line change
@@ -1,11 +1,14 @@
using System;
using System.Collections.Generic;
using System.Linq;
using JSIStudios.SimpleRESTServices.Client;
using JSIStudios.SimpleRESTServices.Client.Json;
using net.openstack.Core;
using net.openstack.Core.Domain;
using net.openstack.Providers.Rackspace.Objects.Request;
using net.openstack.Providers.Rackspace.Objects.Response;
using net.openstack.Providers.Rackspace.Validators;
using CreateCloudBlockStorageVolumeDetails = net.openstack.Providers.Rackspace.Objects.Request.CreateCloudBlockStorageVolumeDetails;

namespace net.openstack.Providers.Rackspace
{
Expand All @@ -31,6 +34,8 @@ internal CloudBlockStorageProvider(CloudIdentity defaultIdentity, IIdentityProvi
}


#region Volumes

public bool CreateVolume(int size, string display_description = null, string display_name = null, string snapshot_id = null, string volume_type = null, string region = null, CloudIdentity identity = null)
{
_cloudBlockStorageValidator.ValidateVolumeSize(size);
Expand All @@ -42,6 +47,30 @@ public bool CreateVolume(int size, string display_description = null, string dis
return response != null && _validResponseCode.Contains(response.StatusCode);
}

public IEnumerable<Volume> ListVolumes(string region = null, CloudIdentity identity = null)
{
var urlPath = new Uri(string.Format("{0}/volumes", GetServiceEndpoint(identity, region)));
var response = ExecuteRESTRequest<ListVolumeResponse>(identity, urlPath, HttpMethod.GET);

if (response == null || response.Data == null)
return null;

return response.Data.Volumes;
}

public Volume ShowVolume(string volume_id, string region = null, CloudIdentity identity = null)
{
var urlPath = new Uri(string.Format("{0}/volumes/{1}", GetServiceEndpoint(identity, region), volume_id));
var response = ExecuteRESTRequest<GetCloudBlockStorageVolumeResponse>(identity, urlPath, HttpMethod.GET);

if (response == null || response.Data == null)
return null;

return response.Data.Volume;
}

#endregion

#region Private methods

protected string GetServiceEndpoint(CloudIdentity identity = null, string region = null)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
using System.Runtime.Serialization;

namespace net.openstack.Core.Domain
namespace net.openstack.Providers.Rackspace.Objects.Request
{
[DataContract]
public class CreateCloudBlockStorageVolumeDetails
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
using net.openstack.Core.Domain;

namespace net.openstack.Providers.Rackspace.Objects.Response
{
internal class GetCloudBlockStorageVolumeResponse
{
public Volume Volume { get; set; }
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using System.Runtime.Serialization;
using net.openstack.Core.Domain;

namespace net.openstack.Providers.Rackspace.Objects.Response
{
[DataContract]
internal class ListVolumeResponse
{
[DataMember(Name = "volumes")]
public Volume[] Volumes { get; set; }
}
}
5 changes: 4 additions & 1 deletion src/corelib/corelib.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Core\Domain\Address.cs" />
<Compile Include="Core\Domain\CloudBlockStorageVolume.cs" />
<Compile Include="Core\Domain\Volume.cs" />
<Compile Include="Core\Domain\CloudBlockStorageVolumeType.cs" />
<Compile Include="Core\Domain\CloudIdentity.cs" />
<Compile Include="Core\Domain\Container.cs" />
Expand Down Expand Up @@ -87,6 +87,7 @@
<Compile Include="Providers\Rackspace\Objects\Request\AddRoleRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\AddUserRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\ConfirmServerResizeRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\CreateCloudBlockStorageVolumeDetails.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\CreateCloudBlockStorageVolumeRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\CreateServerImageDetails.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\CreateServerImageRequest.cs" />
Expand All @@ -97,6 +98,7 @@
<Compile Include="Providers\Rackspace\Objects\Request\UpdateUserCredencialRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\UpdateUserRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\FlavorDetailsResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\GetCloudBlockStorageVolumeResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\GetImageDetailsResponse.cs" />
<Compile Include="Providers\Rackspace\IProviderFactory.cs" />
<Compile Include="Core\Domain\NewServer.cs" />
Expand All @@ -110,6 +112,7 @@
<Compile Include="Providers\Rackspace\Objects\AuthDetails.cs" />
<Compile Include="Providers\Rackspace\Objects\Request\CreateServerRequest.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\CreateServerResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\ListVolumeResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\NewUserResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\PasswordCredencialResponse.cs" />
<Compile Include="Providers\Rackspace\Objects\Response\TenantsResponse.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,34 @@ public void Should_Create_Volume_Full_Parameters()
Assert.IsTrue(volumeCreatedResponse);
}
#endregion


[TestMethod]
public void Should_Return_Volume_List()
{
var provider = new CloudBlockStorageProvider();
var volumeListResponse = provider.ListVolumes(identity: _testIdentity);
Assert.IsNotNull(volumeListResponse);
Assert.IsTrue(volumeListResponse.Any());
}

[TestMethod]
public void Should_Return_Single_Volume()
{
var provider = new CloudBlockStorageProvider();

var volumeListResponse = provider.ListVolumes(identity: _testIdentity);
if (volumeListResponse != null && volumeListResponse.Any())
{
var firstVolumeInList = volumeListResponse.First();
var singleVolumeResponse = provider.ShowVolume(firstVolumeInList.Id, identity: _testIdentity);
Assert.IsNotNull(singleVolumeResponse);
Assert.IsTrue(singleVolumeResponse.Id == firstVolumeInList.Id);
}
else
{
Assert.Fail("No volumes present.");
}
}
}
}