Commit Graph

63 Commits

Author SHA1 Message Date
Adrien Delorme 40947c2bf6
HCL2: generate hcl tags with go-cty tags too (#9306)
This will allow to generate the config files:

```go
package main

import (
	"fmt"

	"github.com/hashicorp/hcl/v2/gohcl"
	"github.com/hashicorp/hcl/v2/hclwrite"
	"github.com/hashicorp/packer/builder/alicloud/ecs"
)

func main() {
	name := "name"
	app := ecs.FlatConfig{
		AlicloudImageName: &name,
		ECSSystemDiskMapping: &ecs.FlatAlicloudDiskDevice{
			DiskName: &name,
		},
	}

	f := hclwrite.NewEmptyFile()
	block := gohcl.EncodeAsBlock(&app, `source "something" "something"`)
	f.Body().AppendBlock(block)
	fmt.Printf("%s", f.Bytes())
}

```

Will output:

```
source "something" "something" {
  packer_user_variables      = null
  packer_sensitive_variables = null
  image_name                 = "name"
  image_share_account        = null
  image_unshare_account      = null
  image_copy_regions         = null
  image_copy_names           = null
  tags                       = null
  tag                        = null
  system_disk_mapping        = { disk_category = null, disk_delete_with_instance = null, disk_descri
ption = null, disk_device = null, disk_encrypted = null, disk_name = "name", disk_size = null, disk_
snapshot_id = null }
  image_disk_mappings        = null
  ssh_remote_tunnels         = null
  ssh_local_tunnels          = null
  ssh_public_key             = null
  ssh_private_key            = null
}
```

This is a good first step for #9015 and #9282 

fix #9304
2020-05-28 11:19:00 +02:00
Adrien Delorme 840e67f775
HCL2: when we see a map generate an attribute spec instead of a block spec (#9035)
* 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
2020-04-14 16:05:13 +02:00
Sylvia Moss dc31bad539
Sharing info with post-processors via artifact (#8632) 2020-01-30 11:27:58 +01:00
Adrien Delorme 4b7132c87c Merge remote-tracking branch 'origin/master' into sharing_info 2019-12-17 11:57:09 +01:00
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
Megan Marsh 0f6d1beccf add an extra string array to the Prepare() return values in the builder interfaces; this sets up the ability for builders to give the provisioners custom user-accessible build-time variables. 2019-12-16 21:23:05 -08:00
Lars Lehtonen 5edabfc849 post-processor/compress: fix dropped errors 2019-10-28 16:19:46 -07:00
Adrien Delorme 078ba7c8c3 commit old code generation tool
for history
2019-10-15 12:56:42 +02:00
Adrien Delorme aee73d745d update code after go mod update 2019-04-11 14:19:24 +02:00
Adrien Delorme a81abd297b Merge remote-tracking branch 'origin/master' into context_provisioner 2019-04-08 20:09:01 +02:00
Megan Marsh 1b77b05ce2 remove redundant keep_input_artifact from compress pp and clarify keep behavior in shell-local pp 2019-04-03 12:03:40 -07:00
Megan Marsh 056fcb7cea fix tests and add a few new ones 2019-04-03 11:32:49 -07:00
Adrien Delorme e65115a7a0 contextualize post-processor 2019-04-03 15:55:55 +02:00
Megan Marsh 12fc1fa751 default_keep_input_artifact 2019-04-02 16:51:58 -07: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
Megan Marsh f4a360bea9 remove unused argument 2018-08-24 14:19:01 -07:00
Chris Lundquist ce1a5b7d7a Print why we are only using one core 2018-07-25 02:27:51 +00:00
Chris Lundquist 999a53ca76 add support for xz compression #6523 2018-07-24 19:46:21 +00:00
Adam Robinson 8715bfbf70 set all tar timestamp fields to the zero date 2018-06-26 21:39:54 -05:00
Sean Malloy 3622a669dc Add new post processor googlecompute-import 2018-06-26 21:39:55 -05:00
Matthew Hooker ebe995c0ff
run goimports 2018-01-22 17:21:10 -08:00
Matthew Hooker 81522dced0
move packer to hashicorp 2017-04-04 13:39:01 -07:00
Matthew Hooker d1b20b3d9c
remove a bunch of dead code.
https://github.com/dominikh/go-tools/tree/master/cmd/unused
2017-03-28 20:36:20 -07:00
Vasiliy Tolstov 6a5f6938ef post-processor/compress: add bgzf format support
* add bgzf compressor (it allows seek inside compressed file)
* add optional format config variable to specify archive format
* Update pgzip to get sse4 and avx optimizations.

Signed-off-by: Vasiliy Tolstov <v.tolstov@selfip.ru>
2016-05-13 11:51:00 +02:00
Chris Bednarski fbb24d4acf Changed interpolation logic so .BuildName can be used in the output config option 2015-08-04 19:49:41 -07:00
Chris Bednarski 4ef3baa3ee Update test to include some interpolation configs 2015-08-04 19:30:57 -07:00
Chris Bednarski 8d6719e71f Add failing test for compress interpolation 2015-08-03 16:34:24 -07:00
Chris Bednarski eba28519db Move vars to the top and cleanup extra whitespace 2015-06-24 18:29:32 -07:00
Chris Bednarski 1831a09055 Fix compress crash
- Changed config from pointer to value to fix crash
- Removed acceptance flag from compress tests since they would have
caught this
2015-06-24 17:47:00 -07:00
Mitchell Hashimoto 5241d8c6d6 post-processor/*: fix interpolation context 2015-06-22 12:24:55 -07:00
Chris Bednarski 2d92fd8733 Added test case for gzip that expands the data and compares to what we put in 2015-06-18 19:08:13 -07:00
Chris Bednarski 801e5aaa30 Move test configs into the test func 2015-06-18 18:25:46 -07:00
Chris Bednarski d02f6644d2 Refactored test so it's more DRY and also rearranged things so the test cases and configs are at the top of the file 2015-06-18 18:21:03 -07:00
Chris Bednarski 7497db67b4 Tweaked some of the UI/UX around GOMAXPROCS 2015-06-18 14:22:26 -07:00
Chris Bednarski 0880d448f0 Cleanup some debug code and reorganize config struct 2015-06-18 14:01:00 -07:00
Chris Bednarski 9cd572461d Updated docs, fix artifact bug 2015-06-18 05:13:48 -07:00
Chris Bednarski e81378ac39 Fix test case 2015-06-18 04:46:39 -07:00
Chris Bednarski d8f78d9174 Cleanup 2015-06-18 04:41:05 -07:00
Chris Bednarski b767aa7f99 Change to compression_level, fix and add tests for format detection 2015-06-18 03:55:51 -07:00
Chris Bednarski 8fdb4f77e0 WIP 2/4 tests passing, still need to re-implement ZIP and bare compression files and do some cleanup 2015-06-18 00:47:33 -07:00
Chris Bednarski 47bb5ae899 Re-added benchmark and license 2015-06-16 20:23:40 -07:00
Chris Bednarski 2d6f8279e6 Restore configuration structure from vtolstov's branch 2015-06-16 19:08:22 -07:00
Chris Bednarski b2ad92f414 Merged changes from f-file-builder and master 2015-06-16 19:07:29 -07:00
Chris Bednarski ddbc145d29 Implemented acceptance test for compress 2015-06-16 16:31:09 -07:00
Chris Bednarski f5067e9736 Merge branch 'f-file-builder' of github.com:mitchellh/packer into f-file-builder 2015-06-16 12:11:33 -07:00
Chris Bednarski fe105107d2 Removed extra files -- will re-add later 2015-06-16 12:11:11 -07:00
Chris Bednarski 12cf6650a0 Revert compress post-processor to master to get baseline test 2015-06-16 12:10:28 -07:00
Chris Bednarski fe0c548619 Added acceptance test for file builder 2015-06-16 11:30:49 -07:00
Chris Bednarski 53e4688529 Renamed some things to be more consistent with existing modules 2015-06-12 17:25:09 -07:00
Chris Bednarski 3ac74bbae8 Remove redundant aliases 2015-06-10 14:07:13 -07:00