37 Commits

Author SHA1 Message Date
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
Adrien Delorme
82c4b76639 [Builder|Build|PostProcessor|Provisioner|Hook]Server: context cancel using a RPC cancel method 2019-04-03 15:55:55 +02:00
Adrien Delorme
14048b1e11 Revert "WIP: go towards context cancelled rpc pkg"
This reverts commit e4609b4a6a4ba2ec76a45ad67d50d180f1a914f9.
2019-04-03 15:55:55 +02:00
Adrien Delorme
9e3a179c0d WIP: go towards context cancelled rpc pkg 2019-04-03 15:55:55 +02:00
Adrien Delorme
a4bf94dd3c change Builder to be passed a context for cancellation
we have to to give it to our hook
2019-04-03 15:55:55 +02:00
Adrien Delorme
9f82b75e57 Use the hashicorp/go-getter to download files
* removed packer.Cache and references since packer.Cache is never used except in the download step. The download step now uses the new func packer.CachePath(targetPath) for this, the behavior is the same.
* removed download code from packer that was reimplemented into the go-getter library: progress bar, http download restart, checksuming from file, skip already downloaded files, symlinking, make a download cancellable by context.
* on windows if packer is running without symlinking rights and we are getting a local file, the file will be copied instead to avoid errors.
* added unit tests for step_download that are now CI tested on windows, mac & linux.
* files are now downloaded under cache dir `sha1(filename + "?checksum=" + checksum) + file_extension`
* since the output dir is based on the source url and the checksum, when the checksum fails, the file is auto deleted.
* a download file is protected and locked by a file lock,
* updated docs
* updated go modules and vendors
2019-03-13 12:11:58 +01:00
Matthew Hooker
81522dced0
move packer to hashicorp 2017-04-04 13:39:01 -07:00
Orivej Desh
6762965696 Add -on-error command line argument to allow preserving artifacts on builder errors
Resolves #409
2016-09-16 12:15:00 +00:00
Mitchell Hashimoto
9ffa0b8e25 packer/rpc: no more muxconn 2014-09-02 14:23:06 -07:00
Mitchell Hashimoto
32536b25af packer/rpc: fix interface returns for msgpack [GH-1076] 2014-04-28 15:18:31 -07:00
Mitchell Hashimoto
43962ca31f packer/rpc: build updated to use new interface 2013-12-27 09:19:11 -07:00
Mitchell Hashimoto
74f018df2b packer/rpc: make newXWithMuxConn private 2013-12-19 17:35:32 -08:00
Mitchell Hashimoto
6aef114372 go fmt 2013-12-11 11:19:36 -08:00
Mitchell Hashimoto
ce2304c948 packer/rpc: remove unused methods 2013-12-10 13:26:07 -08:00
Mitchell Hashimoto
a8b056e939 packer/rpc: builds 2013-12-10 13:18:48 -08:00
Mitchell Hashimoto
a66f148ede packer/rpc: auto-incrementable ID for endpoints 2013-12-08 11:50:14 -08:00
Mitchell Hashimoto
0b61e50621 packer/rpc: implement new warnings interfaces 2013-11-02 22:40:06 -05:00
Mitchell Hashimoto
f85c9e4354 packer/rpc: set keep-alive on all RPC connections [GH-416] 2013-09-18 17:15:48 -07:00
Mitchell Hashimoto
3f0a268e1e packer, packer/rpc: Update Build interface to allow variable overrides 2013-08-09 15:57:07 -07:00
Jason A. Beranek
13c733a3db Add support for -force flag on builds [GH-119] 2013-07-11 23:43:23 -05:00
Mitchell Hashimoto
218692950b packer: Build can return multiple artifacts 2013-06-18 10:24:23 -07:00
Mitchell Hashimoto
a45c7fb0ea packer: Add SetDebug to Build objects 2013-06-14 12:22:19 -07:00
Mitchell Hashimoto
a35feebe70 packer: Build no longer takes Ui for Prepare 2013-06-13 10:08:31 -07:00
Mitchell Hashimoto
12cc8e98aa packer/rpc: less panics, more returning errors 2013-06-12 16:02:07 -07:00
Mitchell Hashimoto
d2023c69be packer/rpc: returning errors from builds works properly 2013-06-12 16:01:42 -07:00
Mitchell Hashimoto
db8aeaba40 packer, packer/rpc: Build/builders can return errors now 2013-06-12 15:58:02 -07:00
Mitchell Hashimoto
7b0000cd4c packer: Actually return if prepare of a build fails 2013-06-09 23:05:11 -07:00
Mitchell Hashimoto
62309cb6de Build/Builder take a Cache object now 2013-06-09 22:00:47 -07:00
Mitchell Hashimoto
30a061a855 packer: Build.Cancel 2013-06-03 16:03:08 -07:00
Mitchell Hashimoto
cb91ca72ac packer: Build.Prepare takes a UI 2013-05-22 16:20:40 -07:00
Mitchell Hashimoto
41a7fd45b9 packer: Return artifact from build 2013-05-21 22:38:41 -07:00
Mitchell Hashimoto
44bd56c3a8 go fmt 2013-05-10 17:01:24 -07:00
Mitchell Hashimoto
9600bf5b4b packer: Build.Name 2013-05-09 11:32:03 -07:00
Mitchell Hashimoto
587d359887 packer: Builder.Prepare can return an error 2013-05-09 10:54:42 -07:00
Mitchell Hashimoto
b9e3eb1ff7 packer/rpc: Get rid of the heavy server stuff 2013-05-05 17:38:50 -07:00
Mitchell Hashimoto
dbe5360262 Ability to get a net listener in a given port range 2013-05-04 13:17:22 -07:00
Mitchell Hashimoto
f0a09ffa6b Crazy things with RPC servers and stuff 2013-05-03 23:55:08 -07:00