| 原作者 | ニコ・ショテリウス、スティーブン・アームストロング[1] |
|---|---|
| 初回リリース | 2010年 |
| 安定版リリース | 6.9.8 / 2021年8月24日[2] |
| リポジトリ |
|
| 書かれた | Python、Bourneシェル |
| オペレーティング·システム | Linux、Unix系、macOS [3] |
| タイプ | ソフトウェア構成管理 |
| ライセンス | GNU 一般公衆利用許諾書バージョン 3 以降 |
| Webサイト | 詳しくはこちら |
cdist は、Unix 系システム用の無料 ソフトウェア構成管理ツールです。Bourne Shell を使用して SSH経由でノードを管理し、ターゲット ノードに追加のソフトウェアをインストールする必要はありません。
Cdist は、構成スクリプトを記述するための主要言語として Bourne Shell を選択し、実質的にターゲット ノードへの依存性を必要としないことで、競合する構成管理システムと差別化しています。cdist のコアはPythonで記述されていますが、インタープリタはホスト マシン上でのみ必要であり、ターゲット ノード上では必要ありません。
Cdistは2022年8月にskonfigとしてフォークされました。[4]
発達
cdistの開発は2010年にETHチューリッヒで始まり、活発に開発が進められており[5]、主にNico SchotteliusとSteven Armstrongによってメンテナンスされています。[6] cdistは、スイスのさまざまな企業( ETHチューリッヒ[7]やOMAブラウザプロジェクト など)、 [8]米国、ドイツ、フランスで使用されています。
特徴
cdistは依存性のない構成管理システムです。ターゲットホストにはsshとBourne互換シェルのみが必要です。これらはほとんどのUnix系マシンでデフォルトで提供されています。[9]このため、cdistは他の構成管理システムのブートストラップに使用できます。[10]
インストールと設定
cdist は通常、パッケージ (.deb や .rpm など) としてインストールされるのではなく、git経由でインストールされます。すべてのコマンドは作成されたチェックアウトから実行されます。すべての構成のエントリ ポイントは、シェル スクリプト conf/manifest/init です。これは、cdist 用語では初期マニフェストと呼ばれます。[11]
cdistの主な構成要素は、機能をまとめたいわゆるタイプです。[12] タイプは基本的に、どのタイプを再利用するか、どのコードをターゲットホストで実行するために生成するかを定義するシェルスクリプトの数で構成されています。
建築
cdist は 2 つのコンポーネントに分かれています。
- コア
- 構成スクリプト
コア
Cdist のコアは、構成の読み取りとリモート ホストとの通信を処理します。Ansible と同様に、cdist は構成の変更を適用するために「プッシュ」モデルを使用します。つまり、「ホスト」マシン上の cdist プロセスは、SSH 経由で任意の数のリモート ノードに接続し、それらのノードで構成の更新を実行します。Cdist は複数のホストを並行して構成できるため、構成にかかる時間を短縮できます。[13]
構成
設定スクリプトはターゲットの設定方法を定義します。通常はBourne Shellで書かれ、次のもので構成されています。
- 初期マニフェストは、すべての構成実行が開始されるエントリ ポイントです。このスクリプトは通常、ホスト名やオペレーティング システムなどのターゲット ノードに関する情報を使用して、実際の構成を実行する他のより具体的なスクリプトを呼び出します。
- グローバル エクスプローラーは、ターゲット システムに関する情報 (オペレーティング システム、init システム、ホスト名など) を収集する小さなスクリプトです。
- タイプは、再利用可能な構成のチャンクを記述します。タイプはマニフェストでインスタンス化され、ターゲットマシンで実際にコードを実行する唯一の方法です。「タイプ」という名前は、オブジェクト指向言語の「クラス」に類似しています。これは、渡されるパラメータに応じて、タイプが複数の「オブジェクト」に変換できるためです。[14]たとえば、
__fileタイプは複数の「オブジェクト」に変換でき、それぞれが特定のファイルの作成を表します。Ansible の「ロール」は、cdist のタイプに相当します。タイプには多くのコンポーネントを含めることができます。- オブジェクト ID: 型がオブジェクトに変換されると、一意のオブジェクト ID が渡されます。同じ ID で同じ型を 2 回インスタンス化することはできません。この ID は UUID のようにランダムではなく、型に関連して意味のある一意の識別子です。たとえば、
__file型の ID はファイルへの絶対パスです。 - パラメータ: 多くのタイプはオブジェクト ID で完全に記述することができず、パラメータの形式で追加情報を受け取ります。この
__fileタイプはgroup、どの Unix グループがファイルを所有するかを指定するパラメータを受け取ります。 - エクスプローラー: 上記のグローバル エクスプローラーに加えて、タイプには、リモート マシンからタイプ固有の情報を収集する独自のエクスプローラーがある場合があります。タイプ
__fileは、エクスプローラーを使用して、作成するファイルが既に存在するかどうかを判断します。この情報を使用して、ファイルの作成をスキップすることもあります。 - マニフェスト: 型マニフェストは他の型をインスタンス化できるため、コードの再利用が容易になります。
- Gencode スクリプト:
gencode-remoteスクリプトは、ターゲット ノードの構成を実際に更新する主な方法です。スクリプトはgencode-remoteローカル マシンで実行されますが、その標準出力はリモート マシンに送信され、シェル スクリプトとして実行されます。また、あまり使用されないスクリプトもありgencode-local、これはローカルで実行されるコードを出力するものです。
- オブジェクト ID: 型がオブジェクトに変換されると、一意のオブジェクト ID が渡されます。同じ ID で同じ型を 2 回インスタンス化することはできません。この ID は UUID のようにランダムではなく、型に関連して意味のある一意の識別子です。たとえば、
シェルはcdist 構成スクリプトを作成するための事実上の言語ですが、適切なシェバン行が含まれていれば、ほとんどのスクリプトは任意の言語で作成できます。シェル スクリプトは、環境変数へのアクセス、ファイルの読み取り、システム コマンドの実行が簡単なため好まれています。
設定言語
ユーザーが構成可能なすべての部分は、シェル スクリプトであるマニフェストまたは gencode スクリプトに含まれています。シェル スクリプトが選択された理由は、Unix システム管理者は通常、シェル スクリプトの読み書きに精通しているためです。さらに、シェルは潜在的なターゲット システムでも一般的に使用できるため、そこに追加のソフトウェアをインストールする必要がありません (「ゼロ依存性」)。
cdist は、ホストがタイプにマッピングされている初期マニフェスト ( conf/manifest/init )から構成を読み取ります。
case " $__target_host " in myhostname ) __package zsh --state present
__addifnosuchline /tmp/cdist-welcome --line "Welcome to cdist" ;; esac
cdist で型を使用する場合、それらはマニフェスト内の通常のプログラムのように呼び出され、stdin からの読み取りだけでなく高度なパラメータ解析も利用できます。
# デフォルトのファイルを提供するが、ユーザーが変更できるようにする
__file /home/frodo/.bashrc --source "/etc/skel/.bashrc" \ --state exists \ --owner frodo --mode 0600
# stdin からファイルの内容を取得します
__file /tmp/whatever --owner root --group root --mode 644 --source - << DONEここに /tmp/whatever の内容が入りますDONE
依存関係は、 require環境変数を設定することによって表現されます。
__ディレクトリ /tmp/foobar
require="__directory//tmp/foobar" __file /tmp/foobar/baz
型内のパスとファイルへのアクセスは、$__objectなどの環境変数によって提供されます。
類似ソフトウェア
Ansible は、cdist と同様に、エージェントレス プッシュ モデルを使用してノードを構成します。[9]ただし、Ansible では一部のターゲット タイプにPython が必要ですが、 [15] cdist では必要ありません。Ansible は、宣言型の YAML ベースの言語で記述されたロールと、Python で記述されたモジュールを区別します。Cdist には、モジュールとロールの両方の目的を果たす「タイプ」のみがあり、ほとんどが Bourne Shell で記述されています。Shell は、これまで構成管理システムを使用したことのない多くのシステム管理者に馴染みがあるため、Cdist のアプローチの方が好ましいかもしれませんが、Ansible の宣言型言語は、より読みやすく適切であると言えます。
参考文献
- ^ シャルマ、リシャブ;ソニ、ミテシュ(2015年3月15日)。学ぶシェフ。パックト。 10、17-18ページ。ISBN 978-1783285211。
- ^ 「Tags - cdist - Gitea: Git と紅茶の一杯」。code.ungleich.ch 。2022 年 1 月 15 日閲覧。
- ^ 「3. サポートされているオペレーティングシステム — cdist 6.9.8 ドキュメント」cdi.st . 2022 年 1 月 15 日閲覧。
- ^ 「.github/README.md at df2f84b694afee8137b97695f6424c5aec314717 · skonfig/.github」。GitHub.com。
- ^ [1] [リンク切れ ]
- ^ 「ungleich/cdist: cdist configuration management」。GitHub.com 。 2015年7月5日にオリジナルからアーカイブ。2016年4月10日閲覧。
- ^ 「Cdist 構成管理」。2013 年 1 月 15 日時点のオリジナルよりアーカイブ。2012 年 6 月 8 日閲覧。
- ^ 「OMA ブラウザについて」。2012 年 8 月 17 日時点のオリジナルよりアーカイブ。2012 年6 月 26 日閲覧。
- ^ ab Torberntsson, Kim; Rydin, Ylva (2014 年 6 月). 構成管理の研究 - クラウド環境でのソフトウェアの展開と構成のためのシステム ソリューション(PDF) (論文).ウプサラ大学. pp. 8, 27, 31, 42. 2018 年 11 月 22 日時点のオリジナルからのアーカイブ(PDF) 。
- ^ 「Google グループ」。Groups.google.com。2016年 4 月 10 日閲覧。
- ^ Kruse, Christian (2016). 「cdist による自動構成デプロイメント」。WWWTech。2018年11 月 22 日時点のオリジナルよりアーカイブ。2018 年11 月 22 日閲覧。
- ^ "cdist-type(7)". Nico.schottelius.org . 2016年3月3日時点のオリジナルよりアーカイブ。2016年4月10日閲覧。
- ^ Bezroukov, Nikolai. 「cdist」. Softpanorama . 2017年7月8日時点のオリジナルよりアーカイブ。2018年11月22日閲覧。
- ^ 「13. マニフェスト — cdist 4.10.6-6-g61ac4a26 ドキュメント」www.nico.schottelius.org . 2019年3月26日閲覧。
- ^ 「Ansible のインストール — Ansible ドキュメント」。docs.ansible.com。2023年1 月 13 日閲覧。
管理対象ノード (Ansible が管理しているマシン) に Ansible がインストールされている必要はありませんが、Ansible ライブラリ コードを実行するには Python 2.7、または Python 3.5 - 3.11 が必要です。
外部リンク
- 公式サイト
- ソースコード
- cdist メーリングリスト
- フリーコードのcdist
