---
description: >
  The post-processor block defines how a post-processor is configured.
layout: docs
page_title: post-processor - build - Blocks
sidebar_title: <tt>post-processor</tt>
---

# The `post-processor` block

`@include 'from-1.5/beta-hcl2-note.mdx'`

The `post-processor` block defines how a post-processor is configured.

```hcl
# builds.pkr.hcl
build {
  # ...
  post-processor "checksum" {
    checksum_types = [ "md5", "sha512" ] # checksum the artifact
    keep_input_artifact = true           # keep the artifact
  }
}
```

Post-processors run after the image is built by the builder and provisioned by
the provisioner(s). Post-processors are optional, and they can be used to
upload artifacts, re-package, or more. The list of available post-processors
can be found in the [post-processors](/docs/post-processors) section.

-> Note: The input 'artifact' received by a post-processor will be automatically
  deleted.

# Keep an input artifact

To prevent an input artifact from being deleted, you can set the
`keep_input_artifact` field to true to make Packer keep both artifacts. For
example if we want to checksum an artifact and keep the artifact:

```hcl
# builds.pkr.hcl
build {
  # ...
  post-processor "checksum" {
    checksum_types = [ "md5", "sha512" ]
    keep_input_artifact = true
  }
}
```

# Run on Specific Builds

You can use the `only` or `except` configurations to run a post-processor only
with specific sources. These two configurations do what you expect: `only` will
only run the post-processor on the specified sources and `except` will run the
post-processor on anything other than the specified sources.

An example of `only` being used is shown below, but the usage of `except` is
effectively the same:

```hcl
# builds.pkr.hcl
build {
  # ...
  post-processor "checksum" {
    checksum_types = [ "md5", "sha512" ]
    keep_input_artifact = true
    only = ["source.amazon-ebs.example"]
  }
}
```

The values within `only` or `except` are _source names_, not builder types.

## Build Contextual Variables

Packer allows to access connection information and basic instance state information from a post-processor. These information are stored in the `build` variable.
Check out the [Contextual Variables](/docs/from-1.5/contextual-variables) documentation to learn more about and see some examples of how to use them.
