--- description: | The Hetzner Cloud Packer builder is able to create new images for use with the Hetzner Cloud. The builder takes a source image, runs any provisioning necessary on the image after launching it, then snapshots it into a reusable image. This reusable image can then be used as the foundation of new servers that are launched within the Hetzner Cloud. layout: docs page_title: Hetzner Cloud - Builders sidebar_title: Hetzner Cloud --- # Hetzner Cloud Builder Type: `hcloud` The `hcloud` Packer builder is able to create new images for use with [Hetzner Cloud](https://www.hetzner.cloud). The builder takes a source image, runs any provisioning necessary on the image after launching it, then snapshots it into a reusable image. This reusable image can then be used as the foundation of new servers that are launched within the Hetzner Cloud. The builder does _not_ manage images. Once it creates an image, it is up to you to use it or delete it. ## Configuration Reference There are many configuration options available for the builder. They are segmented below into two categories: required and optional parameters. Within each category, the available configuration keys are alphabetized. In addition to the options listed here, a [communicator](/docs/templates/communicator) can be configured for this builder. ### Required: - `token` (string) - The client TOKEN to use to access your account. It can also be specified via environment variable `HCLOUD_TOKEN`, if set. - `image` (string) - ID or name of image to launch server from. Alternatively you can use `image_filter`. - `location` (string) - The name of the location to launch the server in. - `server_type` (string) - ID or name of the server type this server should be created with. ### Optional: - `endpoint` (string) - Non standard api endpoint URL. Set this if you are using a Hetzner Cloud API compatible service. It can also be specified via environment variable `HCLOUD_ENDPOINT`. - `image_filter` (object) - Filters used to populate the `filter` field. Example: ```json { "image_filter": { "with_selector": [ "name==my-image" ], "most_recent": true } ``` This selects the most recent image with the label `name==my-image`. NOTE: This will fail unless _exactly_ one AMI is returned. In the above example, `most_recent` will cause this to succeed by selecting the newest image. - `with_selector` (list of strings) - label selectors used to select an `image`. NOTE: This will fail unless _exactly_ one image is returned. Check the official hcloud docs on [Label Selectors](https://docs.hetzner.cloud/#overview-label-selector) for more info. - `most_recent` (boolean) - Selects the newest created image when true. This is most useful if you base your image on another packer build image. You may set this in place of `image`, but not both. - `server_name` (string) - The name assigned to the server. The Hetzner Cloud sets the hostname of the machine to this value. - `snapshot_name` (string) - The name of the resulting snapshot that will appear in your account as image description. Defaults to `packer-{{timestamp}}` (see [configuration templates](/docs/templates/engine) for more info). If you want to reference the image as a sample in your terraform configuration please use the image id or the `snapshot_labels`. - `snapshot_labels` (map of key/value strings) - Key/value pair labels to apply to the created image. - `poll_interval` (string) - Configures the interval in which actions are polled by the client. Default `500ms`. Increase this interval if you run into rate limiting errors. - `user_data` (string) - User data to launch with the server. Packer will not automatically wait for a user script to finish before shutting down the instance this must be handled in a provisioner. - `user_data_file` (string) - Path to a file that will be used for the user data when launching the server. - `ssh_keys` (array of strings) - List of SSH keys by name or id to be added to image on launch. - `rescue` (string) - Enable and boot in to the specified rescue system. This enables simple installation of custom operating systems. `linux64` `linux32` or `freebsd64` ## Basic Example Here is a basic example. It is completely valid as soon as you enter your own access tokens: ```json { "builders": [ { "type": "hcloud", "token": "YOUR API KEY", "image": "ubuntu-18.04", "location": "nbg1", "server_type": "cx11", "ssh_username": "root" } ] } ```