From d24fa1d8ad7f742e80c1d3788382e8931f537233 Mon Sep 17 00:00:00 2001 From: Wilken Rivera Date: Fri, 14 May 2021 14:09:27 -0400 Subject: [PATCH] Add link to the new HCL2 upgrade command tutorial This change replaces the from JSON v1 guide with a redirect to the released hcl2_upgrade command tutorial on learn.hashicorp.com --- website/content/guides/hcl/from-json-v1.mdx | 191 -------------------- website/data/guides-nav-data.json | 8 +- website/redirects.next.js | 5 + 3 files changed, 9 insertions(+), 195 deletions(-) delete mode 100644 website/content/guides/hcl/from-json-v1.mdx diff --git a/website/content/guides/hcl/from-json-v1.mdx b/website/content/guides/hcl/from-json-v1.mdx deleted file mode 100644 index 73b6a4d3c..000000000 --- a/website/content/guides/hcl/from-json-v1.mdx +++ /dev/null @@ -1,191 +0,0 @@ ---- -page_title: Transforming Packer v1 files for Packer v1.5.0 -description: |- - Learn how to manually move from a Packer v1 working JSON build file to a - working v1.5.0 HCL file. ---- - -# Transforming Packer v1 config files to HCL2 for Packer v1.5 - -@include 'guides/hcl2-beta-note.mdx' - -As of v1.6.4, Packer provides a tool to help you convert legacy JSON files to -HCL2 files. To run it, you can use the `hcl2_upgrade` command. - -for example, - -```sh -packer hcl2_upgrade mytemplate.json -``` - -will convert your Packer template to a new HCL2 file in your current working -directory named `mytemplate.json.pkr.hcl`. It is not a perfect converter yet; -please open an issue if you find a problem with the conversion. Packer will not -destroy your legacy json template, so this is not a risky command to call. - -Following is an explanation of how to manually upgrade a JSON template to an -HCL2 template. - -The following file : - -```json -{ - "builders": [ - { - "ami_name": "packer-test", - "region": "us-east-1", - "instance_type": "t2.micro", - - "source_ami_filter": { - "filters": { - "virtualization-type": "hvm", - "name": "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*", - "root-device-type": "ebs" - }, - "owners": ["amazon"], - "most_recent": true - }, - - "ssh_username": "ubuntu", - "type": "amazon-ebs" - } - ], - "provisioners": [ - { - "type": "shell", - "inline": ["sleep 5"] - } - ] -} -``` - -Becomes: - -```hcl -# The data block defines a data source that is used to fetch data from outside Packer. -# The amazon-ami data source was generated from the `source_ami_filter` present in -# the amazon builder from the JSON template. -data "amazon-ami" "autogenerated_1" { - filters = { - name = "ubuntu/images/*ubuntu-xenial-16.04-amd64-server-*" - root-device-type = "ebs" - virtualization-type = "hvm" - } - most_recent = true - owners = ["amazon"] - region = "us-east-1" -} - -# The source block is what was defined in the builders section and represents a -# reusable way to start a machine. You build your images from that source. All -# sources have a 1:1 correspondence to what currently is a builder. The -# argument name (ie: ami_name) must be unquoted and can be set using the equal -# sign operator (=). -source "amazon-ebs" "autogenerated_1" { - ami_name = "packer-test" - instance_type = "t2.micro" - region = "us-east-1" - source_ami = "${data.amazon-ami.autogenerated_1.id}" - ssh_username = "ubuntu" -} - -# A build starts sources and runs provisioning steps on those sources. -build { - sources = [ - # there can be multiple sources per build - "source.amazon-ebs.autogenerated_1" - ] - - # All provisioners and post-processors have a 1:1 correspondence to their - # current layout. The argument name (ie: inline) must to be unquoted - # and can be set using the equal sign operator (=). - provisioner "shell" { - inline = ["sleep 5"] - } - - # post-processors work too, example: `post-processor "shell-local" {}`. -} -``` - -### 1:1 correspondence of components ... except : - -All fields of builders, provisioners and post-processors have a 1:1 -mapping, except for the following: - -- builders: - - - aws ami_block_device_mappings - - aws launch_block_device_mappings - - aws run_volume_tags - - alicloud image_disk_mappings - - osc omi_block_device_mappings - - osc launch_block_device_mappings - - proxmox network_adapters - - proxmox disks - - tencentcloud data_disks - - ucloud image_copy_to_mappings - -- provisioner: - - - converge module_dirs - -- post-processor: - - alicloud-import image_disk_mappings - -One could think that these are defined as "arrays of blocks" - they are in fact -repeatable blocks with the same identifier. For example: - -```json -"builders": [ - { - "type": "amazon-ebs", - "launch_block_device_mappings": [ - { - "device_name": "/dev/xvda", - "volume_size": "20", - "volume_type": "gp2", - "delete_on_termination": "true" - }, - { - "device_name": "/dev/xvdf", - "volume_size": "500", - "volume_type": "gp2", - "delete_on_termination": "true", - "encrypted": true - } - ], - } -] -``` - -Becomes: - -```hcl -source "amazon-ebs" "example" { - 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 - } -} -``` - -There is soon going to be a PR to drop the `s` at the end of these fields. - -### Deprecation - -As we become more confident in the new templates, we may add more and more features that are HCL2-only. -As of **1.7.0**, the new Data Source component type is the first HCL2-only feature. -One of our major motivations to moving to the new template format is that HCL2 provides us with the flexibility to implement some -features which would be very difficult to add to the legacy JSON templates. - -However, the Packer team will continue to support the main functionality of the -current "legacy JSON" Packer templates alongside the new preferred HCL2 templates. diff --git a/website/data/guides-nav-data.json b/website/data/guides-nav-data.json index 0fb10491a..261eff25f 100644 --- a/website/data/guides-nav-data.json +++ b/website/data/guides-nav-data.json @@ -14,14 +14,14 @@ "title": "Overview", "path": "hcl" }, - { - "title": "From JSON v1", - "path": "hcl/from-json-v1" - }, { "title": "Variables", "path": "hcl/variables" }, + { + "title": "Upgrade Packer JSON Template to HCL2", + "href": "https://learn.hashicorp.com/tutorials/packer/hcl2-upgrade" + }, { "title": "Making a plugin HCL2 enabled", "path": "hcl/component-object-spec" diff --git a/website/redirects.next.js b/website/redirects.next.js index 6b638faa7..f019fe236 100644 --- a/website/redirects.next.js +++ b/website/redirects.next.js @@ -218,6 +218,11 @@ module.exports = [ destination: '/docs/post-processors/docker/docker-:path*', permanent: true, }, + { + source: '/guides/hcl/from-json-v1', + destination: 'https://learn.hashicorp.com/tutorials/packer/hcl2-upgrade', + permanent: true, + }, // disallow '.html' or '/index.html' in favor of cleaner, simpler paths { source: '/:path*/index', destination: '/:path*', permanent: true }, { source: '/:path*.html', destination: '/:path*', permanent: true },