OpenStack HorizonをConoHa VPSのダッシュボードとして使ってみる
TL; DR
動機
- 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の一覧の表示
- セキュリティグループの編集、割り当てができる
いろいろエラーが出ているが動いたので気にしない。
課題・やり残し
- 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失敗する。
どうやら、debianのpythonが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パッケージのバージョンを合わせるのが大変になるのでこれも断念した。