74 lines
3.1 KiB
C#
74 lines
3.1 KiB
C#
|
using System;
|
|||
|
using System.Linq;
|
|||
|
using System.Threading.Tasks;
|
|||
|
using net.openstack.Core.Domain;
|
|||
|
using net.openstack.Core.Providers;
|
|||
|
using OpenStack.Compute.v2_1;
|
|||
|
|
|||
|
public class ComputeSample : ISample
|
|||
|
{
|
|||
|
public async Task Run(string identityEndpoint, string username, string password, string project, string region)
|
|||
|
{
|
|||
|
// 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();
|
|||
|
}
|
|||
|
|
|||
|
public void PrintTasks()
|
|||
|
{
|
|||
|
Console.WriteLine("This sample will perform the following tasks:");
|
|||
|
Console.WriteLine("\t* Lookup a flavor with tiny in the name");
|
|||
|
Console.WriteLine("\t* Lookup an image named cirros");
|
|||
|
Console.WriteLine("\t* Create a server using cirros and the tiny flavor");
|
|||
|
Console.WriteLine("\t* Snapshot the server");
|
|||
|
Console.WriteLine("\t* Delete the snapshot and server");
|
|||
|
}
|
|||
|
|
|||
|
}
|