Back to Packer

Data sources reference

website/content/docs/templates/hcl_templates/datasources.mdx

1.15.33.0 KB
Original Source

⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

[!IMPORTANT]
Documentation Update: Product documentation previously located in /website has moved to the hashicorp/web-unified-docs repository, where all product documentation is now centralized. Please make contributions directly to web-unified-docs, since changes to /website in this repository will not appear on developer.hashicorp.com. ⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️⚠️

Data sources reference

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.

Using data sources

A data source is declared using a data block, and the configuration looks like the following:

hcl
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:

hcl
// in a local
locals {
  source_ami_id = data.amazon-ami.example.id
  source_ami_name = data.amazon-ami.example.name
 }
hcl
// in a source
source "amazon-ebs" "basic-example" {
  source_ami = local.source_ami
  // ...
}

Known limitations

@include 'datasources/local-dependency-limitation.mdx'