Commit Graph

46 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 f555e7a9f2 allow a provisioner to timeout
* 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
2019-04-08 20:09:21 +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
Matthew Hooker 2d3b639c7b
don't need a waitgroup for uploading files 2017-08-10 17:02:23 -07:00
Megan Marsh 07decf99ad quick patch to make ansible work again 2017-07-19 10:28:13 -07:00
Megan Marsh b2d5fcd48a move wait earlier 2017-07-05 12:27:59 -07:00
Megan Marsh 9ee97aaa2a while I'm at it, kill this race condition in uploads, too 2017-07-03 13:30:11 -07:00
Megan Marsh d8637751a3 rpc/communicator fix race condition that causes stdout from ssh provisioner to be truncated 2017-07-03 12:19:13 -07:00
Matthew Hooker 81522dced0
move packer to hashicorp 2017-04-04 13:39:01 -07:00
Billie H. Cleek b4f6d40001 allow ssh communicator's Upload fastpath to execute
Add os.FileInfo implementation to packer/rpc, and use it to pass
Upload's *os.FileInfo argument through the RPC boundary.
2016-09-28 23:22:04 -07:00
Vasiliy Tolstov feee19e4ed file provisioner improvements
* allow specify source/destination as dir
* allow specify many files as source

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
2016-02-12 11:48:28 -08:00
Chris Bednarski a4eba1102b Switch bool chan to struct chan for less memory usage 2015-10-12 22:04:13 -07:00
Chris Bednarski 4856544027 Add a comment to indicate why we're waiting on the channel 2015-10-12 18:42:17 -07:00
Chris Bednarski b51cd5406a Add explicit wait after Communicator.Download to make sure serveSingleCopy completes 2015-10-12 18:12:22 -07:00
Mitchell Hashimoto 75395af12d Merge branch '1064-fix-upload-file-permissions' of github.com:rasa/packer into rasa-1064-fix-upload-file-permissions
Conflicts:
	builder/parallels/common/step_upload_parallels_tools.go
	builder/vmware/common/step_upload_tools.go
	provisioner/chef-client/provisioner.go
	provisioner/chef-solo/provisioner.go
2014-09-08 13:20:46 -07:00
Mitchell Hashimoto 9ffa0b8e25 packer/rpc: no more muxconn 2014-09-02 14:23:06 -07:00
Ross Smith II d92179847d provisioner/file: set file/directory permissions
fixes #1064
2014-05-09 21:03:35 -07:00
Mitchell Hashimoto f4567ee921 packer/rpc: communicator shouldn't conncet to ID 0 2013-12-21 08:07:42 -08:00
Mitchell Hashimoto edbdee5dee packer/rpc: accept/dial stream IDs are unique [GH-727] 2013-12-20 09:49:44 -08:00
Mitchell Hashimoto a2f46a989f packer/rpc: MuxConn implements three-way handshake 2013-12-11 23:50:41 -08:00
Mitchell Hashimoto 6aef114372 go fmt 2013-12-11 11:19:36 -08:00
Mitchell Hashimoto e4dbad330d packer/rpc: rename uploadReader to uploadData because that makes sense 2013-12-10 15:30:58 -08:00
Mitchell Hashimoto 3a41500888 packer/rpc: more robust communicator connection cleanup 2013-12-10 15:12:16 -08:00
Mitchell Hashimoto db06fc7501 packer/rpc: implement Communicator 2013-12-10 11:43:02 -08: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 1010c8ae19 packer/rpc: implement UploadDir 2013-08-25 20:30:56 -07:00
Mitchell Hashimoto 8b21b5b713 packer/rpc: use public MockCommunicator, tests pass 2013-08-25 20:30:56 -07:00
Mitchell Hashimoto 8b00c82898 packer/rpc: when communicator abruptly exits, set exit status 123 2013-08-19 23:21:53 -07:00
Mitchell Hashimoto 9b0c3b28c5 communicator/ssh: use SetExited 2013-07-29 12:12:42 -07:00
Mitchell Hashimoto 333ed6aa78 packer/rpc: Use the SetExited for remote communicators 2013-07-29 12:07:37 -07:00
Mitchell Hashimoto 97729e9893 packer/rpc: Properly close net.conn when remote process ends 2013-07-07 20:59:43 -07:00
Mitchell Hashimoto 75074ca92d go fmt 2013-06-02 23:27:18 -07:00
Mitchell Hashimoto a21fe8c484 packer/rpc: Exited fields now work over RPC 2013-06-02 23:21:55 -07:00
Mitchell Hashimoto ea4171f163 packer/rpc: Hook up the new communicator interface 2013-06-02 23:08:40 -07:00
Mitchell Hashimoto ace53450b9 packer: More efficient RemoteCommand.ExitChan 2013-06-01 17:57:26 -07:00
Mitchell Hashimoto c6dd54760c Get everything compiling again 2013-06-01 17:48:19 -07:00
Mitchell Hashimoto 7154b5c0f1 packer/rpc: Close the net conn after done sending data for Comm 2013-05-27 23:36:34 -07:00
Mitchell Hashimoto 78ab1709cd packer/rpc: Better logging in communicator 2013-05-27 22:10:44 -07:00
Mitchell Hashimoto 15f215d04f go fmt 2013-05-20 16:50:35 -07:00
Mitchell Hashimoto f74341a7b9 packer/rpc: Complete Upload/Download implementation 2013-05-12 17:09:14 -07:00
Mitchell Hashimoto 9262a85e6c packer/rpc: Communicator.Upload 2013-05-12 16:48:46 -07:00
Mitchell Hashimoto daa431af63 packer: Communicator Upload/Download return an error 2013-05-12 16:25:40 -07:00
Mitchell Hashimoto 496a320a82 packer/rpc: Implement full communicator interface 2013-05-12 16:19:34 -07:00
Mitchell Hashimoto 2799cccf4b packer: Waiting for a remote command and setting the exit status 2013-05-12 16:18:17 -07:00
Mitchell Hashimoto 88a018bf5d packer: Work on communicators... WIP 2013-05-12 14:47:55 -07:00