command
目的: ターゲット上でプログラムを実行する。本質的には冪等では
ないため、creates/removes ガードや changed_when で変更報告を
制御する。
- id: update_index type: command with: program: /usr/bin/touch args: ["/var/lib/myapp/indexed"] creates: /var/lib/myapp/indexed| パラメータ | 必須 | 型 | デフォルト | 説明 |
|---|---|---|---|---|
program |
はい | string(絶対パス) | — | 実行ファイルのパス。 |
args |
いいえ | list of strings | [] |
正確な argv — シェル評価なし、NUL は拒否。 |
cwd |
いいえ | string(絶対パス) | — | 作業ディレクトリ。 |
env |
いいえ | map of strings | {} |
追加の環境変数。PATH、LANG、LC_ALL、HOME は予約済み。 |
timeout_seconds |
いいえ | integer 1..86400 | 300 |
実行タイムアウト。 |
success_codes |
いいえ | list of integers 0..255 | [0] |
成功とみなす終了コード。 |
creates |
いいえ | string(絶対パス) | — | ガード: このパスが存在する場合スキップ。removes とは排他。 |
removes |
いいえ | string(絶対パス) | — | ガード: このパスが存在しない場合スキップ。 |
changed_when |
いいえ | string(式) | — | 正常実行後に result.<field> から変更かどうかを決定する。 |
register |
いいえ | string(識別子) | — | 構造化された結果を registers.<name> に格納する。 |
期待される動作
Section titled “期待される動作”- プログラムは与えられた argv で直接実行されます — シェルを介さない ため、クォートや展開の意外な挙動はありません。
- 環境: 固定のベースライン(
PATH、LANG、LC_ALL、HOME)にenvマップを加えたもの。コントローラ、SSH セッション、sudo、 ログインシェルの環境変数は継承されません。 success_codesに含まれる終了コード → 成功。それ以外 → 失敗。 コマンドが開始しなかったと証明できない限り、変更は保守的にpossibleと分類されます。registerはresultのフィールド(exit_code、stdout/stderr など)を捕捉し、後続のwhen/changed_when式で利用できます。
creates: パスが存在する場合コマンドは実行されません。結果は 成功 / 変更なし /guard_satisfiedで、registerには未実行の 結果が格納されます。removes: パスが存在しない場合、同じスキップ意味論が適用されます。- これは依存先をブロックする
when: falseとは異なります。
失敗時の動作
Section titled “失敗時の動作”- ディスパッチ後のタイムアウト、応答の喪失、シグナルの不確実性 → indeterminate。自動リトライはされません。
- 成功でない終了コード → リソース失敗。残りのリソースは blocked (fail-fast)。
プラットフォームに関する補足
Section titled “プラットフォームに関する補足”すべての対応ターゲットに適用されます。program はターゲット上の
絶対パスである必要があります。