mirror of https://github.com/hashicorp/packer
Merge pull request #9291 from hashicorp/f-singular-build-source-blocks
Allow to set source fields from a new `build.source` blockpull/9245/head
commit
1147ef9a36
@ -0,0 +1,35 @@
|
||||
---
|
||||
description: >
|
||||
The source block defines what builders are started.
|
||||
layout: docs
|
||||
page_title: build - Blocks
|
||||
sidebar_title: <tt>build</tt>
|
||||
---
|
||||
|
||||
# The `build` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The `build` block defines what builders are started, how to `provision` them
|
||||
and if necessary what to do with their artifacts using `post-process`.
|
||||
|
||||
`@include 'from-1.5/builds/example-block.mdx'`
|
||||
|
||||
|
||||
Define [top-level `source` blocks](/docs/from-1.5/blocks/source) to configure
|
||||
your builders. The list of available builders can be found in the
|
||||
[builders](/docs/builders) section.
|
||||
|
||||
To use builders in a `build` block you can either:
|
||||
|
||||
* Set the `sources` array of string with references to defined sources.
|
||||
|
||||
* Define [build-level `source` blocks](/docs/from-1.5/blocks/build/source) or
|
||||
`sources` to use builders. This also allows you to set specific fields.
|
||||
|
||||
## Related
|
||||
|
||||
* A list of [community
|
||||
builders](/community-tools#community-builders) is available.
|
||||
|
||||
* Create your own [custom builder](/docs/extending/custom-builders) !
|
||||
@ -0,0 +1,29 @@
|
||||
---
|
||||
description: >
|
||||
The post-processor block defines how a post-processor is configured.
|
||||
layout: docs
|
||||
page_title: post-processor - build - Blocks
|
||||
sidebar_title: <tt>post-processor</tt>
|
||||
---
|
||||
|
||||
# The `post-processor` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The `post-processor` block defines how a post-processor is configured.
|
||||
|
||||
```hcl
|
||||
# builds.pkr.hcl
|
||||
build {
|
||||
# ...
|
||||
post-processor "checksum" {
|
||||
checksum_types = [ "md5", "sha512" ]
|
||||
keep_input_artifact = true
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Post-processors run after the image is built by the builder and provisioned by
|
||||
the provisioner(s). Post-processors are optional, and they can be used to
|
||||
upload artifacts, re-package, or more. The list of available post-processors
|
||||
can be found in the [post-processors](/docs/post-processors) section.
|
||||
@ -0,0 +1,32 @@
|
||||
---
|
||||
description: >
|
||||
The provisioner block defines how a provisioner is configured.
|
||||
layout: docs
|
||||
page_title: provisioner - build - Blocks
|
||||
sidebar_title: <tt>provisioner</tt>
|
||||
---
|
||||
|
||||
# The `provisioner` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The `provisioner` block defines how a provisioner is configured.
|
||||
|
||||
```hcl
|
||||
# builds.pkr.hcl
|
||||
build {
|
||||
# ...
|
||||
provisioner "shell" {
|
||||
inline = [
|
||||
"echo provisioning all the things",
|
||||
"echo the value of 'foo' is '${var.foo}'",
|
||||
]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Provisioners use builtin and third-party software to install and configure the
|
||||
machine image after booting. Provisioners prepare the system for use.
|
||||
|
||||
The list of available provisioners can be found in the
|
||||
[provisioners](/docs/provisioners) section.
|
||||
@ -0,0 +1,30 @@
|
||||
---
|
||||
description: >
|
||||
A source block nested in a build block allows you to use an already defined
|
||||
source and to set specific fields.
|
||||
layout: docs
|
||||
page_title: source - build - Blocks
|
||||
sidebar_title: <tt>source</tt>
|
||||
---
|
||||
|
||||
# The `source` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
A `source` block nested in a `build` block allows to use an already defined
|
||||
source and to set specific fields.
|
||||
|
||||
```hcl
|
||||
# builds.pkr.hcl
|
||||
build {
|
||||
source "amazon-ebs.example" {
|
||||
output = "specific-value"
|
||||
}
|
||||
# ...
|
||||
}
|
||||
```
|
||||
|
||||
-> **Note:** It is **not allowed** to set the same field in a top-level source
|
||||
block and in a used source block. For example, if in the above example, the
|
||||
top-level "amazon-ebs.example" source block also had an `output` field;
|
||||
Packer would error.
|
||||
@ -0,0 +1,31 @@
|
||||
---
|
||||
layout: docs
|
||||
page_title: Blocks - Configuration Language
|
||||
sidebar_title: Blocks
|
||||
description: |-
|
||||
The HCL language has a number of blocks that can be used to configure builds.
|
||||
---
|
||||
|
||||
# Built-in Blocks
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The Packer - HCL2 language includes a number of built-in blocks that you can
|
||||
use. A block is a container for configuration.
|
||||
|
||||
Blocks can be defined in multiple files and `packer build folder` will build
|
||||
using solely the files from a directory named `folder`.
|
||||
|
||||
Packer does not support user-defined blocks and so only the blocks built in to
|
||||
the language are available for use. The navigation for this section includes a
|
||||
list of all of the available built-in HCL2 blocks.
|
||||
|
||||
## Config example:
|
||||
|
||||
`@include 'from-1.5/variables/foo-block.mdx'`
|
||||
|
||||
`@include 'from-1.5/locals/example-block.mdx'`
|
||||
|
||||
`@include 'from-1.5/sources/example-block.mdx'`
|
||||
|
||||
`@include 'from-1.5/builds/example-block.mdx'`
|
||||
@ -0,0 +1,23 @@
|
||||
---
|
||||
description: >
|
||||
The locals block also called the local-variable block defines locals within
|
||||
your Packer configuration.
|
||||
layout: docs
|
||||
page_title: locals - Blocks
|
||||
sidebar_title: <tt>locals</tt>
|
||||
---
|
||||
|
||||
# The `locals` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The `locals` block, also called the `local-variable` block, defines locals within
|
||||
your Packer configuration.
|
||||
|
||||
`@include 'from-1.5/locals/example-block.mdx'`
|
||||
|
||||
# More on variables
|
||||
|
||||
- Read the [full locals](/docs/from-1.5/locals) description for a more
|
||||
thorough read.
|
||||
- Read the [variables guide](/guides/hcl/variables) for more examples.
|
||||
@ -0,0 +1,50 @@
|
||||
---
|
||||
description: >
|
||||
The top-level source block defines reusable builder configuration blocks
|
||||
layout: docs
|
||||
page_title: source - Blocks
|
||||
sidebar_title: <tt>source</tt>
|
||||
---
|
||||
|
||||
# The `source` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The top-level `source` block defines reusable builder configuration blocks:
|
||||
|
||||
`@include 'from-1.5/sources/example-block.mdx'`
|
||||
|
||||
You can start builders by refering to those source blocks form a [`build`
|
||||
block](/docs/from-1.5/blocks/build), for example :
|
||||
|
||||
```hcl
|
||||
build {
|
||||
source = [
|
||||
# Here Packer will use a default ami_name when saving the image.
|
||||
"sources.amazon-ebs.example",
|
||||
"sources.amazon-ebs.foo",
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
The build-level [`source` block](/docs/from-1.5/blocks/build/source) allows to
|
||||
set specific source fields.
|
||||
|
||||
```hcl
|
||||
build {
|
||||
source "sources.amazon-ebs.example" {
|
||||
# Here Packer will use the provided ami_name instead of defaulting it.
|
||||
ami_name = "specific"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Related
|
||||
|
||||
* The list of available builders can be found in the [builders](/docs/builders)
|
||||
section.
|
||||
|
||||
* A list of [community
|
||||
builders](/community-tools#community-builders) is available.
|
||||
|
||||
* Create your own [custom builder](/docs/extending/custom-builders) !
|
||||
@ -0,0 +1,37 @@
|
||||
---
|
||||
description: >
|
||||
The variable block, also called the input-variable block, defines variables
|
||||
within your Packer configuration.
|
||||
layout: docs
|
||||
page_title: variable - Blocks
|
||||
sidebar_title: <tt>variable</tt>
|
||||
---
|
||||
|
||||
# The `variable` block
|
||||
|
||||
`@include 'from-1.5/beta-hcl2-note.mdx'`
|
||||
|
||||
The `variable` block, also called the `input-variable` block, defines variables
|
||||
within your Packer configuration. An input-variable cannot be used in another
|
||||
input variable: we recommend using [locals](/docs/from-1.5/blocks/locals) for that instead.
|
||||
|
||||
`@include 'from-1.5/variables/foo-block.mdx'`
|
||||
|
||||
## Default value
|
||||
|
||||
If a default value is set, the variable is optional. Otherwise, the variable
|
||||
**must** be set.
|
||||
|
||||
`@include 'from-1.5/variables/assignment.mdx'`
|
||||
|
||||
Example of a variable assignment from a file:
|
||||
|
||||
`@include 'from-1.5/variables/foo-pkrvar.mdx'`
|
||||
|
||||
`@include 'from-1.5/variables/must-be-set.mdx'`
|
||||
|
||||
# More on variables
|
||||
|
||||
- Read the [full variables](/docs/from-1.5/variables) description for a more
|
||||
thorough read.
|
||||
- Read the [variables guide](/guides/hcl/variables) for more examples.
|
||||
@ -0,0 +1,5 @@
|
||||
-> **Note:** This page is about HCL2 in Packer 1.5 and later. HCL2 support for
|
||||
Packer is still in Beta. Please see the [Packer Issue
|
||||
Tracker](https://github.com/hashicorp/packer/issues/9176) for a list of
|
||||
supported features. For the old-style stable configuration language see
|
||||
[template docs](/docs/templates).
|
||||
@ -0,0 +1,28 @@
|
||||
```hcl
|
||||
# build.pkr.hcl
|
||||
build {
|
||||
|
||||
sources = [
|
||||
# use the plural `sources` block to simply use sources
|
||||
# without changing any field.
|
||||
"source.amazon-ebs.example",
|
||||
]
|
||||
|
||||
source "source.amazon-ebs.example" {
|
||||
# Use the singular `source` block set
|
||||
# specific fields.
|
||||
# Note that fields cannot be overwritten, in other words, you cannot
|
||||
# set the 'output' field from the top-level source block and here.
|
||||
output = "different value"
|
||||
name = var.foo
|
||||
}
|
||||
|
||||
provisioner "shell-local" {
|
||||
inline = ["echo Hello World"]
|
||||
}
|
||||
|
||||
post-processor "shell-local" {
|
||||
inline = ["echo Hello World"]
|
||||
}
|
||||
}
|
||||
```
|
||||
@ -0,0 +1,9 @@
|
||||
```hcl
|
||||
# locals.pkr.hcl
|
||||
locals {
|
||||
# locals can be bare values like:
|
||||
wee = local.baz
|
||||
# locals can also be set with input variables :
|
||||
baz = "Foo is '${var.foo}'"
|
||||
}
|
||||
```
|
||||
@ -0,0 +1,6 @@
|
||||
```hcl
|
||||
# sources.pkr.hcl
|
||||
source "amazon-ebs" "example" {
|
||||
// ...
|
||||
}
|
||||
```
|
||||
@ -0,0 +1,8 @@
|
||||
## Assigning Values to build Variables
|
||||
|
||||
Once a variable is declared in your configuration, you can set it:
|
||||
|
||||
- Individually, with the `-var foo=bar` command line option.
|
||||
- In variable definitions (`.pkrvars.hcl`) files, either specified on the
|
||||
command line or automatically loaded.
|
||||
- As environment variables, for example: `PKR_VAR_foo=bar`
|
||||
@ -0,0 +1,8 @@
|
||||
```hcl
|
||||
# variables.pkr.hcl
|
||||
variable "foo" {
|
||||
type = string
|
||||
default = "the default value of the `foo` variable"
|
||||
description = "description of the `foo` variable"
|
||||
}
|
||||
```
|
||||
@ -0,0 +1,4 @@
|
||||
```hcl
|
||||
# foo.pkrvars.hcl
|
||||
foo = "value"
|
||||
```
|
||||
Loading…
Reference in new issue