Skip to content

Commit

Permalink
docs: Upgrade plugin to integrations framework
Browse files Browse the repository at this point in the history
  • Loading branch information
BrandonRomano authored and nywilken committed Aug 23, 2023
1 parent b830731 commit f20c6a8
Show file tree
Hide file tree
Showing 9 changed files with 444 additions and 63 deletions.
22 changes: 22 additions & 0 deletions .github/workflows/ensure-docs-compiled.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
name: Ensure Docs are Compiled
on:
push:
jobs:
ensure-docs-compiled:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎
uses: actions/checkout@8e5e7e5ab8b370d6c329ec480221332ada57f0ab # v3.5.2
- uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1
- shell: bash
run: make build-docs
- shell: bash
run: |
if [[ -z "$(git status -s)" ]]; then
echo "OK"
else
echo "Docs have been updated, but the compiled docs have not been committed."
echo "Run 'make build-docs', and commit the result to resolve this error."
exit 1
fi
46 changes: 46 additions & 0 deletions .github/workflows/notify-integration-release-via-manual.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
name: Notify Integration Release (Manual)
on:
workflow_dispatch:
inputs:
version:
description: "The release version (semver)"
default: 0.0.1
required: false
branch:
description: "A branch or SHA"
default: 'main'
required: false
jobs:
notify-release:
runs-on: ubuntu-latest
steps:
- name: Checkout this repo
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
ref: ${{ github.event.inputs.branch }}
# Ensure that Docs are Compiled
- uses: actions/setup-go@v4
- shell: bash
run: make build-docs
- shell: bash
run: |
if [[ -z "$(git status -s)" ]]; then
echo "OK"
else
echo "Docs have been updated, but the compiled docs have not been committed."
echo "Run 'make build-docs', and commit the result to resolve this error."
exit 1
fi
# Perform the Release
- name: Checkout integration-release-action
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
repository: hashicorp/integration-release-action
path: ./integration-release-action
- name: Notify Release
uses: ./integration-release-action
with:
integration_identifier: 'packer/hashicorp/hcloud'
release_version: ${{ github.event.inputs.version }}
release_sha: ${{ github.event.inputs.branch }}
github_token: ${{ secrets.GITHUB_TOKEN }}
40 changes: 40 additions & 0 deletions .github/workflows/notify-integration-release-via-tag.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
name: Notify Integration Release (Tag)
on:
push:
tags:
- '*.*.*' # Proper releases
- '*.*.*-*' # Pre releases
jobs:
notify-release:
runs-on: ubuntu-latest
steps:
- name: Checkout this repo
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
ref: ${{ github.ref }}
# Ensure that Docs are Compiled
- uses: actions/setup-go@v4
- shell: bash
run: make build-docs
- shell: bash
run: |
if [[ -z "$(git status -s)" ]]; then
echo "OK"
else
echo "Docs have been updated, but the compiled docs have not been committed."
echo "Run 'make build-docs', and commit the result to resolve this error."
exit 1
fi
# Perform the Release
- name: Checkout integration-release-action
uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c # v3.3.0
with:
repository: hashicorp/integration-release-action
path: ./integration-release-action
- name: Notify Release
uses: ./integration-release-action
with:
integration_identifier: 'packer/hashicorp/hcloud'
release_version: ${{ github.ref_name }}
release_sha: ${{ github.ref }}
github_token: ${{ secrets.GITHUB_TOKEN }}
31 changes: 31 additions & 0 deletions .web-docs/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
The `hcloud` Packer plugin is able to create new images for use with [Hetzner
Cloud](https://www.hetzner.cloud).

### Installation

To install this plugin, copy and paste this code into your Packer configuration, then run [`packer init`](https://www.packer.io/docs/commands/init).

```hcl
packer {
required_plugins {
hcloud = {
source = "github.com/hashicorp/hcloud"
version = "~> 1"
}
}
}
```

Alternatively, you can use `packer plugins install` to manage installation of this plugin.

```sh
$ packer plugins install github.com/hashicorp/hcloud
```

### Components

#### Builders

- [hcloud](/packer/integrations/hashicorp/hcloud/latest/components/builder/hetzner-cloud) - The hcloud builder
lets you create custom images on Hetzner Cloud by launching an instance, provisioning it, then
export it as an image for later reuse.
142 changes: 142 additions & 0 deletions .web-docs/components/builder/hetzner-cloud/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
Type: `hcloud`
Artifact BuilderId: `hcloud.builder`

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](/packer/docs/templates/legacy_json_templates/communicator) can be configured for this
builder.

### Required Builder Configuration options:

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

```hcl
image_filter {
most_recent = true
with_selector = ["name==my-image"]
}
```

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](/packer/docs/templates/legacy_json_templates/engine) for more info).
The snapshot_name must be unique per architecture.
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.

<!-- Code generated from the comments of the SSHTemporaryKeyPair struct in communicator/config.go; DO NOT EDIT MANUALLY -->

- `temporary_key_pair_type` (string) - `dsa` | `ecdsa` | `ed25519` | `rsa` ( the default )

Specifies the type of key to create. The possible values are 'dsa',
'ecdsa', 'ed25519', or 'rsa'.

NOTE: DSA is deprecated and no longer recognized as secure, please
consider other alternatives like RSA or ED25519.

- `temporary_key_pair_bits` (int) - Specifies the number of bits in the key to create. For RSA keys, the
minimum size is 1024 bits and the default is 4096 bits. Generally, 3072
bits is considered sufficient. DSA keys must be exactly 1024 bits as
specified by FIPS 186-2. For ECDSA keys, bits determines the key length
by selecting from one of three elliptic curve sizes: 256, 384 or 521
bits. Attempting to use bit lengths other than these three values for
ECDSA keys will fail. Ed25519 keys have a fixed length and bits will be
ignored.

NOTE: DSA is deprecated and no longer recognized as secure as specified
by FIPS 186-5, please consider other alternatives like RSA or ED25519.

<!-- End of code generated from the comments of the SSHTemporaryKeyPair struct in communicator/config.go; -->


- `rescue` (string) - Enable and boot in to the specified rescue system. This
enables simple installation of custom operating systems. `linux64` or `linux32`

- `upgrade_server_type` (string) - ID or name of the server type this server should
be upgraded to, without changing the disk size. Improves building performance.
The resulting snapshot is compatible with smaller server types and disk sizes.

## Basic Example

Here is a basic example. It is completely valid as soon as you enter your own
access tokens:

```hcl
source "hcloud" "basic_example" {
token = "YOUR API TOKEN"
image = "ubuntu-22.04"
location = "nbg1"
server_type = "cx11"
ssh_username = "root"
}
build {
sources = ["source.hcloud.basic_example"]
}
```
12 changes: 12 additions & 0 deletions .web-docs/metadata.hcl
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# For full specification on the configuration of this file visit:
# https://github.com/hashicorp/integration-template#metadata-configuration
integration {
name = "Hetzner Cloud"
description = "The hcloud plugin can be used with HashiCorp Packer to create custom images on Hetzner Cloud."
identifier = "packer/hashicorp/hcloud"
component {
type = "builder"
name = "Hetzner Cloud"
slug = "hcloud"
}
}
Loading

0 comments on commit f20c6a8

Please sign in to comment.