Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mikeschinkel/packer-vars
Repo to illustrate a pain when using HashiCorp's Packer for at least one use-case
https://github.com/mikeschinkel/packer-vars
packer packer-builder packer-template packer-templates warnings
Last synced: about 1 month ago
JSON representation
Repo to illustrate a pain when using HashiCorp's Packer for at least one use-case
- Host: GitHub
- URL: https://github.com/mikeschinkel/packer-vars
- Owner: mikeschinkel
- License: unlicense
- Created: 2022-11-04T04:32:34.000Z (about 2 years ago)
- Default Branch: working
- Last Pushed: 2022-11-04T05:34:08.000Z (about 2 years ago)
- Last Synced: 2024-10-19T05:15:09.744Z (2 months ago)
- Topics: packer, packer-builder, packer-template, packer-templates, warnings
- Language: HCL
- Homepage:
- Size: 12.7 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Packer Vars Example
## Or, why does it have to be this hard?
This repo was created to provide an example to illustrate my comments on this Github issue for @nywilken who so graciously offered to understand the use-case and possibly even address the difficulty of my use-case.
## Use-case
Basically the use-case did the following, **each with its own `.pkr.hcl` file**. This process assumes an 'ova-builder` VM on VMware vCenter that will have been created by a different Packer template.| Step | Description |
|-----------|------------------------------------------------------------------------------|
| `setup` | Ensures the 'ova-builder` VM is running and the vCenter has required config. |
| `clean` | Ensures the VM is in a clean state, e.g. prior artifacts deleted. |
| `app` | Build a GoLang app on the VM. |
| `iso` | Builds a Linux ISO containing the GoLang App. |
| `upload` | Uploads the build ISO to a vCenter Datastore. |
| `install` | Installs the ISO to create a new 'App' VM on vCenter. |
| `export` | Exports the App VM back down to 'ova-builder' as an OVA file. |
| `jfrog` | Uploads the resulant OVA to jFrog Artifactory. |The above is even a simplification but is hopefully detailed enough to give a clear picture of the process.
## Example
Aside from the code being proprietary and owned by a former client it would be far too complex to serve as a clarifying example, so I create the simplest example I could to illustrate the problem.This example has two (2) steps: `step1` and `step2` and their respective Packer templates are `./step1/step1.pkr.hcl` and `./step2/step2.pkr.hcl`. The example also has a shared `/vars.json` which contains shared vars for logging into SSH and one var for each step, `step1_var=foo` and `step2_var=bar`, respectively.
All these steps do is they both use the null builder to reach into a Linux machine via SSH and then run an inline script echoing their variable's value.
### Running the working example
To see this example work:1. Make sure you have Packer installed _(of course)_,
2. Clone this repo to a macOS or Linux machine.
3. Ensure you are in the `working` branch, which is the repo's default.
4. Change the `ssh_*` properties in `./vars.json` to point to a host, user and password of a computer or VM you can SSH into, and then
4. Run `make`## The Problem
The problem is that Packer requires you to declare `step2_var` in `./step1/step1.pkr.hcl` even though /step1/step1.pkr.hcl` never references or otherwise uses `step2_var`, — as the following table illustrates:| Step | Packer Template | Template Uses
property in
`./vars.json` | Template does
NOT use: |
|---------|-------------------------|-----------------------------------------------|---------------------------|
| `step1` | `./step1/step1.pkr.hcl` | `step1_var=foo` | `step2_var` |
| `step2` | `./step2/step2.pkr.hcl` | `step2_var=bar` | `step1_var` |### Running the "warnings" example
To experience the problem this repo is trying to illustrate:
1. Make sure performed the steps for the `working` example first.
2. Checkout the `warnings` branch.
2. Run `make`You should get the following output; notice the **warnings**:
```
packer build -force -var-file="./vars.json" "step1"
Warning: Undefined variableA "step2_var" variable was set but was not found in known variables. To declare
variable "step2_var", place this block in one of your .pkr files, such as
variables.pkr.hclnull.step2: output will be in this color.
==> null.step2: Using SSH communicator to connect: iso-builder.local
==> null.step2: Waiting for SSH to become available...
==> null.step2: Connected to SSH!
==> null.step2: Provisioning with shell script: /var/folders/fg/1dfmwyrx3wxbhj5lbdqpt7bw0000gn/T/packer-shell1383820945
null.step2: We are running step 'foo'
Build 'null.step2' finished after 658 milliseconds 319 microseconds.==> Wait completed after 658 milliseconds 394 microseconds
==> Builds finished. The artifacts of successful builds are:
--> null.step2: Did not export anything. This is the null builder
packer build -force -var-file="./vars.json" "step2"
Warning: Undefined variableA "step1_var" variable was set but was not found in known variables. To declare
variable "step1_var", place this block in one of your .pkr files, such as
variables.pkr.hclnull.step2: output will be in this color.
==> null.step2: Using SSH communicator to connect: iso-builder.local
==> null.step2: Waiting for SSH to become available...
==> null.step2: Connected to SSH!
==> null.step2: Provisioning with shell script: /var/folders/fg/1dfmwyrx3wxbhj5lbdqpt7bw0000gn/T/packer-shell2044896123
null.step2: We are running step 'bar'
Build 'null.step2' finished after 373 milliseconds 507 microseconds.==> Wait completed after 373 milliseconds 568 microseconds
==> Builds finished. The artifacts of successful builds are:
--> null.step2: Did not export anything. This is the null builder```
## The Desired Solution
Simply provide a command-line switch that will suppress those warnings.
## Epilogue
I tested this in Packer `1.18.3` but I _swear_ that earlier versions of Packer threw errors and failed to buiild instead of throwing warnings. Or at least that is what I remember.
So a warning is not as bad as an error, and if it never threw an error and always provided a warning then, as they say, my bad.
But still, a command-line switch to suppress would be much appreciated.