OpenStack HorizonをConoHa VPSのダッシュボードとして使ってみる

TL; DR

  • ConoHa VPSはOpenStack APIを公開しているのでOpenStack Horizonで繋がるかもしれない→繋がった

動機

  • ConoHa VPSダッシュボードはVPSの作成などは出来るものの、セキュリティグループの設定はweb(80, 443)とかSSH(22)とか、よく利用するポートのテンプレートが使えるのみで、細かい設定ができない
  • APIは公開されているが、たまに細々した設定をするためにCLI操作するのは手間である
  • OpenStackのAPIなのでOpenStackのダッシュボードであるHorizonでGUI操作ができるのでは?

環境

  • CentOS: 8.3.2011
  • podman: 2.0.5

podman-dockerをインストールしているので、コマンドはdockerを使っている。

手順

ConoHaのAPIアクセス情報の確認

  • ユーザ名
  • パスワード
  • テナント名
  • テナントID
  • identityのエンドポイントURL

が必要。確認方法は割愛する。

確認したら、

OS_TENANT_NAME=テナント名
OS_TENANT_ID=テナントID
KEYSTONE_URL=identityのエンドポイントURL

の形式でenvファイルを作成する。ユーザ名、パスワードはhorizonのログイン画面に入力する。

コンテナイメージの取得、実行

horizonのコンテナイメージをプルし、ホストの8081ポートで動かす。

docker pull docker.io/alvaroaleman/openstack-horizon
docker run -d --rm -p 8081:80  --env-file path/to/env alvaroaleman/openstack-horizon

curl -L localhost:8081とかで動作確認する。

修正

このままだとうまくConoHa APIに接続できないので、数カ所編集する。

まず、docker psでコンテナIDを確認して

docker exec -it コンテナID /bin/bash

でコンテナに入る。エディタがないのでapt install vimとかで手に入れる。sedで頑張れるならいらない。

/opt/openstack/horizon/openstack_dashboard/local/local_settings.pyの最終行を

OPENSTACK_API_VERSIONS = {"identity": 2.0 }

に編集する。環境変数から取れるようになっているのだが、うまく動作しなかった。

次に、/opt/openstack/horizon/openstack_auth/utils.py

def get_project_list(*args, **kwargs):
    中略

    if get_keystone_version() < 3:
        projects = client.tenants.list()

を 

def get_project_list(*args, **kwargs):
    中略

    if get_keystone_version() < 3:
        import os
        from keystoneclient.v2_0 import tenants
        projects = [tenants.Tenant(None, {'id': os.getenv('OS_TENANT_ID'), 'name':  os.getenv('OS_TENANT_NAME'), 'description': '', 'enabled': True}, loaded=True)]

に変更する。デフォルトではtokenからTENANT情報をAPIで取りに行くようだが、環境変数から取得する。

本当はログイン画面からTENANT_ID、NAMEを入力する方式がいいのだが暫定でこれで動かす。

動作確認

以下の動作は確認した

  • VPSの一覧の表示
  • セキュリティグループの編集、割り当てができる

f:id:smitch:20210204215001p:plain いろいろエラーが出ているが動いたので気にしない。

課題・やり残し

  • API公開していないなどで、404になる問い合わせが散見される
  • セキュリティグループの新規作成ボタンが表示されない(roleの問題?未確認)

感想

  • GUI操作便利
  • horizonの動作は割ともっさりしてる。メモリも200MBくらい使うので、サーバスペック的に常時動かすのは見送り。

NG集

NG1: docker buildできない

alvaroaleman/openstack-horizonのDockerfileからbuildしようとしたが、

pyrsistent requires Python '>=3.5' but the running Python is 2.7.13

でbuild失敗する。

どうやら、debianpythonが2.7であるのに対して、pyrsistentが3.5以上しかサポートしなくなったことが原因のようである。

debianはデフォルトがpython2.7のようであるので、こちらの環境の検討はここまでにする。

NG2: API version書き換えられない

ubuntuイメージにて最新のOpenStackを動かしたが、API VERSIONで2.0を指定しても

The Keystone URL in service catalog points to a v2.0
Keystone endpoint, but v3 is specified as the API version
to use by Horizon. Using v3 endpoint for authentication.

にてv3が強制される。OpenStackの最新版ではv2.0が廃止されている。

v2.0が使えるバージョンを使用すると各種pythonパッケージのバージョンを合わせるのが大変になるのでこれも断念した。