»Data Sources

Data sources allow data to be fetched or computed for use elsewhere in locals and sources configuration. Use of data sources allows a Builder to make 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:

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
}
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 type, and is documented for each data source in the data sources section.

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"}
}
"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 locallocals {  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 = locals.source_ami
  // ...
}
// in a sourcesource "amazon-ebs" "basic-example" {  source_ami = locals.source_ami  // ...}

»Related