Terraform
Bool types
Bool types store a boolean true or false value.
By default, booleans from schema (configuration, plan, and state) data are represented in the framework by types.BoolType
and its associated value storage type of types.Bool
. These types fully support Terraform's type system concepts that cannot be represented in Go built-in types, such as *bool
. Framework types can be extended by provider code or shared libraries to provide specific use case functionality.
Schema Definitions
Boolean values can be added to all framework schemas and nested attribute types.
Each concept (provider, resource, data source, etc.) has a separate BoolAttribute
, for example (non-exhaustive):
Schema Type | Attribute Type |
---|---|
Data Source | schema.BoolAttribute |
Provider | schema.BoolAttribute |
Resource | schema.BoolAttribute |
If the bool value should be the element type of a collection attribute type, set the ElemType
field to types.BoolType
or the appropriate custom type.
If the bool value should be a value type of an object attribute type, set the AttrTypes
map value to types.BoolType
or the appropriate custom type.
Accessing Values
Tip
Review the attribute documentation to understand how schema-based data gets mapped into accessible values, such as a types.Bool
in this case.
Access types.Bool
information via the following methods:
(types.Bool).IsNull() bool
: Returns true if the bool is null.(types.Bool).IsUnknown() bool
: Returns true if the bool is unknown.(types.Bool).ValueBool() bool
: Returns the known bool, orfalse
if null or unknown.(types.Bool).ValueBoolPointer() *bool
: Returns a bool pointer to a known value,nil
if null, or a pointer tofalse
if unknown.
In this example, a bool value is checked for being null or unknown value first, before accessing its known value:
// Example data model definition
// type ExampleModel struct {
// ExampleAttribute types.Bool `tfsdk:"example_attribute"`
// }
//
// This would be filled in, such as calling: req.Plan.Get(ctx, &data)
var data ExampleModel
// optional logic for handling null value
if data.ExampleAttribute.IsNull() {
// ...
}
// optional logic for handling unknown value
if data.ExampleAttribute.IsUnknown() {
// ...
}
// myBool now contains a Go bool with the known value
myBool := data.ExampleAttribute.ValueBool()
Setting Values
Call one of the following to create a types.Bool
value:
types.BoolNull()
: A null bool value.types.BoolUnknown()
: An unknown bool value.types.BoolValue(bool)
: A known value.types.BoolPointerValue(*bool)
: A known value.
In this example, a known bool value is created:
types.BoolValue(true)
Otherwise, for certain framework functionality that does not require types
implementations directly, such as:
(tfsdk.State).SetAttribute()
types.ListValueFrom()
types.MapValueFrom()
types.ObjectValueFrom()
types.SetValueFrom()
A Go built-in bool
, *bool
(only with typed nil
, (*bool)(nil)
), or type alias of bool
such as type MyBoolType bool
can be used instead.
In this example, a bool
is directly used to set a bool attribute value:
diags := resp.State.SetAttribute(ctx, path.Root("example_attribute"), true)
In this example, a types.List
of types.Bool
is created from a []bool
:
listValue, diags := types.ListValueFrom(ctx, types.BoolType, []bool{true, false})
Extending
The framework supports extending its base type implementations with custom types. These can adjust expected provider code usage depending on their implementation.