- OpenTofu言語
- 関数
- one
one
関数
one
関数は、要素数が0個または1個のリスト、セット、またはタプル値を受け取ります。コレクションが空の場合、one
関数はnull
を返します。そうでない場合、one
関数は最初の要素を返します。要素が2個以上ある場合、one
関数はエラーを返します。
これは、条件付きアイテムが0個または1個の要素を持つリストとして表される一般的な状況(モジュール作成者がnullになる可能性のある単一の値を返すことを望む場合)を対象とした特殊な関数です。
例:
variable "include_ec2_instance" {
type = bool
default = true
}
resource "aws_instance" "example" {
count = var.include_ec2_instance ? 1 : 0
# (other resource arguments...)
}
output "instance_ip_address" {
value = one(aws_instance.example[*].private_ip)
}
上記のaws_instance
リソースではcount
引数が条件付きの式に設定されているため、aws_instance.example
の値は0個または1個の要素を持つリストになります。instance_ip_address
出力値は、one
関数を簡潔な方法で使用して、単一インスタンスのプライベートIPアドレスまたはインスタンスが作成されなかった場合はnull
を返します。
「スプラット」演算子との関係
OpenTofu言語には、スプラット演算子として知られる組み込み演算子[*]
があり、その機能の1つは、nullの可能性があるプリミティブ値を0個または1個の要素を持つリストに変換することです。
variable "ec2_instance_type" {
description = "The type of instance to create. If set to null, no instance will be created."
type = string
default = null
}
resource "aws_instance" "example" {
count = length(var.ec2_instance_type[*])
instance_type = var.ec2_instance_type
# (other resource arguments...)
}
output "instance_ip_address" {
value = one(aws_instance.example[*].private_ip)
}
この場合、one
関数は、ある意味では、プリミティブ型の値に[*]
を適用することの逆であることがわかります。スプラットは、nullの可能性のある値を0個または1個のリストに変換でき、one
関数はそれを元に戻して、nullの可能性のあるプリミティブ値を返すことができます。
例
> one([])
null
> one(["hello"])
"hello"
> one(["hello", "goodbye"])
Error: Invalid function argument
Invalid value for "list" parameter: must be a list, set, or tuple value with
either zero or one elements.
セットでのone
の使用
one
関数は、要素数が0個または1個であることがわかっているセットがある場合に特に役立ちます。セット値はインデックス付けをサポートしていないため、セットの「最初の」要素を抽出するためにvar.set[0]
を書くことは無効ですが、要素が1つしかないことがわかっている場合は、one
を使用してその単一要素を分離して返すことができます。
> one(toset([]))
null
> one(toset(["hello"]))
"hello"
2つ以上の要素を含む可能性のあるセットではone
を使用しないでください。この関数は、その場合に失敗します。
> one(toset(["hello","goodbye"]))
Error: Invalid function argument
Invalid value for "list" parameter: must be a list, set, or tuple value with
either zero or one elements.