メインコンテンツにスキップ

fileset関数

filesetは、パスとパターンが与えられた場合に、正規のファイル名のセットを列挙します。パスは結果のファイル名セットから自動的に削除され、パス区切り文字を含む結果は、クロスシステム互換性のため、常にフォワードスラッシュ(/)をパス区切り文字として返します。

コードブロック
fileset(path, pattern)

サポートされているパターンマッチ

  • * - 区切り文字以外の任意の文字列に一致します
  • ** - 区切り文字を含む任意の文字列に一致します
  • ? - 区切り文字以外の1文字に一致します
  • {alternative1,...} - カンマ区切りの代替のいずれかに一致する場合、文字列に一致します
  • [CLASS] - 文字クラス内の区切り文字以外の1文字に一致します(下記参照)
  • [^CLASS] - 文字クラス外の区切り文字以外の1文字に一致します(下記参照)

ダブルスター(**)は、パスコンポーネントとして単独で表示する必要があることに注意してください。/path**のようなパターンは無効であり、/path*と同じように扱われますが、/path*/**は目的の結果を得ることができます。

文字クラスは以下をサポートします

  • [abc] - セット内の任意の1文字に一致します
  • [a-z] - 範囲内の任意の1文字に一致します

関数は、適用時ではなく設定の解析中に評価されるため、この関数はOpenTofuがアクションを実行する前にディスクに既に存在しているファイルでのみ使用できます。

コードブロック
> fileset(path.module, "files/*.txt")
[
"files/hello.txt",
"files/world.txt",
]

> fileset(path.module, "files/{hello,world}.txt")
[
"files/hello.txt",
"files/world.txt",
]

> fileset("${path.module}/files", "*")
[
"hello.txt",
"world.txt",
]

> fileset("${path.module}/files", "**")
[
"hello.txt",
"world.txt",
"subdirectory/anotherfile.txt",
]

filesetの一般的な使用方法は、for_eachメタ引数を使用して、一致したファイルごとに1つのリソースインスタンスを作成することです。

コードブロック
resource "example_thing" "example" {
for_each = fileset(path.module, "files/*")

# other configuration using each.value
}