LC4RIの時間だ

いろいろあって、こーゆーの作って、使ってます。

ansibleカーネルは、JANOG44ハッカソンで、ビッグローブさんのチームが使ってて、個人的にansibleは、playbookで隠蔽されるのが嫌だったので、良いなーと思ったので入れてみました。まだ、使ってませんが……

sshカーネルは、ぼくの前職のNIIと富士通研究所さんの共同研究の成果物で、興味持つ人が多いので入れてみました。演習とかで使ってます。NIIで作ったwrapperカーネルと繋げれてないので、セル単位の実行ログ保存とかは出来ないのですが、python3を持ち出すと面倒な状況でターミナルっぽく使えるのは良いですね。ただ、僕が踏み抜いてバグ見つけたりしてるので、環境によっては問題あるかも知れません。誰が直すか勝負だ!

PowerShellカーネル

さて、今日は、PowerShellカーネルの話をしましょう。

NIIクラウド運用チームでは、LC4RIと呼ぶ、Jupyterを使った情報システムの構築・運用手法を実践・提唱しています。手法のコンセプトに基づき、Jupyterのプラグインも多数開発しています。

その中に、セルの実行結果に応じて、失敗なら赤に色付けするといった機能があります。Jupyterの内部では、セルの実行結果を「ok」か「error」で返せるようになっているので、それに応じて色を付け、ひと目で状況が理解できるようにしています。

で、PowerShellカーネルなんですが、セルの実行が、成功しても、失敗しても、成功しましたって色になるんですね……

コードを見てみましょう。

    def do_execute(self, code, silent, store_history=True,
                   user_expressions=None, allow_stdin=False):
        try:
            if not code.strip():
                return {'status': 'ok', 'execution_count': self.execution_count,
                        'payload': [], 'user_expressions': {}}

            if not self.proxy:
                self.__createProxy()

            output = self.proxy.run_command(code)

            message = {'name': 'stdout', 'text': output}
            self.send_response(self.iopub_socket, 'stream', message)

            return {'status': 'ok', 'execution_count': self.execution_count,
                    'payload': [], 'user_expressions': {}}

        except Exception:
            excInfo = sys.exc_info()
            message = {
                'ename': str(excInfo[0].__name__),
                'evalue': str(excInfo[1]),
                'traceback': [traceback.format_exc()]
            }
            self.send_response(self.iopub_socket, 'error', message)
            message['status'] = 'error'
            return message

例外発生時は「error」を返すんですが、そうでなければ無条件に「ok」を返しています。

そもそも、PowerShellでは、終了コードが環境変数渡しになっているようで、「PowerShell での終了ステータス($?、$LastExitCode) について確認してみた」を参考に試してみた結果、「\$ErrorActionPreference = “Stop”」を設定すると、コマンド実行後に「$?」を確認することで、成功失敗が判別できることを確認しました。

とゆーわけで、「\$ErrorActionPreference = “Stop”」はデフォルトじゃないので、ユーザに明示的に設定させるとして、コマンド実行後に「$?」を取ってきて、その内容に応じて「ok」「error」を返しましょうよってことで、

プルリク上げました。

まだ終わらんよ

でもね、今、リリースされてる0.1.2だと、ここのコードが違ってるし、取り敢えず、プルリク取り込まれた新しい版が出るまでは、0.1.2にパッチ当てて凌ぐ必要があるわけです。

なので、

Dockerfile内でパッチ当ててます。

さいごに

LC4RIやるにしても、小規模なJupyterHubが欲しい時も、

が超カンタンなので、みんなも使おうね。

广告
将在 10 秒后关闭
bannerAds