* mapstructure-to-hcl2: when we see a map generate an attribute spec and not a block spec
this will alow to do
tags = {
key = "value"
}
instead of
tags {
key = "value"
}
This will also enable using variables directly for those tags
* generate code
* update tests
This function can be used to check if a Provisioner has been marked for testing within the ACC_TEST_PROVISIONERS environment variable.
While testing I found that the shell acceptance test were also running when trying to run powershell tests.
Before change
```
⇶ ACC_TEST_BUILDERS=amazon-ebs ACC_TEST_PROVISIONERS=powershell go test -v ./provisioner/shell/... -timeout=1h
=== RUN
TestShellProvisioner/testing_amazon-ebs_builder_against_shell_provisioner
2020/04/06 15:18:12 ui: amazon-ebs: output will be in this color.
2020/04/06 15:18:12 ui:
2020/04/06 15:18:12 Build debug mode: false
2020/04/06 15:18:12 Force build: false
2020/04/06 15:18:12 On error:
2020/04/06 15:18:12 Preparing build: amazon-ebs
2020/04/06 15:18:12 Waiting on builds to complete...
2020/04/06 15:18:12 Starting build run: amazon-ebs
2020/04/06 15:18:12 Running builder: amazon-ebs
```
After changes
```
⇶ ACC_TEST_BUILDERS=amazon-ebs ACC_TEST_PROVISIONERS=powershell go test -v ./provisioner/shell/... -timeout=1h
--- SKIP: TestShellProvisioner (0.00s)
provisioners.go:88: Provisioner "shell" not defined in ACC_TEST_PROVISIONERS
```
This follows #8232 which added the code to generate the code required to parse
HCL files for each packer component.
All old config files of packer will keep on working the same. Packer takes one
argument. When a directory is passed, all files in the folder with a name
ending with “.pkr.hcl” or “.pkr.json” will be parsed using the HCL2 format.
When a file ending with “.pkr.hcl” or “.pkr.json” is passed it will be parsed
using the HCL2 format. For every other case; the old packer style will be used.
## 1. the hcl2template pkg can create a packer.Build from a set of HCL (v2) files
I had to make the packer.coreBuild (which is our one and only packer.Build ) a public struct with public fields
## 2. Components interfaces get a new ConfigSpec Method to read a file from an HCL file.
This is a breaking change for packer plugins.
a packer component can be a: builder/provisioner/post-processor
each component interface now gets a `ConfigSpec() hcldec.ObjectSpec`
which allows packer to tell what is the layout of the hcl2 config meant
to configure that specific component.
This ObjectSpec is sent through the wire (RPC) and a cty.Value is now
sent through the already existing configuration entrypoints:
Provisioner.Prepare(raws ...interface{}) error
Builder.Prepare(raws ...interface{}) ([]string, error)
PostProcessor.Configure(raws ...interface{}) error
close#1768
Example hcl files:
```hcl
// file amazon-ebs-kms-key/run.pkr.hcl
build {
sources = [
"source.amazon-ebs.first",
]
provisioner "shell" {
inline = [
"sleep 5"
]
}
post-processor "shell-local" {
inline = [
"sleep 5"
]
}
}
// amazon-ebs-kms-key/source.pkr.hcl
source "amazon-ebs" "first" {
ami_name = "hcl2-test"
region = "us-east-1"
instance_type = "t2.micro"
kms_key_id = "c729958f-c6ba-44cd-ab39-35ab68ce0a6c"
encrypt_boot = true
source_ami_filter {
filters {
virtualization-type = "hvm"
name = "amzn-ami-hvm-????.??.?.????????-x86_64-gp2"
root-device-type = "ebs"
}
most_recent = true
owners = ["amazon"]
}
launch_block_device_mappings {
device_name = "/dev/xvda"
volume_size = 20
volume_type = "gp2"
delete_on_termination = "true"
}
launch_block_device_mappings {
device_name = "/dev/xvdf"
volume_size = 500
volume_type = "gp2"
delete_on_termination = true
encrypted = true
}
ami_regions = ["eu-central-1"]
run_tags {
Name = "packer-solr-something"
stack-name = "DevOps Tools"
}
communicator = "ssh"
ssh_pty = true
ssh_username = "ec2-user"
associate_public_ip_address = true
}
```
* Move setting of default EnvVarFormat to the Prepare function
* Add generated hcl2 structure for the updated Shell provisioner config
* Move `EnvVarFormat` field to shared common shell type
* Add description for the `env_var_format` parameter
* Update `env_var_format` when used with `use_env_var_file`
It is simply the best/simplest solution and trying to prevent users from passing and integer here would be like opening a can of worms. Because:
* we cannot make mapstructure validate our duration string ( with an UnmarshalJSON func etc.)
* we cannot make mapstructure spit a string instead of a duration and packer will decode-encode-decode config.
* the hcl2 generated code asks for a string, so this will be enforced by default.
* I had to contextualise Communicator.Start and RemoteCmd.StartWithUi
NOTE: Communicator.Start starts a RemoteCmd but RemoteCmd.StartWithUi will run the cmd and wait for a return, so I renamed StartWithUi to RunWithUi so that the intent is clearer.
Ideally in the future RunWithUi will be named back to StartWithUi and the exit status or wait funcs of the command will allow to wait for a return. If you do so please read carrefully https://golang.org/pkg/os/exec/#Cmd.Stdout to avoid a deadlock
* cmd.ExitStatus to cmd.ExitStatus() is now blocking to avoid race conditions
* also had to simplify StartWithUi
this regroups the calls of tmp func calls into one package.
the tmp pkg allows to store tmp files under a common directory for easier managment
Squashed commit of the following:
commit 74b674c015
Merge: fc94b571466001525d
Author: Matthew Patton <mpatton@enquizit.com>
Date: Fri Nov 2 02:02:38 2018 -0400
Merge branch 'remove_TMPDIR_docs' of github.com:tb3088/packer into remove_TMPDIR_docs
commit fc94b57142
Author: Matthew Patton <mpatton@enquizit.com>
Date: Fri Nov 2 01:42:38 2018 -0400
update tests to honor configured temporary directory
commit 5a562359f4
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 18:52:38 2018 -0400
sync straggler to refactor. implement tests at packer/configfile instead of buried in docker.
commit 9d5a4a0935
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 15:39:46 2018 -0400
insert URL to GoLang API for os.TempDir()
commit fbae4c2e05
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 07:41:29 2018 -0400
revise documentation to match code
commit 3590fae8bd
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 07:21:59 2018 -0400
refacter config_file. replace all hard-coded os.TempDir with wrapper
commit d5c5306a97
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 20:11:36 2018 -0400
close massive file overwrite hole with TempDir
commit 0a72297da8
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 01:06:00 2018 -0400
adjust var declaration scope
commit 20f68228b6
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 00:54:35 2018 -0400
use mktemp() equivalent to create temporary directory
commit c73ebe3d83
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 20:40:58 2018 -0400
remove extraneous variable declaration, fix FOR loop
commit 63549b8bd7
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 19:30:44 2018 -0400
match styistic convension with rest of docs
commit 9761010749
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 19:08:39 2018 -0400
revert dangling config file change
commit 95159afbc0
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Fri Dec 29 23:53:43 2017 -0500
replace invalid TMPDIR variable wth PACKER_TMP_DIR.
update ConfigTmpDir() to try common temporary paths first and
only write to configDir() as a last resort.
commit 66001525d7
Author: Matthew Patton <mpatton@enquizit.com>
Date: Fri Nov 2 01:42:38 2018 -0400
update tests to honor configured temporary directory
commit e9b6adefea
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 18:52:38 2018 -0400
sync straggler to refactor. implement tests at packer/configfile instead of buried in docker.
commit 852113ed07
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 15:39:46 2018 -0400
insert URL to GoLang API for os.TempDir()
commit 54add38d1d
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 07:41:29 2018 -0400
revise documentation to match code
commit 6b5b8f6d4e
Author: Matthew Patton <mpatton@enquizit.com>
Date: Thu Nov 1 07:21:59 2018 -0400
refacter config_file. replace all hard-coded os.TempDir with wrapper
commit c22092c601
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 20:11:36 2018 -0400
close massive file overwrite hole with TempDir
commit 7a73045091
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 01:06:00 2018 -0400
adjust var declaration scope
commit 0f2933adb6
Author: Matthew Patton <mpatton@enquizit.com>
Date: Wed Oct 31 00:54:35 2018 -0400
use mktemp() equivalent to create temporary directory
commit d74839ede0
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 20:40:58 2018 -0400
remove extraneous variable declaration, fix FOR loop
commit eb65416619
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 19:30:44 2018 -0400
match styistic convension with rest of docs
commit acaa2b31ed
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 19:08:39 2018 -0400
revert dangling config file change
commit e573fde668
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Fri Dec 29 23:53:43 2017 -0500
replace invalid TMPDIR variable wth PACKER_TMP_DIR.
update ConfigTmpDir() to try common temporary paths first and
only write to configDir() as a last resort.
commit 39a9874afc
Merge: 8a413cfe83315812c2
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Oct 30 18:19:26 2018 -0400
Merge branch 'master' of https://github.com/hashicorp/packer into prestine
commit 8a413cfe83
Merge: e07491de54e14710a6
Author: Matthew Patton <mpatton@enquizit.com>
Date: Mon Oct 1 20:18:10 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit e07491de59
Merge: 42610a35da1fa35dff
Author: Matthew Patton <mpatton@enquizit.com>
Date: Tue Aug 21 13:26:19 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit 42610a35d5
Merge: 5298142da0d63cf7bc
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Tue Jun 19 22:45:05 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit 5298142da6
Merge: 7bb110bc79d9736552
Author: Matthew Patton <mpatton@enquizit.com>
Date: Mon Jun 11 15:10:09 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit 7bb110bc74
Merge: a61c869ca6189d66e7
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Wed May 9 23:41:22 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit a61c869ca7
Merge: 098101dd94be5f072c
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Fri May 4 10:13:04 2018 -0400
Merge remote-tracking branch 'upstream/master' into prestine
commit 098101dd99
Merge: fefaf0fa6554b2b4a5
Author: Matthew Patton <matthew.patton@itgfirm.com>
Date: Tue May 1 20:52:30 2018 -0400
Merge branch 'EOL-handling' into prestine
Co-Authored-By: Matthew Patton <pattonme@yahoo.com>