Commit Graph
286 Commits
Author SHA1 Message Date
Lucas Bajolet 61c810e720 command: rework HCP-related error messages
The HCP error messages were sometimes a bit terse in terms of the
information it bubbles up to the user.
This made them useful for people who already knew what to look for, but
newcomers would almost certainly be lost because of the lack of
information in those.

To improve on this situation, we reword most of those error messages in
this commit.
2022-10-21 10:32:45 -04:00
Lucas Bajolet c0e7e7bd3c hcl2: report error on build without sources
When a template describes a build block without a source reference, the
build should be considered invalid as we won't have a CoreBuild produced
as a result of the need to have both.

In current versions of Packer, this will produce an error message
hinting that nothing will happen because of the lack of either build or
source block.

This commit takes the defined block, and points out to it as missing a
source block as being the reason why nothing is happening, making it
clearer what is required for an HCL2 build to be processed.
2022-09-30 15:39:27 -04:00
Lucas Bajolet 61c56e161c hcl2: add example for undefined variable set warn
When a variable is set in a pkrvars file, but isn't defined, an error
message is output, but does not deliver an example of what is expected
by Packer in order to complete a build.

To remedy that, we improve the error message by giving an example of
variable block to include in the build template.
2022-09-28 14:51:28 -04:00
Eng Zer Jun f5ec0f1c57 test: use T.Setenv to set env vars in tests
This commit replaces `os.Setenv` with `t.Setenv` in tests. The
environment variable is automatically restored to its original value
when the test and all its subtests complete.

Reference: https://pkg.go.dev/testing#T.Setenv
Signed-off-by: Eng Zer Jun <[email protected]>
2022-09-20 14:54:20 -04:00
Lucas Bajolet a298617ecb command/build: warn and exit when nothing to build
When a `packer build' is run on a config that does not define anything
to be built, the process would run normally, and only state that no
artifacts were produced after builds were run successfully.

This is misleading as we reach the end of the command without having a
proper warning that nothing was even attempted to be built.

This commit adds a warning when that happens, and leaves immediately
after.
2022-09-13 15:58:28 -04:00
Lucas Bajolet 7cd095062a parser: extract HCP logic out of the HCL parser
Before this commit, some HCP-related logic was embedded in the parser,
making all of it common to all commands.

This complexifies the logic as some parts rely on the template being in
a HCP-valid environment, and the datasources need to be evaluated in
order for some operations to be executed.

To simplify this and avoid those pitfalls, we move this logic to its own
set of functions that will be performed after the parsing is done, on
any valid HCL2 or JSON template.
2022-08-12 11:54:21 -04:00
Sylvia Moss 5c3d5c1295 Send channel id to HCP Packer (#11861) 2022-07-29 15:15:29 +02:00
Lucas Bajolet 6ab16561b5 hcl2: fix crash on malformed overrides (#11881)
When an override block is either not an object, or if one of its
contents are not an object, Packer would crash trying to forcefully
cast the cty.Value to a cty.Collection.

To avoid this behaviour, we add extra checks that return hcl.Diagnostics
when they fail.
2022-07-20 14:30:49 -04:00
Lucas Bajolet 6794c6053a hcl2template: only iterate on known HCP datasource (#11883)
When we try to validate a build that contains references to
hcp_packer_image, the data is not fetched, and the value is therefore
unknown.

However, during the decoding phase for the build blocks, we attempt to
fetch the ancestry information for the current build, from the
information previously fetched from HCP.

Since we're validating, there's no way this is set, and attempting to
cast without checking causes Packer to crash on the conversion.

To avoid this, we only attempt this conversion if the value is known.

Closes #11870
2022-07-20 10:46:50 -04:00
Wilken Rivera 846e4e6443 Associate Packer build to HCP Packer parent iteration (#11832)
* Add support for  data source lookup

* Update failing test

* Fix typo for HCP_PACKER_BUILD_FINGERPRINT env in test
* Add test Fingerprint where needed; failing tests were not showing
  because they are properly set for acctest

* Update to use BuildContext
2022-06-10 11:39:56 -04:00
Adrien DelormeandWilken Rivera e03ad29ca0 Sanitize var code (#11566)
* evaluateLocalVariables: modify code for readability and some (not benchmarked) perfs

* Make default input variable type the DynamicPseudoType

This should be the default, and avoids a panic. This type can represent situations where a type is not yet known. Its meaning is undefined in cty.

* do not take Empty types from default value

* Update types.variables.go

Co-authored-by: Wilken Rivera <[email protected]>
2022-02-14 11:00:41 -05:00
Wilken Rivera 2ad15617cc core/hcl2: Fix issue preventing builds from pausing between provisioners when the --debug argument has been passed (#11537)
* Update HCL2 PackerConfig to call SetDebug mode for CoreBuild when --debug flag is passed

```
~>  packer build --debug /tmp/source.pkr.hcl
Debug mode enabled. Builds will not be parallelized.
null.example: output will be in this color.

==> null.example: Pausing after run of step 'StepConnect'. Press enter to continue.
==> null.example: Pausing before the next provisioner . Press enter to continue.
==> null.example: Running local shell script: /var/folders/vz/rv7bk6v15211jxg8q801f7kw0000gq/T/packer-shell4149319610
    null.example: hi
==> null.example: Pausing before the next provisioner . Press enter to continue.
==> null.example: Running local shell script: /var/folders/vz/rv7bk6v15211jxg8q801f7kw0000gq/T/packer-shell3210691290
    null.example: hi 2
==> null.example: Pausing after run of step 'StepProvision'. Press enter to continue.
==> null.example: Pausing before cleanup of step 'StepProvision'. Press enter to continue.
==> null.example: Pausing before cleanup of step 'StepConnect'. Press enter to continue.
Build 'null.example' finished after 8 seconds 284 milliseconds.

==> Wait completed after 8 seconds 284 milliseconds

==> Builds finished. The artifacts of successful builds are:
--> null.example: Did not export anything. This is the null builder
```

* Add call to SetOnError, and SetForce
2022-02-03 09:03:11 -05:00
Adrien Delorme 5d17d7fe65 prevent duplicate local block creation (#11534)
* prevent duplicate local block creation

* remove duplicate locals block bug

* local variables: first get block, then decode it + simplify retry loop

* Update types.packer_config.go

* revert go get of hcl lib
2022-01-28 13:21:53 -05:00
teddylear 1d01ad3651 feat: print all locals errors when there is a circular error (#11527) 2022-01-27 14:40:45 +01:00
Wilken Rivera 760169b34e Move to using ectx to preload build names (#11432)
* Add basic post-processor test

Closes #11411
2021-12-07 12:24:12 +01:00
Wilken Rivera 4a0fbd911a Add support for variable interpolation to hcp_packer_registry and build blocks. (#11421)
* Add variable interpolation support to hcp_packer_registry block

* Add tests for variable interpolation in hcp_packer_registry block

* Add variable interpolation support to the build block (#11425)

* Add simple test to build command
2021-12-01 11:35:51 +01:00
Wilken RiveraandAdrien Delorme 06b35c39de hcp packer registry build labels (#11401)
* Add basic support for build_labels argument

* Update support for build_labels configuration argument

* Update complete test-fixture with a build_labels configuration
* Add test for deprecated labels argument
* Add deprecation for hcp_packer_registry.labels

When using the now deprecated labels argument of the new bucket_labels a
Warning will be presented to the user.

```
~>  HCP_PACKER_BUILD_FINGERPRINT=356786543567865456789656789 packer
build source.pkr.hcl
Warning: the argument hcp_packer_registry.labels has been deprecated and will be removed in a future release; please use hcp_packer_registry.bucket_labels
```

When trying to use both bucket_labels and labels together an error is
presented to the user.
```
~>  HCP_PACKER_BUILD_FINGERPRINT=ss6786543567865456789656789 packer
build source.pkr.hcl
Error: hcp_packer_registry.labels and hcp_packer_registry.bucket_labels are mutely exclusive; please use the recommended argument hcp_packer_registry.bucket_labels

  on source.pkr.hcl line 17:
    (source code not available)

```

* Update documentation for build_labels

* Apply suggestions from code review

Co-authored-by: Adrien Delorme <[email protected]>

* Update hcl2template/types.build.hcp_packer_registry.go

Co-authored-by: Adrien Delorme <[email protected]>
2021-11-18 09:40:08 +01:00
Adrien Delorme 710d109c55 HCL2: fix a crash when an HCL2 component is nil after a misconfiguration (#11382)
* add test for crash

* fix

* show more precise error message when parse of a provisioner fails

* Revert "fix"

This reverts commit fc88e89fbb.

* add better severity
2021-11-04 10:08:27 -04:00
Megan Marsh e3719dd8a4 Merge pull request #11319 from hashicorp/add_iteration_id
Add iteration
2021-10-11 13:18:10 -07:00
Megan Marsh b763b79d9f implement contextual variable packer.iteration_id 2021-10-11 10:55:44 -07:00
Megan Marsh e7ba4d390d Merge pull request #11318 from hashicorp/fix_source_accessor
fix source accessor to allow use in source block
2021-10-11 10:40:34 -07:00
Megan Marsh 76c1059680 add tests, and simplify code 2021-10-11 10:29:36 -07:00
Adrien Delorme 254e020b08 Allow to use build variables in a post processor (#11323)
* hcl: add test to verify that build.name can be used in a pp

* allow to use build vars in post processors
2021-10-11 10:17:34 -04:00
Adrien Delorme 3135714465 rename all things 'inexist[e|a]nt' to 'nonexistent' & fix tests (#11325)
+ a typo
2021-10-11 15:48:51 +02:00
Kerim Satirli bc6f1e36e6 Fixes typos in docs (#11322)
* fixes typos in base docs

* fixes typos in example code

* fixes typos in website docs

* fixes link to Terraform provider

* fixes typo in function name
2021-10-11 10:19:49 +02:00
Megan Marsh 961d72bb37 add iteration_id to evaluation context. 2021-10-08 14:06:17 -07:00
Megan Marsh cdde5cbbe2 fix source accessor to allow use in source block 2021-10-08 11:33:52 -07:00
Wilken Rivera b10df3abb7 Update HCP Packer registry image extraction, validation, publishing logic for registry capable plugins (#11221)
* Update handling of registry artifacts

This change uses the github.com/hashicorp/packer-plgin-sdk/packer/registryimage for querying
Artifact State for HCP Registry Image metadata. To handle the conversion
of the RPC response, mapstructure was introduced to conversion state
data into an registryimage.Image before publishing to a image bucket.

* Update to use registry image from packersdk

* Rename internal registry service pkg

* Update vendored plugins to latest version

* The latest release of Amazon, GoogleCompute, and Azure have support
  for publishing images to the HCP Packer registry.
2021-09-13 21:07:54 -04:00
Megan Marsh 6c7aadf08f return diags earlier 2021-09-07 09:26:53 -07:00
Megan Marsh 295bac0c5f remove unnecessary complexity 2021-09-07 09:21:00 -07:00
Megan Marsh 20a83dff4f remove unneeded check. 2021-09-07 07:47:39 -07:00
Megan Marsh 48de1fc7da allow datasources to use other datasources
create a null data source for testing. We can choose to document if we want to, but it's a convenience for us

add a test to catch cyclic datasource dependency, update tests to include out of order data sources, and update the code to clean up the returned diagnostics generated from the recursive evaluation

PR review comments
2021-09-03 16:10:39 -07:00
Megan Marsh 2d16da10e7 Merge pull request #11219 from hashicorp/rename_slug_to_bucket
make user-facing name for slug be bucket_name
2021-08-27 09:36:30 -07:00
Adrien Delorme eb8e302941 hcl2_upgrade: special case: vsphere fix (#11216)
* fix typo

* hcl2_upgrade: special case linux_options and network_interface to block instead of maps

* Update hcl2_upgrade_test.go

* Update hcl2_upgrade_test.go

remove unused code

* hcl2_upgrade: support strftime too (#11220)

* hcl2_upgrade strftime function
* create legacy_strftime.mdx
2021-08-25 14:20:08 +02:00
Megan Marsh 4c22169c90 more test fix 2021-08-23 15:29:58 -07:00
Megan Marsh 2dd8c0dd26 fix tests 2021-08-23 14:18:27 -07:00
Megan Marsh da301ab844 make user-facing name for slug be bucket_name 2021-08-23 14:00:21 -07:00
Wilken Rivera e8b5b4b516 Fix {{packer_version}} interpolation regression (#11200)
* Add Packer version to main context at variable interpolation

Test Results Before Change
```
=== RUN   TestCoreBuild_packerVersion
    testing.go:30: err: template: root:1:2: executing "root" at <packer_version>: error calling packer_version: packer_version not available
--- FAIL: TestCoreBuild_packerVersion (0.00s)
```

Test Results After Change
```
=== RUN   TestCoreBuild_packerVersion
--- PASS: TestCoreBuild_packerVersion (0.00s)
```

* Add packer_core_version to interpolation context for HCL configs

Test Results Before Change
```
=== RUN   TestParse_build/provisioner_with_packer_version_interpolation
    common_test.go:109: Parser.getBuilds() unexpected diagnostics. testdata/build/provisioner_packer_version_interpolation.pkr.hcl:8,5-24: Failed preparing provisioner-block
 "shell" ""; render 'slice_string': template: root:1:2: executing "root" at <packer_version>: error calling packer_version: packer_version not available in:

        {{packer_version}}
--- FAIL: TestParse_build (0.01s)
```

Test Results After Change
```
--- PASS: TestParse_build (0.02s)
--- PASS: TestParse_build/provisioner_with_packer_version_interpolation (0.00s)
```
2021-08-12 10:55:32 +02:00
a534c743cf HCP Packer registry enabled Packer client (#11154)
* Add working registry pkg

* Add custom error for handling the loading of PAR environment variables

* Working Publish to Build, with proper error handling for bucket names

* Update hcp-sdk-go to use branch instead of mod replace directive

* Update Packer build status configuration

* Add support for HCP_PACKER_BUILD_FINGERPRINT env

* Add support for publishing one or more PARtifacts from a single build

* add git shas to this branch

* Add ability to set provider name if available

* Add working RegistryBuilder type

* Add RegistryPostProcessor as wrapper post-processor

* When in PAR mode a empty RegistryPostProcessor is added to the end of
  the post-processor list to publish all final image data.

* Add support for updating a build from PAR that is not in a DONE state

* Fix a small issue with creation the initial builds for an empty
  iteration.

* Add PAR URL to post-processor display

* Implement hcp_packer_registry block (#11168)

* Update vendored Amazon plugin to v1.0.1-dev

* Fix panic when running a Packer registry build in a clean directory

* Remove the publishing of post-processor metadata from the registry
  post-processor.

* Remove metadata add from registry_builder

* Update registry builder to skip a build that was found to be DONE

Co-authored-by: Megan Marsh <[email protected]>
Co-authored-by: Sylvia Moss <[email protected]>
2021-08-05 09:25:19 -04:00
Adrien Delorme 9d0193ac14 add possibility to use variables everywhere in post-processor blocks (#11094)
feature + tests.

Including in:
* name
* only
* except
* keep_input_artifact

Example file:

```hcl
source "null" "example1" {
  communicator = "none"
}

source "null" "example2" {
  communicator = "none"
}

locals {
  except = "null.example1"
}

variable "only" {
  default = "null.example1"
}

build {
  sources = ["source.null.example1", "source.null.example2"]
  post-processor "shell-local" {
    except = [local.except]
    inline = ["echo first post-processor"]
  }

  post-processor "shell-local" {
    only   = [var.only]
    inline = ["echo second post-processor"]
  }
}
```
Ouput:
```shell-session
$ packer build foo.pkr.hcl
null.example1: output will be in this color.
null.example2: output will be in this color.

==> null.example1: Running post-processor:  (type shell-local)
==> null.example2: Running post-processor:  (type shell-local)
==> null.example2 (shell-local): Running local shell script: /var/folders/3k/2gb5ct4s7cncr52_jh2kz6cw0000gq/T/packer-shell201696062
==> null.example1 (shell-local): Running local shell script: /var/folders/3k/2gb5ct4s7cncr52_jh2kz6cw0000gq/T/packer-shell494781572
    null.example1 (shell-local): second post-processor
Build 'null.example1' finished after 61 milliseconds 432 microseconds.
    null.example2 (shell-local): first post-processor
Build 'null.example2' finished after 111 milliseconds 678 microseconds.

==> Wait completed after 111 milliseconds 714 microseconds
```

close #4895
2021-06-15 18:29:26 +02:00
Yoan Blanc 36a7b28b5f fix: print unchanged formatted file when using stdin (#11047)
Signed-off-by: Yoan Blanc <[email protected]>
2021-06-03 14:02:42 +02:00
Adrien Delorme 4be9dfd183 Say so when an only or an except option did not match anything (#11050)
* Say so when an only or an except option did not match anything
2021-06-03 13:50:34 +02:00
Sergio Conde Gómez f6f2469d4d fix: HCL "index" function now actually returns the index of the element (#11008) 2021-05-11 10:24:46 +02:00
Adrien Delorme bf939b7474 Update types.build.provisioners.go
if pause_before is invalid, that's an error
2021-04-26 17:37:24 +02:00
Adrien Delorme 87ba7258b3 Use packer-sdc in packer + remove mapstructure-to-hcl2 & struct-markdown (#10913)
* start using `go:generate packer-sdc struct-markdown`

* Update Makefile

remove @go install ./cmd/struct-markdown

* run go generate for struct-markdown

* use //go:generate packer-sdc mapstructure-to-hcl2

* run go generate for mapstructure-to-hcl2

* remove struct-markdown and mapstructure-to-hcl2

* vendor vendors
2021-04-16 11:52:03 +02:00
Adrien Delorme 03d79a2c39 HCL2 variables: split validation from getting value (#10843)
* HCL2 variables: split validation from getting value, to only

This way we do this only once and log this only once. The errors were being ignored anyways.

* Update types.variables_test.go
2021-03-30 14:58:26 -04:00
Adrien Delorme 77a29fc2f8 Allow to have dynamic blocks in a build block + tests (#10825)
This :
* allows to have a `build.dynamic` block
* add tests
* makes sure to show a correct message when a source was not found
  * display only name of source (instead of a weird map printout) 
  * use a "Did you mean %q" feature where possible 


Because dynamic blocks need all variables to be evaluated and available, I moved parsing of everything that is not a variable to "after" variables are extrapolated. Meaning that dynamic block get expanded in the `init` phase and then only we start interpreting HCL2 content.

After #10819 fix #10657
2021-03-30 15:53:04 +02:00
Adrien Delorme 0e3fcb589b Implicit required_plugin blocks (#10732)
* used components that don't have a required_plugin block will make Packer 'implicitly' require those. These components are manually selected and commented for now.
* add tests
 * docs
2021-03-24 11:31:39 +01:00
Wilken Rivera 5e17dbeff2 Fix up regex in test 2021-03-23 14:39:45 -04:00
Adrien Delorme ff01e6715a HCL2: add templatefile function (#10776)
* tests
* docs
2021-03-23 12:02:05 +01:00