Commit Graph

20 Commits

Author SHA1 Message Date
Wilken Rivera 5dfeddc3a4 guides/hcl: Add link to HCL2 issues tracked on the Packer repo
This change adds a partial that contains a link to the HCL2 issues currently being tracked on GitHub. The partial has been added to the majority of the HCL2 guide documents as a way to help users learn about any open or recently resolved issues pertaining to the HCL2 support in Packer.
2020-03-02 17:13:35 -05:00
Mark Lewis 70752e0488
Add prompt to use a specific directory for *.pkr.hcl (#8757)
This improves usability as many users will still expect
to use `packer build config.pkr.hcl` having run
`packer build config.json` in the past.
2020-02-18 10:55:30 +01:00
Mark Lewis 2d0c796837
Fix typos in Input and Local Variables guide (#8741) 2020-02-14 15:30:25 +01:00
Adrien Delorme 193dad46e6
Hcl2 input variables, local variables and functions (#8588)
Mainly redefine or reused what Terraform did.

* allow to used `variables`, `variable` and `local` blocks
* import the following functions and their docs from Terraform: abs, abspath, basename, base64decode, base64encode, bcrypt, can, ceil, chomp, chunklist, cidrhost, cidrnetmask, cidrsubnet, cidrsubnets, coalesce, coalescelist, compact, concat, contains, convert, csvdecode, dirname, distinct, element, file, fileexists, fileset, flatten, floor, format, formatdate, formatlist, indent, index, join, jsondecode, jsonencode, keys, length, log, lookup, lower, max, md5, merge, min, parseint, pathexpand, pow, range, reverse, rsadecrypt, setintersection, setproduct, setunion, sha1, sha256, sha512, signum, slice, sort, split, strrev, substr, timestamp, timeadd, title, trim, trimprefix, trimspace, trimsuffix, try, upper, urlencode, uuidv4, uuidv5, values, yamldecode, yamlencode, zipmap.
2020-02-06 11:49:21 +01:00
Adrien Delorme fbd3796377 Update index.html.md.erb 2019-12-19 15:40:08 +01:00
Adrien Delorme 31cad234f2 Update index.html.md.erb 2019-12-19 15:34:26 +01:00
Adrien Delorme 1d066082a5 Update index.html.md.erb 2019-12-19 15:28:29 +01:00
Adrien Delorme 4c3fa0ef26 document split files & main building blocks in guide 2019-12-19 14:58:44 +01:00
Adrien Delorme 04a8758811
Update website/source/guides/hcl/from-json-v1/index.html.md.erb
Co-Authored-By: Wilken Rivera <dev@wilkenrivera.com>
2019-12-18 15:59:53 +01:00
Adrien Delorme 978af9188f
Update website/source/guides/hcl/component-object-spec/index.html.md.erb
Co-Authored-By: Wilken Rivera <dev@wilkenrivera.com>
2019-12-18 15:59:33 +01:00
Adrien Delorme da12c73726
Update website/source/guides/hcl/component-object-spec/index.html.md.erb
Co-Authored-By: Wilken Rivera <dev@wilkenrivera.com>
2019-12-18 15:59:26 +01:00
Adrien Delorme 971eac1701
Update website/source/guides/hcl/component-object-spec/index.html.md.erb
Co-Authored-By: Wilken Rivera <dev@wilkenrivera.com>
2019-12-18 15:59:16 +01:00
Adrien Delorme f3629dbaf7 Update index.html.md.erb
fix sidebar_current
2019-12-18 15:57:01 +01:00
Adrien Delorme 93b9f3cb80 rename 2019-12-18 15:51:32 +01:00
Adrien Delorme da90c22c35 Update index.html.md.erb
better title
2019-12-18 15:51:13 +01:00
Adrien Delorme 1ada06b2d7 fix sidebar_current of guide/hcl/from-json-v1 2019-12-18 15:22:48 +01:00
Adrien Delorme 8c21916606 add guide on how to make ones component HCL2 enabled 2019-12-18 15:01:48 +01:00
Wilken Rivera ba36201f89 docs/guides/hcl: Update sample configuration (#8499) 2019-12-18 10:17:47 +01:00
Adrien Delorme 65cc5fe823
fix missing typo correction (#8494)
I left this change on my local branch
2019-12-17 11:31:57 +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