Commit Graph

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