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.
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.
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.
To see this example work:
- Make sure you have Packer installed (of course),
- Clone this repo to a macOS or Linux machine.
- Ensure you are in the
working
branch, which is the repo's default. - 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 - Run
make
The problem is that Packer requires you to declare step2_var
in ./step1/step1.pkr.hcl
even though /step1/step1.pkr.hclnever 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 |
To experience the problem this repo is trying to illustrate:
- Make sure performed the steps for the
working
example first. - Checkout the
warnings
branch. - Run
make
You should get the following output; notice the warnings:
packer build -force -var-file="./vars.json" "step1"
Warning: Undefined variable
A "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.hcl
null.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 variable
A "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.hcl
null.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
Simply provide a command-line switch that will suppress those warnings.
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.