使用 c# 在惠普云或任何 Openstack 云上创建虚拟实例

本文关键字:云上 Openstack 创建 虚拟 实例 任何 惠普 使用 | 更新日期: 2023-09-27 18:33:14

我正在使用以下代码在 hp 云(或任何 openstack)中创建实例。我在确定基本网址时遇到问题。可能还有其他错误,我希望任何人也能看到它们。所以我要找出基本网址。我浏览了一下 hp 文档,但无济于事?!我也不确定如何获取图像ID,我认为味道"小"等?

using System;
using System.Web;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using net.openstack.Core.Domain;
using net.openstack.Providers.Rackspace;

namespace Openstack2
{
 class Program
 {
    static void Main(string[] args)
    {
        Uri baseUrl = new Uri("https://horizon.hpcloud.com/auth/login/");
        CloudIdentity cloudId = new CloudIdentity()
        {
            Username = "#####",
            Password = "####"
        };
        CloudIdentityProvider cip = new CloudIdentityProvider(cloudId, baseUrl);
        UserAccess ua = cip.Authenticate(cloudId);
        CloudServersProvider provider = new CloudServersProvider(cloudId);
        Metadata metaData = new Metadata(); // Add some metadata just because we can
        metaData.Add("Description", "Example 4 - Getting Started");
        string serverName = "Server a14";
        string imageId = "###";
        string flavorId = "standard.xsmall";
        NewServer newServer = provider.CreateServer(serverName, imageId, flavorId,DiskConfiguration.Manual, metaData);
    }
}

}

上面的代码是基于机架空间sdk连接到hp云的,所以这可能是一个问题。但我也使用了基于其他 .net openstack API 的以下代码:

var identityUrl = "https://horizon.hpcloud.com/auth/login/";
    var imageUrl = "http://server:9292";
    var username = "####";
    var password = "###";
    var cloudId = new CloudIdentity() { Username = username, Password = password };
    var cloudIdProvider = new CloudIdentityProvider(new Uri(identityUrl));
    cloudIdProvider.Authenticate(cloudId);
    var cloudServersProvider = new CloudServersProvider(cloudId, cloudIdProvider);
    var newServer = cloudServersProvider.CreateServer("Team 101 Server a14", "Team 101 Server a14", "standard.xsmall");

仍然无法连接到我的 hp openstack。我想我会放弃 c#,也许会使用 powershell 或 nova。

使用 c# 在惠普云或任何 Openstack 云上创建虚拟实例

我正在使用HP云,这就是我获取baseUrl的方式:

...
using HPCloud.Common;
using HPCloud.Objects;
using HPCloud.Objects.Utility;
using HPCloud.Objects.DataAccess;
using HPCloud.Objects.Domain;
using HPCloud.Objects.Domain.Compute;
using HPCloud.Objects.Domain.Admin;
session = Session.CreateSession("accessKey", "secretKey", "tennantID");
private Session session = null;
    public static string GenerateUrl(Session session, string bucket_name, string key)
    {
        string baseUrl = session.Context.ServiceCatalog.GetService(HPCloud.Objects.Domain.Admin.Services.ObjectStorage).Url;
        return baseUrl + "/" + bucket_name + "/" + key;
    }

您需要从云管理页面获取访问密钥、密钥和 tennantID。

您可能需要从Nuget添加HPCloud-API和BouncyCastle。

因此,现在您可以使用以下内容将文件放入云存储桶中:

public static bool PutFile(Session session, string bucket_name, string file_path, out string key)
    {
        if (!File.Exists(file_path))
        {
            throw new FileNotFoundException(file_path);
        }
        bool success = false;
        key = System.IO.Path.GetFileName(file_path);
        try
        {
            var soRepo = session.Factory.CreateStorageObjectRepository();
            string fullUrl = GenerateUrl(session, bucket_name, key);
            soRepo.Copy(file_path, fullUrl, false);
            success = true;
        }
        catch
        {
            success = false;
            key = string.Empty;
        }
        return success;
    }