website/content/docs/templates/hcl_templates/datasources.mdx
⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
[!IMPORTANT]
Documentation Update: Product documentation previously located in/websitehas moved to thehashicorp/web-unified-docsrepository, where all product documentation is now centralized. Please make contributions directly toweb-unified-docs, since changes to/websitein this repository will not appear on developer.hashicorp.com. ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️
This topic describes how to use the data block to configure data sources in your HCL Packer templates. The data block instructs Packer to fetch or compute data for use in locals blocks and
source blocks so that builders can use of information defined outside of Packer.
A data source is declared using a data block, and the configuration looks like the following:
data "amazon-ami" "example" {
filters = {
virtualization-type = "hvm"
name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*"
root-device-type = "ebs"
}
owners = ["099720109477"]
most_recent = true
}
A data block requests that Packer read from a given data source ("amazon-ami") and export the result under the given
local name ("example"). The name is used to refer to this data source from elsewhere in the same Packer configuration.
The data block creates a data instance of the given type (first block label) and name (second block label). The combination of the type and name must be unique within a configuration.
Within the block (the { }) is the configuration for the data instance. The configuration is dependent on the data source type,
and is documented for each data source. For example the configuration of the amazon-ami data source can be found at plugins/datasources/amazon/ami.
A data source can output one or more attributes, which can be used by adding their key name to the data source unique
identifier, like data.<TYPE>.<NAME>.<ATTRIBUTE>.
The output from the amazon-ami.example above can be accessed as follows:
Output data:
"data.amazon-ami.example" {
id = "ami12345"
name = "MyAMI"
creation_date = "01/01/2021"
owner = "123456789"
owner_name = "Some Name"
tags = {"tag1": "value"}
}
Usage:
// in a local
locals {
source_ami_id = data.amazon-ami.example.id
source_ami_name = data.amazon-ami.example.name
}
// in a source
source "amazon-ebs" "basic-example" {
source_ami = local.source_ami
// ...
}
@include 'datasources/local-dependency-limitation.mdx'