packer-cn/common
Adrien Delorme 0785c2f6fc
build using HCL2 (#8423)
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
}
```
2019-12-17 11:25:56 +01:00
..
adapter allow a provisioner to timeout 2019-04-08 20:09:21 +02:00
bootcommand Change back to make sure all durations are a time.Duration 2019-10-31 16:12:07 +01:00
chroot Move common steps together 2019-10-24 04:21:46 +00:00
filelock Shadow the flock pkg & add a noop filelock so that at least the solaris binary can be built 2019-04-30 16:01:23 +02:00
iochan use our own copy of iochan.LineReader 2019-04-11 14:25:24 +02:00
json common/json: add Unmarshal with method with syntax errors 2013-08-09 16:50:24 -07:00
net configure_port_test.go: don't panic when error is not what we expected 2019-09-05 17:03:54 +02:00
powershell ask for VM by name to reduce looping. 2019-11-08 16:20:03 -08:00
random random: optimize allocation & simplify loop 2018-09-05 10:27:02 +02:00
retry Revert "Backoff.Linear: panic when InitialBackoff > MaxBackoff" 2019-06-11 12:53:06 +02:00
shell use shell struct in shell-local provisioner and post-processor. 2019-11-21 16:47:29 -08:00
shell-local build using HCL2 (#8423) 2019-12-17 11:25:56 +01:00
shutdowncommand Change back to make sure all durations are a time.Duration 2019-10-31 16:12:07 +01:00
template introduce the clean_resource_name to clean image names and deprecate the old ones 2019-04-03 11:25:51 +02:00
test-fixtures Use the hashicorp/go-getter to download files 2019-03-13 12:11:58 +01:00
uuid Simplifies the implementation of common/uuid 2013-10-23 23:05:02 +01:00
command.go Move CommandWrapper & ShellCommand to common 2019-10-24 04:06:29 +00:00
config.go Use the hashicorp/go-getter to download files 2019-03-13 12:11:58 +01:00
floppy_config.go Fix floppy doc markdown typo (#8458) 2019-12-06 14:12:11 +01:00
floppy_config_test.go tests actually test the floppies 2016-07-27 21:59:21 +01:00
http_config.go document HTTPConfig from struct 2019-06-14 11:52:38 +02:00
http_config_test.go use port as ints 2019-03-19 15:01:12 +01:00
iso_config.go common: collect dropped error 2019-10-23 13:02:08 -07:00
iso_config_test.go common: fix dropped errors and warnings in test 2019-09-20 05:06:25 -07:00
multistep_debug.go fix imports 2018-01-24 17:09:17 -08:00
multistep_runner.go implement abort logic and printing for the askstep implementation as well 2019-07-26 12:24:03 -07:00
packer_config.go replace scrubconfig with packer.LogSecretFilter.Set 2018-08-20 15:35:55 -07:00
retry.go builder/virtualbox-ovf retry removing VM. 2017-10-25 10:27:33 -07:00
retry_test.go post-processor/vagrant-cloud: try upload once 2017-06-12 17:34:32 -07:00
step_cleanup_temp_keys.go allow a provisioner to timeout 2019-04-08 20:09:21 +02:00
step_create_floppy.go use printf for logging 2019-09-13 01:53:42 +03:00
step_create_floppy_test.go Merge pull request #8310 from alrs/resuscitate-common-floppy-tests 2019-11-04 15:50:46 +01:00
step_download.go pick up dropped error 2019-11-20 16:16:33 -08:00
step_download_test.go add test for local fs download 2019-07-22 09:17:48 -07:00
step_http_server.go use port as ints 2019-03-19 15:01:12 +01:00
step_output_dir.go rename interpolation context from ctx to ictx and contexts to ctx to avoid conflicts 2019-04-03 15:56:15 +02:00
step_output_dir_test.go deduplicate step_output_dir and move to common folder 2019-01-11 15:06:36 -08:00
step_provision.go rename option to error-cleanup-privisoner, which I think is clearer 2019-09-25 13:43:29 -07:00
step_provision_test.go fix imports 2018-01-24 17:09:17 -08:00
terminal.go Moved the progress bar out of packer.Ui and unlinked it out of all the packer.Ui implementations. Split up the terminal-related functions into a separate terminal.go and calculate the progress bar width by traversing through packer.Ui to avoid the issue with github.com/ugorji/go/codec serializing private members (or unsafe pointers) of structs. Shuffled some arguments around in getConsoleScreenBufferInfo in common/terminal_windows.go so that the interface forces the user to correctly declare a _CONSOLE_SCREEN_BUFFER_INFO type. 2018-08-20 21:55:18 -05:00
terminal_posix.go Moved the progress bar out of packer.Ui and unlinked it out of all the packer.Ui implementations. Split up the terminal-related functions into a separate terminal.go and calculate the progress bar width by traversing through packer.Ui to avoid the issue with github.com/ugorji/go/codec serializing private members (or unsafe pointers) of structs. Shuffled some arguments around in getConsoleScreenBufferInfo in common/terminal_windows.go so that the interface forces the user to correctly declare a _CONSOLE_SCREEN_BUFFER_INFO type. 2018-08-20 21:55:18 -05:00
terminal_test.go Moved the progress bar out of packer.Ui and unlinked it out of all the packer.Ui implementations. Split up the terminal-related functions into a separate terminal.go and calculate the progress bar width by traversing through packer.Ui to avoid the issue with github.com/ugorji/go/codec serializing private members (or unsafe pointers) of structs. Shuffled some arguments around in getConsoleScreenBufferInfo in common/terminal_windows.go so that the interface forces the user to correctly declare a _CONSOLE_SCREEN_BUFFER_INFO type. 2018-08-20 21:55:18 -05:00
terminal_windows.go Moved the progress bar out of packer.Ui and unlinked it out of all the packer.Ui implementations. Split up the terminal-related functions into a separate terminal.go and calculate the progress bar width by traversing through packer.Ui to avoid the issue with github.com/ugorji/go/codec serializing private members (or unsafe pointers) of structs. Shuffled some arguments around in getConsoleScreenBufferInfo in common/terminal_windows.go so that the interface forces the user to correctly declare a _CONSOLE_SCREEN_BUFFER_INFO type. 2018-08-20 21:55:18 -05:00