diff --git a/go.mod b/go.mod index 38d0955de..f1208a28f 100644 --- a/go.mod +++ b/go.mod @@ -21,7 +21,7 @@ require ( github.com/hashicorp/packer-plugin-alicloud v0.0.2 github.com/hashicorp/packer-plugin-amazon v0.0.1 github.com/hashicorp/packer-plugin-ansible v0.0.3 - github.com/hashicorp/packer-plugin-azure v0.0.2 + github.com/hashicorp/packer-plugin-azure v0.0.3 github.com/hashicorp/packer-plugin-chef v0.0.2 github.com/hashicorp/packer-plugin-cloudstack v0.0.1 github.com/hashicorp/packer-plugin-converge v0.0.1 @@ -44,7 +44,7 @@ require ( github.com/hashicorp/packer-plugin-puppet v0.0.2 github.com/hashicorp/packer-plugin-qemu v0.0.1 github.com/hashicorp/packer-plugin-scaleway v0.0.1 - github.com/hashicorp/packer-plugin-sdk v0.2.1 + github.com/hashicorp/packer-plugin-sdk v0.2.2 github.com/hashicorp/packer-plugin-tencentcloud v0.0.1 github.com/hashicorp/packer-plugin-triton v0.0.0-20210421085122-768dd7c764d9 github.com/hashicorp/packer-plugin-ucloud v0.0.1 @@ -54,7 +54,7 @@ require ( github.com/hashicorp/packer-plugin-vsphere v0.0.1 github.com/hashicorp/packer-plugin-yandex v0.0.4 github.com/klauspost/pgzip v0.0.0-20151221113845-47f36e165cec - github.com/masterzen/winrm v0.0.0-20201030141608-56ca5c5f2380 + github.com/masterzen/winrm v0.0.0-20210504160029-28ed956f5227 github.com/mattn/go-tty v0.0.0-20191112051231-74040eebce08 github.com/mitchellh/cli v1.1.0 github.com/mitchellh/go-homedir v1.1.0 diff --git a/go.sum b/go.sum index 39f323b5d..6b0e029ac 100644 --- a/go.sum +++ b/go.sum @@ -547,8 +547,8 @@ github.com/hashicorp/packer-plugin-amazon v0.0.1 h1:EuyjNK9bL7WhQeIJzhBJxOx8nyc6 github.com/hashicorp/packer-plugin-amazon v0.0.1/go.mod h1:12c9msibyHdId+Mk/pCbdRb1KaLIhaNyxeJ6n8bZt30= github.com/hashicorp/packer-plugin-ansible v0.0.3 h1:pLL2ZqRt4LVBwhtcG/PVgr9WbhfYfIDJ2aWT+Q7ef9U= github.com/hashicorp/packer-plugin-ansible v0.0.3/go.mod h1:5/wOgs7TBwziYCznulfv5AwncLHavXQr83EtpkBVlXg= -github.com/hashicorp/packer-plugin-azure v0.0.2 h1:wNEWpkIUzFr/K0ddlipn7W7oJ/m8+RiWZ1xJMsX+hbM= -github.com/hashicorp/packer-plugin-azure v0.0.2/go.mod h1:ySskXX3DJV9Z9Yzt3dyrWsN1XUcjeIOtyL7/ZNHs6zw= +github.com/hashicorp/packer-plugin-azure v0.0.3 h1:kqHWW5bVXyYq6E9BqcdWTs1XL1ZkWauh3CKSh+JZ8T8= +github.com/hashicorp/packer-plugin-azure v0.0.3/go.mod h1:j+tJcKI1nF2I+06c3f6KUdchlgGP2Kc9tgWZ+Cr7uCo= github.com/hashicorp/packer-plugin-chef v0.0.2 h1:JiciRcYGHaHB0LoJ0Y4oSJXrZeH0xbnshcEYGqC3lgI= github.com/hashicorp/packer-plugin-chef v0.0.2/go.mod h1:PxGw+J6PTW74b8MzMDEIoVYHAIr+vCS1n0etz8pqdiM= github.com/hashicorp/packer-plugin-cloudstack v0.0.1 h1:BF9nXRlA0xQV5W/+CoLjWn0aLO60gTbsxnLi/o37ktc= @@ -608,8 +608,8 @@ github.com/hashicorp/packer-plugin-sdk v0.1.3-0.20210407232143-c217d82aefb6/go.m github.com/hashicorp/packer-plugin-sdk v0.1.3/go.mod h1:xePpgQgQYv/bamiypx3hH9ukidxDdcN8q0R0wLi8IEQ= github.com/hashicorp/packer-plugin-sdk v0.1.4/go.mod h1:xePpgQgQYv/bamiypx3hH9ukidxDdcN8q0R0wLi8IEQ= github.com/hashicorp/packer-plugin-sdk v0.2.0/go.mod h1:0DiOMEBldmB0HEhp0npFSSygC8bIvW43pphEgWkp2WU= -github.com/hashicorp/packer-plugin-sdk v0.2.1 h1:NZJ9h2ddzZb6E3eaYFD7L4mSjqFia3FDoDTxDGQKNMs= -github.com/hashicorp/packer-plugin-sdk v0.2.1/go.mod h1:4V7lS35FRhukvZrW41IPctTPY7JmHPOkFZcR7XGXZPk= +github.com/hashicorp/packer-plugin-sdk v0.2.2 h1:z0y0mIk4LoGHleheFNuAjw1/mOoaUPdXSTErICgOBYk= +github.com/hashicorp/packer-plugin-sdk v0.2.2/go.mod h1:MAOhxLneNh27t6N6SMyRcIR5qSE86e6yYCcEfRScwIE= github.com/hashicorp/packer-plugin-tencentcloud v0.0.1 h1:DR7GETCzrK/DPFMUPbULIklCxwGhstbbz6pl+2S+UnM= github.com/hashicorp/packer-plugin-tencentcloud v0.0.1/go.mod h1:FmdacMLvDKiT6OdMAc2x4LXtqu/soLApH3jF57SWOik= github.com/hashicorp/packer-plugin-triton v0.0.0-20210421085122-768dd7c764d9 h1:No5oPI9Wa7FhTKkFJwI3hcfUVvEpgPC8QMcG9l/Vxzo= @@ -725,8 +725,9 @@ github.com/masterzen/simplexml v0.0.0-20160608183007-4572e39b1ab9/go.mod h1:kCEb github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786 h1:2ZKn+w/BJeL43sCxI2jhPLRv73oVVOjEKZjKkflyqxg= github.com/masterzen/simplexml v0.0.0-20190410153822-31eea3082786/go.mod h1:kCEbxUJlNDEBNbdQMkPSp6yaKcRXVI6f4ddk8Riv4bc= github.com/masterzen/winrm v0.0.0-20200615185753-c42b5136ff88/go.mod h1:a2HXwefeat3evJHxFXSayvRHpYEPJYtErl4uIzfaUqY= -github.com/masterzen/winrm v0.0.0-20201030141608-56ca5c5f2380 h1:uKhPH5dYpx3Z8ZAnaTGfGZUiHOWa5p5mdG8wZlh+tLo= github.com/masterzen/winrm v0.0.0-20201030141608-56ca5c5f2380/go.mod h1:a2HXwefeat3evJHxFXSayvRHpYEPJYtErl4uIzfaUqY= +github.com/masterzen/winrm v0.0.0-20210504160029-28ed956f5227 h1:Vcl9dr3dZMIEGpwP1+QSkqFUVQVOopV1nP+I3a6r6tw= +github.com/masterzen/winrm v0.0.0-20210504160029-28ed956f5227/go.mod h1:a2HXwefeat3evJHxFXSayvRHpYEPJYtErl4uIzfaUqY= github.com/matryer/moq v0.0.0-20190312154309-6cfb0558e1bd/go.mod h1:9ELz6aaclSIGnZBoaSLZ3NAl1VTufbOrXBPvtcy6WiQ= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= diff --git a/website/content/docs/templates/legacy_json_templates/engine.mdx b/website/content/docs/templates/legacy_json_templates/engine.mdx index 7eb644fe0..a54feb2a4 100644 --- a/website/content/docs/templates/legacy_json_templates/engine.mdx +++ b/website/content/docs/templates/legacy_json_templates/engine.mdx @@ -125,14 +125,15 @@ Here is a full list of the available functions for reference. `strftime FORMAT` - UTC time, formated using the ISO C standard format `FORMAT`. See [jehiah/go-strftime](https://github.com/jehiah/go-strftime) for a list - of available format specifier. + of available format specifiers. Please note that if you are using a large number of builders, - provisioners or post-processors, the isotime may be slightly - different for each one because it is from when the plugin is - launched not the initial Packer process. In order to avoid this and make - the timestamp consistent across all plugins, set it as a user variable - and then access the user variable within your plugins. + provisioners or post-processors, using the isotime engine directly in the + plugin configuration may cause the timestamp to be slightly diffferent for + each plugin. This is because the timestamp is generated when each plugin is + launched rather than in the initial Packer process. In order to avoid this + and make sure the timestamp is consistent across all plugins, set it as a user + variable and then access the user variable within your plugins. - `lower` - Lowercases the string. - `packer_version` - Returns Packer version. @@ -235,6 +236,56 @@ documentation for more information on user variables. # isotime Function Format Reference +The isotime template engine uses golang to generate timestamps. If you're +unfamiliar with golang, then the way you format the timestamp is going to +feel a bit unusual compared to how you may be used to formatting +datetime strings. + +Full docs and examples for the golang time formatting function can be found +[here](https://golang.org/pkg/time/#example_Time_Format) + +However, the formatting basics are worth describing here. From the [golang docs](https://golang.org/pkg/time/#pkg-constants): + +> These are predefined layouts for use in Time.Format and time.Parse. The +> reference time used in the layouts is the specific time: +> +> Mon Jan 2 15:04:05 MST 2006 +> +> which is Unix time 1136239445. Since MST is GMT-0700, the reference time +> can be thought of as +> +> 01/02 03:04:05PM '06 -0700 +> +> To define your own format, write down what the reference time would look like +> formatted your way; see the values of constants like ANSIC, StampMicro or +> Kitchen for examples. The model is to demonstrate what the reference time +> looks like so that the Format and Parse methods can apply the same +> transformation to a general time value. + +So what does that look like in a Packer template function? Here's an example +of how you'd declare a variable using the isotime function. + +```json +"variables": { + "myvar": "packer-{{isotime `2006-01-02 03:04:05`}}" +} +``` + +You can try and modify the following examples in a packer template or in +`packer console` to get an idea of how to set different timestamps: + +| Input | Output | +| ------------------------------------------ | ----------- | +| ``"packer-{{isotime `2006-01-02`}}"`` | "packer-2021-05-17 11:40:16" | +| ``"packer-{{isotime `Jan-_2-15:04:05.000`}}"`` | "packer-May-17-23:40:16.786" | +| ``"packer-{{isotime `3:04PM`}}"`` | "packer-11:40PM" | +| ``"{{ isotime }}"`` | "June 7, 7:22:43pm 2014" | +| ``"{{isotime `2006-01-02`}}"`` | "2014-06-07" | +| ``"{{isotime `Mon 1504`}}"`` | "Sat 1922" | +| ``"{{isotime `02-Jan-06 03\_04\_05`}}"`` | "07-Jun-2014 07\_22\_43" | +| ``"{{isotime `Hour15Year200603`}}"`` | "Hour19Year201407" | + + Formatting for the function `isotime` uses the magic reference date **Mon Jan 2 15:04:05 -0700 MST 2006**, which breaks down to the following: @@ -278,47 +329,9 @@ Formatting for the function `isotime` uses the magic reference date **Mon Jan 2 _The values in parentheses are the abbreviated, or 24-hour clock values_ -For those unfamiliar with GO date/time formatting, here is a link to the -documentation: [go date/time formatting](https://programming.guide/go/format-parse-string-time-date-example.html) - Note that "-0700" is always formatted into "+0000" because `isotime` is always UTC time. -Here are some example formatted time, using the above format options: - -```liquid -isotime = June 7, 7:22:43pm 2014 - -{{isotime "2006-01-02"}} = 2014-06-07 -{{isotime "Mon 1504"}} = Sat 1922 -{{isotime "02-Jan-06 03\_04\_05"}} = 07-Jun-2014 07\_22\_43 -{{isotime "Hour15Year200603"}} = Hour19Year201407 -``` - -Please note that double quote characters need escaping inside of templates (in -this case, on the `ami_name` value): - -```json -{ - "builders": [ - { - "type": "amazon-ebs", - "access_key": "...", - "secret_key": "...", - "region": "us-east-1", - "source_ami": "ami-fce3c696", - "instance_type": "t2.micro", - "ssh_username": "ubuntu", - "ami_name": "packer {{isotime \"2006-01-02\"}}" - } - ] -} -``` - --> **Note:** See the [Amazon builder](/docs/builders/amazon) -documentation for more information on how to correctly configure the Amazon -builder in this example. - # split Function Format Reference The function `split` takes an input string, a seperator string, and a numeric diff --git a/website/content/docs/templates/legacy_json_templates/index.mdx b/website/content/docs/templates/legacy_json_templates/index.mdx index 642ad3ec5..130562370 100644 --- a/website/content/docs/templates/legacy_json_templates/index.mdx +++ b/website/content/docs/templates/legacy_json_templates/index.mdx @@ -79,6 +79,74 @@ key with an underscore. Example: **Important:** Only _root level_ keys can be underscore prefixed. Keys within builders, provisioners, etc. will still result in validation errors. +-> **Note:** Packer supports HCL2 from version 1.6.0. The Hashicorp +Configuration Language does support comments anywhere in template files. +If comments are important to you, consider upgrading your +JSON template to HCL2 using the `packer hcl2_upgrade` command. + +One workaround if you are not ready to upgrade to HCL is to use jq to strip +unsupported comments from a Packer template before you run `packer build`. + +For example, here is a file named `commented_template.json`: + +```json +{ + "_comment": ["this is", "a multi-line", "comment"], + "builders": [ + { + "_comment": "this is a comment inside a builder", + "type": "null", + "communicator": "none" + } + ], + "_comment": "this is a root level comment", + "provisioners": [ + { + "_comment": "this is a different comment", + "type": "shell", + "_comment": "this is yet another comment", + "inline": ["echo hellooooo"] + } + ] +} +``` + +If you use the following jq command: + +```shell-session +$ jq 'walk(if type == "object" then del(._comment) else . end)' commented_template.json > uncommented_template.json +``` + +The tool will produce a new file containing: + +```json +{ + "builders": [ + { + "type": "null", + "communicator": "none" + } + ], + "provisioners": [ + { + "type": "shell", + "inline": ["echo hellooooo"] + } + ] +} +``` + +Once you've got your uncommented file, you can call `packer build` on it like +you normally would. + +If your install of jq does not have the walk function and you get an error like + +```text +jq: error: walk/1 is not defined at , +``` + +You can create a file `~/.jq` and add the [walk function](https://github.com/stedolan/jq/blob/ad9fc9f559e78a764aac20f669f23cdd020cd943/src/builtin.jq#L255-L262) to it by hand. + ## Example Template Below is an example of a basic template that could be invoked with diff --git a/website/content/guides/workflow-tips-and-tricks/index.mdx b/website/content/guides/workflow-tips-and-tricks/index.mdx deleted file mode 100644 index 5d9ecdcce..000000000 --- a/website/content/guides/workflow-tips-and-tricks/index.mdx +++ /dev/null @@ -1,11 +0,0 @@ ---- -page_title: Tips and Tricks -description: |- - The guides stored in this section are miscellanious tips and tricks that might - make your experience of using Packer easier ---- - -# Tips and Tricks - -Click the sidebar navigation to check out the miscellaneous guides we have for -making your life with Packer just a bit easier. diff --git a/website/content/guides/workflow-tips-and-tricks/isotime-template-function.mdx b/website/content/guides/workflow-tips-and-tricks/isotime-template-function.mdx deleted file mode 100644 index bd0c9d09f..000000000 --- a/website/content/guides/workflow-tips-and-tricks/isotime-template-function.mdx +++ /dev/null @@ -1,84 +0,0 @@ ---- -page_title: Using the isotime template function - Guides -description: |- - It can be a bit confusing to figure out how to format your isotime using the - golang reference date string. Here is a small guide and some examples. ---- - -# Using the Isotime template function with a format string - -The way you format isotime in golang is a bit nontraditional compared to how -you may be used to formatting datetime strings. - -Full docs and examples for the golang time formatting function can be found -[here](https://golang.org/pkg/time/#example_Time_Format) - -However, the formatting basics are worth describing here. From the [golang docs](https://golang.org/pkg/time/#pkg-constants): - -> These are predefined layouts for use in Time.Format and time.Parse. The -> reference time used in the layouts is the specific time: -> -> Mon Jan 2 15:04:05 MST 2006 -> -> which is Unix time 1136239445. Since MST is GMT-0700, the reference time -> can be thought of as -> -> 01/02 03:04:05PM '06 -0700 -> -> To define your own format, write down what the reference time would look like -> formatted your way; see the values of constants like ANSIC, StampMicro or -> Kitchen for examples. The model is to demonstrate what the reference time -> looks like so that the Format and Parse methods can apply the same -> transformation to a general time value. - -So what does that look like in a Packer template function? - -```json -{ - "variables": { - "myvar": "packer-{{isotime \"2006-01-02 03:04:05\"}}" - }, - "builders": [ - { - "type": "null", - "communicator": "none" - } - ], - "provisioners": [ - { - "type": "shell-local", - "inline": ["echo {{ user `myvar`}}"] - } - ] -} -``` - -You can switch out the variables section above with the following examples to -get different timestamps: - -Date only, not time: - -```json - "variables": - { - "myvar": "packer-{{isotime \"2006-01-02\"}}" - } -``` - -A timestamp down to the millisecond: - -```json - "variables": - { - "myvar": "packer-{{isotime \"Jan-_2-15:04:05.000\"}}" - } -``` - -Or just the time as it would appear on a digital clock: - -```json - "variables": - { - "myvar": "packer-{{isotime \"3:04PM\"}}" - } -``` diff --git a/website/content/guides/workflow-tips-and-tricks/use-packer-with-comment.mdx b/website/content/guides/workflow-tips-and-tricks/use-packer-with-comment.mdx deleted file mode 100644 index 8ccaa6661..000000000 --- a/website/content/guides/workflow-tips-and-tricks/use-packer-with-comment.mdx +++ /dev/null @@ -1,75 +0,0 @@ ---- -page_title: Use jq and Packer to comment your templates - Guides -description: |- - You can add detailed comments beyond the root-level underscore-prefixed field - supported by Packer, and remove them using jq. ---- - -# How to use jq to strip unsupported comments from a Packer template - --> **Note:** Packer supports HCL2 from version 1.6.0, the Hashicorp Configuration -Language allows to comment directly in template files. Consider upgrading your -JSON template to HCL2 using the `packer hcl2_upgrade` command. - -One of the biggest complaints we get about Packer is that JSON doesn't use comments. -For Packer JSON templates, you can add detailed comments beyond the root-level underscore-prefixed field supported by Packer, and remove them using jq. - -Let's say we have a file named `commented_template.json` - -```json -{ - "_comment": ["this is", "a multi-line", "comment"], - "builders": [ - { - "_comment": "this is a comment inside a builder", - "type": "null", - "communicator": "none" - } - ], - "_comment": "this is a root level comment", - "provisioners": [ - { - "_comment": "this is a different comment", - "type": "shell", - "_comment": "this is yet another comment", - "inline": ["echo hellooooo"] - } - ] -} -``` - -```shell-session -$ jq 'walk(if type == "object" then del(._comment) else . end)' commented_template.json > uncommented_template.json -``` - -will produce a new file containing: - -```json -{ - "builders": [ - { - "type": "null", - "communicator": "none" - } - ], - "provisioners": [ - { - "type": "shell", - "inline": ["echo hellooooo"] - } - ] -} -``` - -Once you've got your uncommented file, you can call `packer build` on it like -you normally would. - -## The walk function - -If your install of jq does not have the walk function and you get an error like - -```text -jq: error: walk/1 is not defined at , -``` - -You can create a file `~/.jq` and add the [walk function](https://github.com/stedolan/jq/blob/ad9fc9f559e78a764aac20f669f23cdd020cd943/src/builtin.jq#L255-L262) to it by hand. diff --git a/website/content/guides/workflow-tips-and-tricks/veewee-to-packer.mdx b/website/content/guides/workflow-tips-and-tricks/veewee-to-packer.mdx deleted file mode 100644 index 2d842aea2..000000000 --- a/website/content/guides/workflow-tips-and-tricks/veewee-to-packer.mdx +++ /dev/null @@ -1,64 +0,0 @@ ---- -page_title: Convert Veewee Definitions to Packer Templates - Guides -description: |- - If you are or were a user of Veewee, then there is an official tool called - veewee-to-packer that will convert your Veewee definition into an equivalent - Packer template. Even if you're not a Veewee user, Veewee has a large library - of templates that can be readily used with Packer by simply converting them. ---- - -# Veewee-to-Packer - -If you are or were a user of [Veewee](https://github.com/jedi4ever/veewee), then -there is an official tool called -[veewee-to-packer](https://github.com/mitchellh/veewee-to-packer) that will -convert your Veewee definition into an equivalent Packer template. Even if -you're not a Veewee user, Veewee has a [large -library](https://github.com/jedi4ever/veewee/tree/master/templates) of templates -that can be readily used with Packer by simply converting them. - -## Installation and Usage - -Since Veewee itself is a Ruby project, so too is the veewee-to-packer -application so that it can read the Veewee configurations. Install it using -RubyGems: - -```shell-session -$ gem install veewee-to-packer -# ... -``` - -Once installed, just point `veewee-to-packer` at the `definition.rb` file of any -template. The converter will output any warnings or messages about the conversion. -The example below converts a CentOS template: - -```shell-session -$ veewee-to-packer templates/CentOS-6.4/definition.rb -Success! Your Veewee definition was converted to a Packer -template! The template can be found in the `template.json` file -in the output directory: output - -Please be sure to run `packer validate` against the new template -to verify settings are correct. Be sure to `cd` into the directory -first, since the template has relative paths that expect you to -use it from the same working directory. -``` - -**_Voila!_** By default, `veewee-to-packer` will output a template that contains -a builder for both VirtualBox and VMware. You can use the `-only` flag on -`packer build` to only build one of them. Otherwise you can use the `--builder` -flag on `veewee-to-packer` to only output specific builder configurations. - -## Limitations - -None, really. The tool will tell you if it can't convert a part of a template, -and whether that is a critical error or just a warning. Most of Veewee's -functions translate perfectly over to Packer. There are still a couple missing -features in Packer, but they're minimal. - -## Bugs - -If you find any bugs, please report them to the [veewee-to-packer issue -tracker](https://github.com/mitchellh/veewee-to-packer). I haven't been able to -exhaustively test every Veewee template, so there are certainly some edge cases -out there. diff --git a/website/data/guides-nav-data.json b/website/data/guides-nav-data.json index 261eff25f..b0631160b 100644 --- a/website/data/guides-nav-data.json +++ b/website/data/guides-nav-data.json @@ -45,27 +45,6 @@ } ] }, - { - "title": "Workflow Tips and Tricks", - "routes": [ - { - "title": "Overview", - "path": "workflow-tips-and-tricks" - }, - { - "title": "Isotime Template Function", - "path": "workflow-tips-and-tricks/isotime-template-function" - }, - { - "title": "Veewee to Packer", - "path": "workflow-tips-and-tricks/veewee-to-packer" - }, - { - "title": "Use jq to strip comments from a Packer template", - "path": "workflow-tips-and-tricks/use-packer-with-comment" - } - ] - }, { "title": "Build Immutable Infrastructure with Packer in CI/CD", "routes": [ diff --git a/website/redirects.next.js b/website/redirects.next.js index f019fe236..2fe7333e2 100644 --- a/website/redirects.next.js +++ b/website/redirects.next.js @@ -24,11 +24,6 @@ module.exports = [ destination: '/docs/builders/azure', permanent: true, }, - { - source: '/docs/templates/veewee-to-packer', - destination: '/guides/veewee-to-packer', - permanent: true, - }, { source: '/docs/extend/developing-plugins', destination: '/docs/plugins',