はじめてのレシピ
このレシピはコントローラ側のテンプレートをターゲットにレンダリングします。 変数とレンダリングされるテンプレートという Sinter レシピの中核となる構成 要素を使います。
version: 1
vars: greeting: value: hello sensitive: false
resources: - id: greeting type: template with: path: /etc/sinter-motd source: templates/greeting mode: "0644"この例では、どちらの対応ターゲットにもデフォルトでは存在しないパスである
/etc/sinter-motd を意図的に使います。/etc/motd は Rocky ではパッケージ
所有のファイルであり、Ubuntu では /etc/update-motd.d によって動的に管理
されるためです。
各要素の役割
Section titled “各要素の役割”version: 1— レシピフォーマットのバージョン(必須)。vars— フィールドやテンプレート内で{{ vars.greeting }}として 参照するリテラル値。sensitive: trueの値はすべての出力で マスクされます。resources— 目的の状態を順序付きで列挙。それぞれid、type、with(パラメータ)、および省略可能なwhen、loop、depends_on、notify、sensitiveを持ちます。id: greeting— リソースの id です。depends_onやnotifyで使われる ラベルであり、serviceリソースのユニット名とは何の関係もありません。
テンプレート
Section titled “テンプレート”{{ vars.greeting }} — managed by sinterテンプレートのソースはレシピファイルからの相対パスで解決されます。
with.vars でテンプレートローカルな値を渡し、{{ template.name }}
として参照することもできます。
ターゲットに対して実行する
Section titled “ターゲットに対して実行する”plan と apply にはターゲット — 状態を観測する対象のマシン — が
必要です。この例ではリモートホストを使い、Sinter は SSH 経由でそこに
接続します:
--host web01.example.com— ターゲットマシンの SSH ホスト名(または アドレス)。Sinter は SSH で接続し、すべての観測と変更をそのホスト上で 実行します。ターゲットには何もインストールされません。--hostを 省略すると、sinterを実行しているマシン自身がターゲットになります。--sudo— ターゲット側のすべての操作を非対話型のsudo -n経由で root として実行します。この例では/etc配下への書き込みに、 非 root ユーザーに対して通常 root 権限が必要となるためです。 ターゲット側のアカウントにパスワードなし sudo が 設定されている必要があります。--sudoなしでは、パーミッションの 失敗は昇格されず、そのまま失敗として報告されます。
validate には --host がありません。レシピの構造と意味だけを
コントローラ上でチェックし、どのターゲットにも接続しないためです。
この例で plan と apply にターゲットが必要なのは、特定のマシン上の
/etc/sinter-motd の実際の状態を観測し(apply は変更も行い)ます。
sinter validate recipe.yamlsinter plan --host web01.example.com recipe.yamlsinter apply --host web01.example.com --sudo recipe.yaml期待される動作
Section titled “期待される動作”validateはターゲットに一切接続せず、レシピが ok であることを 報告します。planはターゲットを観測し、書き込まれるファイルをプレビューします。 作成も変更も行いません。- 1 回目の apply: テンプレートがコントローラ上でレンダリングされ、結果が
root:root、モード0644で/etc/sinter-motdにアトミックに 公開されます。 - 2 回目の apply: すべてのリソースが変更なし — 変更はゼロです。
- いずれかのリソースが失敗した場合、実行は停止します(fail-fast)。 残りのリソースは blocked として報告されます。
サービスを追加する
Section titled “サービスを追加する”service リソースの基本はクイックスタート
に含まれています。1 つのルールを覚えておいてください。service リソースと
ハンドラの service: はどちらもターゲット上の systemd ユニット名を
指定します。ユニット名はディストリビューションによって異なります —
SSH デーモンは Ubuntu では ssh.service、Rocky Linux では
sshd.service です。そのようなリソースは、ドキュメント化されている
when 式でプラットフォームごとにスコープできます:
- id: ssh_service type: service with: name: ssh # RHEL 系ターゲットでは sshd state: running when: "facts.os.family == 'debian'"リソースが変更されたときにだけサービスを再起動したい場合はハンドラを 追加します。完全なハンドラモデルはレシピ を参照してください。
もう 2 つのリソースを試す
Section titled “もう 2 つのリソースを試す”Sinter は 7 つのリソースタイプを実装しています。一覧は リソースリファレンスを参照して ください。このレシピの小さなバリエーション 2 つで、さらに 2 つの タイプを試せます。
file でインラインコンテンツ
Section titled “file でインラインコンテンツ”file リソースはテンプレートファイルなしでインラインの内容を
書き込みます。これは完全なレシピです — 表示されているとおりに
そのままコピーしてください:
version: 1
resources: - id: motd type: file with: path: /etc/sinter-motd content: "managed by sinter\n" mode: "0644"テンプレート版と同様に、内容はアトミックに公開され、再 apply では
何も変更されません。インラインの content も補間されます — たとえば
content: "token={{ vars.token }}" は動作します。違いはソースに
あります: file はリテラルな文字列を書き込み(または source
ファイルをそのままコピーし)ます。一方 template は外部の
テンプレートファイルをレンダリングし、with.vars のテンプレート
ローカルな値を {{ template.name }} として使うこともできます。
ディレクトリとシンボリックリンク
Section titled “ディレクトリとシンボリックリンク”version: 1
resources: - id: appdir type: directory with: path: /etc/myapp mode: "0755"
- id: current_config type: link with: path: /etc/myapp/config target: /etc/sinter-motd depends_on: [appdir]directory は指定した 1 つのディレクトリだけを作成します — 親
(/etc)がすでに存在している必要があり、再帰的な作成はありません。
link は path のシンボリックリンクが target を指すことを保証
します。depends_on によってリンクはディレクトリの後に実行されます。
これらはすべて上で示したのと同じコマンドで実行できます。より大きな
構成要素 — ガード付きの command リソース、package/service の
ベースライン、ハンドラ — については
レシピ概要を参照してください。
完全なモデルはレシピへ、各リソースの 詳細はリソースリファレンスへ進んで ください。