OpenStack: 'can_set_password': True でインスタンスのadminパスワードを設定⇒パッチが必要

OpenStackのDashboardの以下の設定により、生成するVMインスタンスのadminパスワード(rootのパスワード)を設定できます。
(以降はRDO Queens版で設定した場合の説明です。)

/etc/openstack-dashboard/local_settingsファイル(抜粋)

# The OPENSTACK_HYPERVISOR_FEATURES settings can be used to enable optional
# services provided by hypervisors.
OPENSTACK_HYPERVISOR_FEATURES = {
'can_set_mount_point': False,
'can_set_password': True, ←値をTrueにするとパスワード入力フォームを表示
# 'can_set_password': False, ←値をFalseにするとパスワード入力フォームは非表示
}

これはOpenStackプロジェクトのドキュメントにも記載されています。

(Queens版のURLの例)
https://docs.openstack.org/nova/queens/admin/admin-password-injection.ht...

しかし、実際にはOpenStackをインストールしただけではパスワードの入力フォームは表示されません。
今回はQueens版で試していますが、Dashboardの画面設計が変更されたMMitakaリリース以降、現時点の最新版であるSteinリースまで、おそらく同じ状況と思われます。

この不具合はバグとして以下に登録されています。

https://bugs.launchpad.net/horizon/+bug/1609777

パッチが opendev(後述) に掲載されています。

https://review.openstack.org/492546
https://review.opendev.org/#/c/492546/

ただし、このパッチも以下のような多少の修正が必要です。

  • 「インスタンスの起動」ボタンが押せるようにする
    (opendev.orgのパッチではボタンが無効となったままで、押せません)

  • OPENSTACK_HYPERVISOR_FEATURESの設定を読取り、表示/非表示を切り換える
    (opendev.orgのパッチでは常に表示されます)

  • パスワード入力フォームの見出しのローカライズ(日本語化メッセージを追加)
    (opendev.orgのパッチでは英語表示のみです)

パッチを適用するのはコントローラノードの以下のファイルです。

  • /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/launch-instance-model.service.js
  • /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.controller.js
  • /usr/share/openstack-dashboard/openstack_dashboard/dashboards/project/static/dashboard/project/workflow/launch-instance/keypair/keypair.html
  • /usr/share/openstack-dashboard/openstack_dashboard/locale/ja/LC_MESSAGES/djangojs.mo

opendev.orgのパッチに対して修正を加えたファイルは以下です。

※ 以下の修正は(有)ナレッジデザインのトレーニングコースの実施時に参考として使用しているものです。正規のコードについては、OpenStackプロジェクトのリリースを待ちたいと思います。

  • launch-instance-model.service.js (openstack-dashboardのバージョンが13.0.1-1の場合)
    launch-instance-model.service.js (openstack-dashboardのバージョンが13.0.2-1の場合)

        openstack-dashboardパッケージのバージョンにより、このファイルの内容が若干異なるので2種類用意しましたが、修正する箇所はバージョンに関わらず同じです。

    opendev.orgのパッチに、パスワード入力フォームの表示/非表示の切り替えができるように以下のコードを追記してあります。

    184         hide_adminPass: true,
    

    opendev.orgのパッチに、local_settingsファイルの設定を読み込むように以下のコードを追記してあります。

    253         var launchInstanceSetPassword = settings.getSetting('OPENSTACK_HYPERVISOR_FEATURES');
    .....
    268           launchInstanceSetPassword.then(setPassword, noop),
    .....
    306     function setPassword(password) {
    307       if (!password) {
    308          return;
    309       }
    310       model.newInstanceSpec.hide_adminPass = !password.can_set_password;
    311       return;
    312     }
    
  • keypair.controller.js
    opendev.orgのパッチと同じです。

  • keypair.html
    opendev.orgのパッチに、「インスタンスの起動」ボタンが押せるように修正(太字の箇所)を加えてあります。

     50        <input id="adminPassConf" name="adminPassConf" type="password" class="form-control"
     51               ng-model="model.newInstanceSpec.admin_pass_conf" hz-password-match="model.newInstanceSpec.admin_pass" ng-hide="model.newInstanceSpec.hide_adminPass">
    

    opendev.orgのパッチに、パスワード入力フォームの表示/非表示の切り替えができるように修正(太字の箇所)を加えてあります。

     30       <:div class="form-group"
     31            ng-class="{ 'has-error': launchInstanceKeypairForm.admin_pass.$invalid && launchInstanceKeypairForm.admin_pass.$dirty }"
     32            ng-hide="model.newInstanceSpec.hide_adminPass">
    .....
     47         <label for="adminPassConf" class="control-label" ng-hide="model.newInstanceSpec.hide_adminPass">
    .....
     50         <input id="adminPassConf" name="adminPassConf" type="password" class="form-control"
     51                ng-model="model.newInstanceSpec.admin_pass_conf" hz-password-match="model.newInstanceSpec.admin_pass" ng-hide="model.newInstanceSpec.hide_adminPass">
    

    ※ この修正は元のopendev.orgのパッチにAngularJSのディレクティブng-hideを加えることで非表示にできるようにしたものです。したがって、元のパッチで追加された28行目以降を見直して、全体的に書き換える方が良いのかも知れません。

  • djangojs.mo
    日本語メッセージを以下の手順で追加してあります。

    # cd /usr/share/openstack-dashboard/openstack_dashboard/locale/ja/LC_MESSAGES
    # msgunfmt djangojs.mo -o djangojs.po
    # vi djangojs.po (以下の行を追記)
    msgid "Administrator Password"
    msgstr "管理者パスワード"
    msgid "Password Confirmation"
    msgstr "管理者パスワード(確認)"

    # mv djangojs.mo djangojs.mo.orig
    # msgfmt djangojs.po -o djangojs.mo

上記の4つのファイルを現行のものと置き換え、コントローラノードを再起動することで有効になります。
(Dashboard(Horizon)のサービスだけを再起動する方法がないため、コントローラノードを再起動します)

注) ダッシュボードで入力したadminパスワードをインスタンスに書き込むにはnova.confの編集が必要:

上記の手順により、ダッシュボード(Horizon)でadminパスワードを入力することができますが、このパスワードを生成インスタンスに書き込むのはNovaです。
Novaのハイパーバイザー(KVMなど)が libvirt バックエンドを使用している場合は、各コンピュートノードでnova.confの編集が必要です。
/etc/nova/nova.confファイル(抜粋)

[libvirt]
#inject_password=false
inject_password=True ←True に変更する

■ 「インスタンスの起動」⇒「キーペア」タブでのパスワード入力の画面(画面の一部のみ)

■ 「インスタンスの起動」画面でadminパスワードを設定する手順

パッチを適用した後は、以下の手順でadminパスワードを設定できます。

  1. /etc/openstack-dashboard/local_settingsファイルでadminパスワードの入力フォームの表示/非表示を切り替えます。
  2. 設定したadminパスワードを生成するインスタンスに書き込むには、「ソース」タブで、「新規ボリュームの作成」を「いいえ」にします。エフェメラルストレージでないと、Novaでadminパスワードの書き込みが許可されません。
  3. パスワードの入力フォームを表示するように設定した場合は、「キーペア」タブにパスワードの入力フォームが表示されます。
    パスワードは5文字以上の入力が必要です。(keypair.htmlの記述で変更可)
    確認用パスワードの入力が最初に入力したパスワードと同じになると、「インスタンスの起動」ボタンが押せるようになります。

以上となります。

※ 以下はopendevについての参考情報です。




 (↑ opendevのロゴ )

opendev( https://opendev.org/ ) はOpenStackプロジェクトや関連プロジェクト、CI/CD(Continuous Integration/Continuous Delivery)ツールなどをホスティングしています。

OpenDev is a space for collaborative Open Source software development.

OpenDev’s mission is to provide project hosting, continuous integration tooling, and virtual collaboration spaces for Open Source software projects. OpenDev is itself self hosted on this set of tools including Code Review (Gerrit), Continuous Integration (Zuul), Etherpad, Wiki (mediawiki), Code Browsing (gitea) and so on. This means that OpenDev itself is run like an open source project, you can join us and help run the system. Additionally all of the services we run are open source software themselves.

例)
https://opendev.org/openstack/horizon
https://opendev.org/zuul/zuul
https://opendev.org/kata-containers/zuul-config

https://opendev.org/openstack/horizon の場合:

ここからzipあるいはtar.gz形式でソースコードをダウンロードできます。
現時点ではメニューからmaster, stable/stein, stable/ocata, stable/pike, stable/queens, stable/rockyの各ブランチをダウンロードできます。

gitでも以下のようにダウンロードできます。

$ git clone https://opendev.org/openstack/horizon.git
$ cd horizon/
$ git branch -a
* master
remotes/origin/HEAD -> origin/master
remotes/origin/master
remotes/origin/stable/ocata
remotes/origin/stable/pike
remotes/origin/stable/queens
remotes/origin/stable/rocky
remotes/origin/stable/stein

・review.opendev.orgについて:

https://review.opendev.org ではコードのレビューが行われています。
プロジェクト名(例:openstack/horizon)やバグ番号(例:bug/1609777)で検索できるようです。
コードのチェックにはJenkinsやZuulといったツールが使われています。

● 2018年5月21-24日にバンクーバー(カナダ)でOpenStack Summitが開催されました。
https://www.openstack.org/summit/vancouver-2018/
https://www.youtube.com/watch?time_continue=118&v=V4debkk99zA
「OPEN INFRASTRUCTIURE
CI/CD | CONTAINNERS | EDGE | HPC | NFV | PUBLIC & PRIVATE CLOUD」

参考URL:
https://jp.techcrunch.com/2018/05/22/2018-05-21-openstack-spins-out-its-...

同じ会場でopendevのイベント「OpenDev CI/CD 2018」(5月22-23日)が開催されています。
http://2018.opendevconf.com/schedule/
「OpenDev Program
OpenDev CI/CD content includes keynotes, traditional presentations, collaborative discussions and tutorials. The content is selected by a programming committee comprised of open source CI/CD users and community leaders including Spinnaker, Jenkins, Zuul, TravisCI and Mesos.」

YouTubeにセッションの動画が15本、公開されています。
https://www.youtube.com/watch?v=pfu3Q-PwWgs&list=PLw1g3xNgNA4vDpbiQtJDpb...

● 2018年11月13日-15日にベルリン(ドイツ)でOpenStack Summitが開催されました。
https://www.openstack.org/summit/berlin-2018/

この中のセッション「Infrastructure - Project Update」でopendevが紹介されています。
https://www.openstack.org/videos/summits/berlin-2018/infrastructure-proj...

参考URL:
https://www.serverwatch.com/server-news/openstack-rebranding-infrastruct...
「OpenStack Rebranding Infrastructure Team as OpenDev」

● 2019年4月29日-5月1日にデンバー(米国コロラド州)で開催されたサミットから、サミットの名前が「OpenStack Summit」から「Open Infrastructure Summit」に変わりました。
https://www.openstack.org/summit/denver-2019/
「Join the people building and operating open infrastructure, with over 300 sessions and workshops on Container Infrastructure, CI/CD, Telecom + NFV, Public Cloud, Private & Hybrid Cloud, Security and members of open source communities like Airship, Ansible, Ceph, Docker, Kata Containers, Kubernetes, ONAP, OpenStack, Open vSwitch, OPNFV, StarlingX, Zuul and more.」

● 次回のサミットは2019年11月4日-6日に上海(中国)で開催されます。