[和訳] Chef Push 2.0 アルファ版公開 #getchef
この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。
本稿は Chef Push 2.0 alpha is available (2015/08/21) の和訳です。
Chef Push 2.0 アルファ版公開
Chef Push 2.0 で計画している主要な機能は次の通りです。
- 暗号化
- 出力の取得
- 環境の制御
- Server Sent Event (SSE) の提供
これはアルファ版なので、バグが含まれているでしょう。何かあれば Chef Push Issues に報告してください。
Chef Push 2.0 のクライアントとサーバはバージョン 1.x と後方互換性がありません。2.0 クライアントが 1.x サーバと動作するためには何をしたらよいか調査中ですが、まだ実現できていません。
2.0 の最終版までに修正される予定の、現在のアルファ3リリースでわかっている問題は次の通りです。
- Windows 版クライアントが壊れています。どうやら ZeroMQ ライブラリに問題があるようです。
- 改名: Chef Push は数年にわたって多数の名前を持っているので、クリーンアップを続けています。
- knife push クライアントが完全ではありません。knife コマンドでは SSE フィードを使えません。
- クライアント・サーバの RHEL7 サポート。
- API と機能のドキュメント化。
- バージョン 1.x 系からのサーバとクライアントのアップグレードのテスト。
これらの変更のうちのいくつかは破壊的な変更です。特に改名はアルファ版から次へ直接アップグレードすることを困難にしているでしょう。
新機能の概要
暗号化
すべての通信は SSL か CurveZMQ を通して行われます。CurveZMQ は CurveCP プロトコル を基にしています。一つの例外はサーバのハートビートで、これは平文でブロードキャストされます。ただし、完全性のためにサーバキーで署名は行います。
コマンドの出力の取得
knife-push ライブラリは、クライアントにジョブの出力を取得して検査のためにサーバに返すオプションを提供します:
% knife job start "echo foobar" test --capture
Started. Job ID: 26e98ba162fa7ba6fb2793125553c7ae
.Complete.
% knife job output 26e98ba162fa7ba6fb2793125553c7ae test --channel stdout
foobar
環境の制御
ユーザはリモートコマンドの実行環境を制御する多くの方法を持っています。
次のようなものがあります。
- 環境変数 (--with-env)
- 実行ディレクトリ (--in-dir)
- ユーザから push クライアントへ送るデータファイル (--file)
% knife job start "print_execution_environment" test
--file .chef/knife.rb --capture --with-env '{"test": "foo"}'
--in-dir "/tmp" --as-user daemon
Started. Job ID: 26e98ba162fac37787292637362808cb
...
% knife job output 26e98ba162fac37787292637362808cb test --channel stdout
{"HOME"=>"/home/vagrant",
...
"CHEF_PUSH_JOB_FILE"=>"/tmp/pushy/pushy_file20150813-14250-125xv4u",
"CHEF_PUSH_JOB_ID"=>"26e98ba162fac37787292637362808cb",
"CHEF_PUSH_NODE_NAME"=>"test",
"PWD"=>"/srv/piab/mounts/opscode-pushy-client",
"SHELL"=>"/bin/bash",
"test"=>"foo"}
新しい特殊な環境変数があることに注意してください:
- CHEF_PUSH_JOB_FILE: サーバから送られたファイルへのパス
- CHEF_PUSH_JOB_ID: 実行した push ジョブの ID
- CHEF_PUSH_JOB_NODE_NAME: ジョブを実行した Node の名前
Server Sent Event (SSE) の提供
ジョブの状態のフィードを提供する 2つの新しいエンドポイントをサーバに追加しました。高レベルのジョブの開始・完了情報を提供する Organization ごとのフィードと、特定のジョブによる Node レベルの状態変更を提供するジョブごとのフィードです。
ジョブのイベントフィードは次のようになります:
id: 1
event: start
data: {"command": "chef-client", "run_timeout": 60, ...}
id: 2
event: quorum_vote
data: {"node": "moe", "status": "success"}
id: 3
event: quorum_succeeded
data:
id: 4
event:run_start
data:
id: 5
event: run_complete
data: {"node": "moe", "status": "success"}
id: 6
event: job_complete
data: {"status": "complete"}
knife-push プラグインは後のリリースで SSE フィードをサポートします。
さあ始めよう
最新の knife-push プラグイン (0.9 以降)をダウンロードする必要があります(github ならすぐに、rubygems はしばらくしたら)。同様に、最新のクライアントとサーバは packagecloud current からダウンロードできます。これを執筆している時点の最新版は push-jobs-client-2.0.0~alpha.3-1 と opscode-push-jobs-server-2.0.0-alpha-3.1 です。