template
目的: レシピの隣に置かれたテンプレートファイルをレンダリングし、
結果をターゲットの path に公開する。
- id: app_conf type: template with: path: /etc/myapp/config.ini source: templates/config.ini mode: "0640" vars: listen_port: 8080[server]listen = {{ template.listen_port }}hostname = {{ facts.hostname }}| パラメータ | 必須 | 型 | デフォルト | 説明 |
|---|---|---|---|---|
path |
はい | string(絶対パス) | — | ターゲット上の配置先。 |
source |
はい | string | — | コントローラ側テンプレート。レシピファイルからの相対パスで解決。 |
state |
いいえ | string | present |
present または absent。 |
vars |
いいえ | map | — | テンプレートローカルな値。template.<name> として参照可能。 |
owner |
いいえ | string | — | 所有者名。 |
group |
いいえ | string | — | グループ名。 |
mode |
いいえ | string | — | 引用符付きの 4 桁 8 進数。 |
期待される動作
Section titled “期待される動作”- テンプレートはコントローラ上でレンダリングされ、
fileと同様にアトミックに 公開されます。 - テンプレート式は
vars.*、facts.*、registers.*、template.*を 読み取れます。template.*の名前が他の名前空間をシャドウすることは ありません。 contentはサポートされません — template リソースは常にsourceを使います。- レンダリングされるのは
{{ 式 }}だけです。{{をそのまま書くには\{{、{%をそのまま書くには{{ "{%" }}と書きます。Jinja の文タグ ({% ... %})とコメントタグ({# ... #})はサポートされず、黙って そのまま書き出されることはなく、エラーになります(下記)。タグとみなすのは、 対応する閉じ記号({%には%}、{#には#})が後ろにある開始記号だけです。 閉じ記号のない開始記号と、$の直後の{#(シェルの${#var})は通常の 文字列で、そのまま書き出されます。 - テンプレートの出力が systemd マネージャの入力(ユニットファイル、drop-in、
alias/mask/
.wants/.requiresリンク、system.conf)を実際に変更すると、 それを必要とする次のサービスまたはハンドラの前、および成功した apply の 最後に、Sinter がsystemctl daemon-reloadを自動的に実行します。 serviceを参照して ください。
完全に冪等です — レンダリング結果に変更がなければ変更もハンドラ通知も 発生しません。
失敗時の動作
Section titled “失敗時の動作”sourceファイルの欠落やテンプレート評価エラー(未定義変数など)は validate/apply 時に説明的なエラーで失敗します。メッセージから sensitive な値はマスクされます。- Jinja のタグ(
{% if ... %}、{% for ... %}、{# ... #})は validate で エラー(終了コード 2)になり、リソース、sourceファイル、タグの行と列が 表示されます。そのようなファイルを変更せずに配置するには、fileリソースのsourceを使います。 fileと同じファイルシステム安全ルール(信頼境界、シンボリック リンクの拒否、アトミックな公開)。
プラットフォームに関する補足
Section titled “プラットフォームに関する補足”すべての対応ターゲットに適用されます。