ごめんなさい、タイトル盛りました。
他のインタプリタ系言語も大体同じようにコマンドをアドホックに実行できるけれど、Pythonも標準ライブラリを組み合わせることでかなり便利に使うことができます。
TL;DR
Pythonを使ってコマンド1発でwebサーバを動作させます。
$ python3 -m http.server 12345
あるいは
$ python2 -m SimpleHTTPServer 12345
任意のポートでwebサーバを起動
何がうれしいのか?
VMやネットワークを構築して、まだDBやアプリケーションサーバなどが用意されていない状態で、iptables
やネットワーク機器の各種ルーティングやポート毎のフィルタリング・ロードバランサ設定が正しく動作しているかの確認、どうしていますか?
Pythonがあれば単体(標準ライブラリ)でwebサーバを任意のポートで起動できるので、疑似サーバとして「リモートからのTCP疎通」を簡単に確認できます。(リモートからは使用するポートでcurl
すれば疎通確認できる)
Pythonと言っても、プログラミングする必要はありません。
- コーディング不要
- 設定ファイル不要
- 基本的に追加のパッケージインストール等は不要
- Pythonインタプリタ(
python
コマンド)が有ればOK
- Pythonインタプリタ(
- 現在主流の3.xか、少し古い2.x(2.xは2020年1月1日でサポート終了)のどちらでもOK
- オプションが若干異なる
- 実行すると、カレントディレクトリをルートドキュメントとしてファイルリスト・ファイル内容をクライアントに応答
- 簡易的にファイル配布サーバにも使える
デフォルトでリモートホストからの接続も受け付ける動作(0.0.0.0でLISTEN)するので、「ローカルからはcurl
が反応あるけど、リモートからだと接続できない」のであれば、ファイヤーウォールやロードバランサの設定が怪しいはずなので確認してみましょう。
Python 3.x
zaki@chaource:~$ python3 -m http.server 12345
Serving HTTP on 0.0.0.0 port 12345 (http://0.0.0.0:12345/) ...
停止はCtrl-c
Python 2.x
zaki@chaource:~$ python2 -m SimpleHTTPServer 12345
Serving HTTP on 0.0.0.0 port 12345 ...
停止はCtrl-c
Pythonのバージョン確認方法
zaki@chaource:~$ python --version
Python 2.7.15+
--version
を付けて実行すればOK
JSONの整形
一つと言いつつもう1件
何かのAPIサーバにcurl
したりすると、JSON形式のレスポンスが改行無しでドカンと振ってきて見づらいチクショウというとき、これもPythonで簡単に整形できます。
| python -m json.tool
これを付けるだけ。
制限(?)として、正しい書式になっていないナンチャッテJSONだとあっさりエラーになるので注意。
jq使えたらそれでもいいけど。
zaki@mascarpone% curl -s -H "Authorization: Bearer $(oc whoami -t)" "http://docker-registry-default.192.168.99.103.nip.io/v2/_catalog"
{"repositories":["openshift/dotnet","openshift/httpd","openshift/jenkins","openshift/mariadb","openshift/mongodb","openshift/mysql","openshift/nginx","openshift/nodejs","openshift/perl","openshift/php","openshift/postgresql","openshift/python","openshift/redis","openshift/ruby","openshift/wildfly"]}
このような、1行に出力されて見づらいJSONレスポンスも…
zaki@mascarpone% curl -s -H "Authorization: Bearer $(oc whoami -t)" "http://docker-registry-default.192.168.99.103.nip.io/v2/_catalog" | python -m json.tool
{
"repositories": [
"openshift/dotnet",
"openshift/httpd",
"openshift/jenkins",
"openshift/mariadb",
"openshift/mongodb",
"openshift/mysql",
"openshift/nginx",
"openshift/nodejs",
"openshift/perl",
"openshift/php",
"openshift/postgresql",
"openshift/python",
"openshift/redis",
"openshift/ruby",
"openshift/wildfly"
]
}
python -m json.tool
へパイプしてあげるとこのように整形される。
(ちなみに実行環境はminishift付属のdockre-registreyへDocker Registry APIを実行)