fbpx

[和訳] 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 です。

新規CTA