A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://developer.hashicorp.com/terraform/plugin/framework/handling-data/types/map below:

Map types | Terraform | HashiCorp Developer

Map types store an ordered collection of single element type.

By default, maps from schema (configuration, plan, and state) data are represented in the framework by types.MapType and its associated value storage type of types.Map. These types fully support Terraform's type system concepts that cannot be represented in Go built-in types, such as a map. Framework types can be extended by provider code or shared libraries to provide specific use case functionality.

Use one of the following attribute types to directly add a map of a single element type to a schema or nested attribute type:

Use one of the following attribute types to directly add a map of a nested attributes to a schema or nested attribute type:

If the map value should be the element type of another collection attribute type, set the ElementType field to types.MapType{ElemType: /* ... */} or the appropriate custom type.

If the map value should be a value type of an object attribute type, set the AttributeTypes map value to types.MapType{ElemType: /* ... */} or the appropriate custom type.

Tip

Review the attribute documentation to understand how schema-based data gets mapped into accessible values, such as a types.Map in this case.

Access types.Map information via the following methods:

In this example, a map of strings value is checked for being null or unknown value first, before accessing its known value elements as a map[string]types.String:

// Example data model definition
// type ExampleModel struct {
//   ExampleAttribute types.Map `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() {
    // ...
}

elements := make(map[string]types.String, len(data.ExampleAttribute.Elements()))
diags := data.ExampleAttribute.ElementsAs(ctx, &elements, false)

Call one of the following to create a types.Map value:

In this example, a known map value is created from framework types:

elements := map[string]attr.Value{
    "key1": types.StringValue("value1"),
    "key2": types.StringValue("value2"),
}
mapValue, diags := types.MapValue(types.StringType, elements)

Otherwise, for certain framework functionality that does not require types implementations directly, such as:

A Go built-in map of string key type (map[string]T) or type alias of a map of string key type such as type MyMapType map[string]T can be used instead.

In this example, a map[string]string is directly used to set a map attribute value:

elements := map[string]string{
    "key1": "value1",
    "key2": "value2",
}
diags := resp.State.SetAttribute(ctx, path.Root("example_attribute"), elements)

In this example, a types.Map of types.String is created from a map[string]string:

elements := map[string]string{
    "key1": "value1",
    "key2": "value2",
}
mapValue, diags := types.MapValueFrom(ctx, types.StringType, elements)

The framework supports extending its base type implementations with custom types. These can adjust expected provider code usage depending on their implementation.


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4