add build.name to hcl code (#10114)

This commit is contained in:
Megan Marsh 2020-10-16 01:57:42 -07:00 committed by GitHub
parent a17b1a5a89
commit 66b81d9bee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 49 additions and 5 deletions

View File

@ -138,7 +138,7 @@ func TestBuild(t *testing.T) {
},
{
name: "build name: HCL",
name: "source name: HCL",
args: []string{
"-parallel-builds=1", // to ensure order is kept
testFixture("build-name-and-type"),
@ -297,7 +297,6 @@ func TestBuild(t *testing.T) {
},
},
},
{
name: "hcl - recipes - only recipes",
args: []string{
@ -314,6 +313,17 @@ func TestBuild(t *testing.T) {
},
},
},
{
name: "hcl - build.name accessible",
args: []string{
filepath.Join(testFixture("build-name-and-type"), "buildname.pkr.hcl"),
},
fileCheck: fileCheck{
expected: []string{
"pineapple.pizza.txt",
},
},
},
}
for _, tt := range tc {

View File

@ -0,0 +1,16 @@
source "null" "pizza" {
communicator = "none"
}
build {
name = "pineapple"
sources = [
"sources.null.pizza",
]
provisioner "shell-local" {
inline = [
"echo '' > ${build.name}.${source.name}.txt"
]
}
}

View File

@ -31,6 +31,9 @@ func (p *HCL2Provisioner) HCL2Prepare(buildVars map[string]interface{}) error {
if len(buildVars) > 0 {
ectx = p.evalContext.NewChild()
buildValues := map[string]cty.Value{}
if !p.evalContext.Variables[buildAccessor].IsNull() {
buildValues = p.evalContext.Variables[buildAccessor].AsValueMap()
}
for k, v := range buildVars {
switch v := v.(type) {
case string:

View File

@ -383,6 +383,7 @@ func (cfg *PackerConfig) GetBuilds(opts packer.GetBuildsOptions) ([]packer.Build
for _, k := range append(packer.BuilderDataCommonKeys, generatedVars...) {
unknownBuildValues[k] = cty.StringVal("<unknown>")
}
unknownBuildValues["name"] = cty.StringVal(build.Name)
variables := map[string]cty.Value{
sourcesAccessor: cty.ObjectVal(src.ctyValues()),

View File

@ -18,14 +18,28 @@ Build variables will allow you to access connection information and basic instan
All special build variables are stored in the `build` variable:
```hcl
provisioner "shell" {
source "null" "first-example" {
communicator = "none"
}
build {
name = "my-build-name"
sources = ["null.first-example"]
provisioner "shell-local" {
environment_vars = ["TESTVAR=${build.PackerRunUUID}"]
inline = ["echo $TESTVAR"]
inline = ["echo source.name is ${source.name}.",
"echo build.name is ${build.name}.",
"echo build.PackerRunUUID is $TESTVAR"]
}
}
```
Here is the list of available build variables:
- **name** Represents the name of the build block being run. This is different
than the name of the source block being run.
- **ID**: Represents the vm being provisioned. For example, in Amazon it is the instance id; in digitalocean,
it is the droplet id; in Vmware, it is the vm name.