openstack-conoha dotnet sdkを紹介します。

こんにちは、DotNetとOpenStackのBig Fan、crowdyです。
今日は、ConoHaのAPIをDotNet用Library化したopenstack-conohaを紹介します。

# **初めに**
- OpenStack-ConoHaって?
- え？ DotNet? Windows? じゃ、無料のWindows開発環境をもらおう。
  - onamae desktop for windows app
  - chocolatey, git, visual studio 2015 community
  
- OpenStack-ConoHa Libraryを試そう
  - https://github.com/crowdy/OpenStack-ConoHa
  - ConoHaのアクセス情報取得
  - VisualStudioでコード作成

- まとめ
  - OpenStackとConoHa
  - 今後の予定



# OpenStack-ConoHaって、
OpenStack-ConoHaは、RackSpace社が公開してるopenstack.netをBaseとして作られたOpenSourceのDotNet用Libraryで、ConoHaが公開してるコマンドを具現したものです。ほぼすべてのAPIを具現していますので、Parameterだけ決めていれることで自由自在に使うことが出来ます。

**注意点**
- OpenStack-ConoHaは、GMOの公式APIではありません。
- Server、Networkなどの作成は追加料金が発生する場合があります。


# え？ DotNet? Windows? じゃ、無料のWindows開発環境をもらおう。
「俺はMacユーザーなのに？」、「俺の環境にVisual Studioインストールしなきゃいけない？」
心配ご無用。メモリ4Gの無料トライアル、GMOインターネットのデスクトップクラウド( https://my.rentalserver.jp/ )を申し込みましょう。決済情報入力なしで14日間無料で試せますのでさっさと環境を作ります。

## onamae desktop for windows app
https://my.rentalserver.jp/
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/advent_1.png" width="600">

for Windowsアプリを選びます。
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/advent_2.png" width="600">

アメリカIDCは要りませんね。
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/advent_3.png" width="600">

## chocolatey, git, visual studio 2015 community

まずはchocolateyをインストールします。chocolateyはyum、apt-get、homebrew、pythonのpipみたいに、アプリケーションの設置をコマンドラインで管理できるツールです。chocolateyのインストールもコマンドラインで行います。https://chocolatey.org/ の記述をコマンドラインで実行。
```
@powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
```
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/cmd_chocolatey.png" width="600">

「Onamae Desktop for Windows App」にはVisual Studio 2013 Professionalがインストール済みですが、少し時代遅れ。新しいDotNet Frameworkのインストール、それぞれのアップデートもしなきゃいけないので面倒。じゃ、無料のVisual Studio 2015のCommunity Versionが使えるのでインストールします。それだけで新しいFrameworkやアップデートも済ませますので。

コマンドプロンプトを管理者モードで開き直して
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/cmd_admin.png" >

```
clinst VisualStudio2015Community -y
```
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/cmd_visualstudio_community.png" width="600">

次はgitをインストールします。
```
clinst git -y
```
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/cmd_admin_done.png" width="600">
conoha_apiuser.png




# OpenStack-ConoHa Libraryを試そう
## https://github.com/crowdy/OpenStack-ConoHa
```
git clone https://github.com/crowdy/OpenStack-ConoHa
```
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/cmd_git_clone.png" width="600">

## ConoHaのアクセス情報取得
アクセスに必要なTenantID、TenantName、UserName、Passwordは、ConoHaのコンパネから取得出来ます。
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/conoha_apiuser2.png" width="600">

## VisualStudioでコード作成

使い方としては、OpenStackMemberのInstanceを通じてすべての操作が出来るSimpleな使い方で実装しています。Class View画面はこんなにたくさんのコマンド具現を見せています。

<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/openstackmember.png" >

UnitTestにも参考になるコードがたくさんありますが、SampleにあるConsole用プログラムコードはこんな感じ。

```csharp:Program.cs
class Program
{
    static void Main(string[] args)
    {
        string username = ""; // input your user name like gncu12345678
        string password = ""; // input your own password
        string tenantname = ""; // input your own tenant name like gnct12345678
        string tenantid = ""; // input your tenant id, which is 32 characters
        string region = "tyo1";

        var osm = new OpenStackMember(
           username,
           password,
           tenantname,
           tenantid,
           defaultregion: region,
           bLazyProviderSetting: false
           );

        var activeServer = osm.ListServers().FirstOrDefault(s => s.GetDetails().Status == ServerState.Active);
        if (activeServer != null)
        {
            Console.WriteLine(String.Format("{0} is active.", activeServer.Id));
            var console = osm.GetVncConsole(activeServer.Id);
            Console.WriteLine(console.Url);
            System.Diagnostics.Process.Start(console.Url);
        }
        else
        {
            Console.WriteLine("there is no active servers.");
        }
    }
}
```

SampleにあるWebApplicationも、Global.asax.csにあるPropertyに値を入れ替えると、
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/global_asax_cs.png" width="600">


こんな感じで実行されます。
<img src="https://raw.githubusercontent.com/crowdy/OpenStack-ConoHa/master/ConoHaWebApplication/Content/Images/server.png" width="600">
これで https://manage.conoha.jp のようなサイトを作ることも出来ますね。

# まとめ
## OpenStackとConoHa
個人見解ですが、ConoHa APIはOpenStack APIを変えずそのまま提供してるのが一番大きな特徴です。つまりConoHa APIを触るのはOpenStack APIを触ることと一緒ですね。ConoHaのHardware-InfraとSoftware-Infraを支えているStaff達へ感謝の意を表わしたいです。

## OpenStack-ConoHaの今後の予定(というか希望)は以下のようです。
- Portable Class Libraryの作成(開発中。2016年01月末まで)
- Windows Store ApplicationのSample開発予定(2016年02月末まで)
- Android、iOS AppのSample開発予定(xamarinを利用、2016年04月末まで)
- conoha.jp以外にz.comにも対応(来年1Q内)

以上。