From 934122b9dcec63b0729519b7ab1d3084c09df704 Mon Sep 17 00:00:00 2001 From: Radek Simko Date: Mon, 22 May 2023 15:17:47 +0100 Subject: [PATCH] schema: Add v1.4 local-exec provisioner quiet attribute (#218) --- internal/schema/0.15/provisioners.go | 12 ++++++-- internal/schema/1.4/provisioners.go | 42 ++++++++++++++++++++++++++++ internal/schema/1.4/root.go | 18 ++++++++++++ schema/core_schema.go | 4 +++ 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 internal/schema/1.4/provisioners.go create mode 100644 internal/schema/1.4/root.go diff --git a/internal/schema/0.15/provisioners.go b/internal/schema/0.15/provisioners.go index 67649e6e..823efdb8 100644 --- a/internal/schema/0.15/provisioners.go +++ b/internal/schema/0.15/provisioners.go @@ -10,13 +10,19 @@ import ( v014_mod "github.com/hashicorp/terraform-schema/internal/schema/0.14" ) +var ( + FileProvisioner = v014_mod.FileProvisioner + LocalExecProvisioner = v014_mod.LocalExecProvisioner + RemoteExecProvisioner = v014_mod.RemoteExecProvisioner +) + // See https://github.com/hashicorp/terraform/tree/v0.15.0/builtin/provisioners func ProvisionerDependentBodies(v *version.Version) map[schema.SchemaKey]*schema.BodySchema { return map[schema.SchemaKey]*schema.BodySchema{ - labelKey("file"): v014_mod.FileProvisioner, - labelKey("local-exec"): v014_mod.LocalExecProvisioner, - labelKey("remote-exec"): v014_mod.RemoteExecProvisioner, + labelKey("file"): FileProvisioner, + labelKey("local-exec"): LocalExecProvisioner, + labelKey("remote-exec"): RemoteExecProvisioner, } } diff --git a/internal/schema/1.4/provisioners.go b/internal/schema/1.4/provisioners.go new file mode 100644 index 00000000..356cd3d6 --- /dev/null +++ b/internal/schema/1.4/provisioners.go @@ -0,0 +1,42 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package schema + +import ( + "github.com/hashicorp/go-version" + "github.com/hashicorp/hcl-lang/lang" + "github.com/hashicorp/hcl-lang/schema" + "github.com/zclconf/go-cty/cty" + + v0_15_mod "github.com/hashicorp/terraform-schema/internal/schema/0.15" +) + +var ( + FileProvisioner = v0_15_mod.FileProvisioner + LocalExecProvisioner = func() *schema.BodySchema { + // See https: //github.com/hashicorp/terraform/pull/32116/files + bodySchema := v0_15_mod.LocalExecProvisioner + bodySchema.Attributes["quiet"] = &schema.AttributeSchema{ + Constraint: schema.LiteralType{Type: cty.Bool}, + IsOptional: true, + Description: lang.Markdown("Whether to suppress script output"), + } + return bodySchema + }() + RemoteExecProvisioner = v0_15_mod.RemoteExecProvisioner +) + +func ProvisionerDependentBodies(v *version.Version) map[schema.SchemaKey]*schema.BodySchema { + return map[schema.SchemaKey]*schema.BodySchema{ + labelKey("file"): FileProvisioner, + labelKey("local-exec"): LocalExecProvisioner, + labelKey("remote-exec"): RemoteExecProvisioner, + } +} + +func labelKey(value string) schema.SchemaKey { + return schema.NewSchemaKey(schema.DependencyKeys{ + Labels: []schema.LabelDependent{{Index: 0, Value: value}}, + }) +} diff --git a/internal/schema/1.4/root.go b/internal/schema/1.4/root.go new file mode 100644 index 00000000..013c388b --- /dev/null +++ b/internal/schema/1.4/root.go @@ -0,0 +1,18 @@ +// Copyright (c) HashiCorp, Inc. +// SPDX-License-Identifier: MPL-2.0 + +package schema + +import ( + "github.com/hashicorp/go-version" + "github.com/hashicorp/hcl-lang/schema" + + v1_2_mod "github.com/hashicorp/terraform-schema/internal/schema/1.2" +) + +func ModuleSchema(v *version.Version) *schema.BodySchema { + bs := v1_2_mod.ModuleSchema(v) + bs.Blocks["resource"].Body.Blocks["provisioner"].DependentBody = ProvisionerDependentBodies(v) + + return bs +} diff --git a/schema/core_schema.go b/schema/core_schema.go index 655e0919..78f1aecf 100644 --- a/schema/core_schema.go +++ b/schema/core_schema.go @@ -12,6 +12,7 @@ import ( mod_v0_15 "github.com/hashicorp/terraform-schema/internal/schema/0.15" mod_v1_1 "github.com/hashicorp/terraform-schema/internal/schema/1.1" mod_v1_2 "github.com/hashicorp/terraform-schema/internal/schema/1.2" + mod_v1_4 "github.com/hashicorp/terraform-schema/internal/schema/1.4" ) var ( @@ -30,6 +31,9 @@ var ( // It will return error if such schema cannot be found. func CoreModuleSchemaForVersion(v *version.Version) (*schema.BodySchema, error) { ver := v.Core() + if ver.GreaterThanOrEqual(v1_4) { + return mod_v1_4.ModuleSchema(ver), nil + } if ver.GreaterThanOrEqual(v1_2) { return mod_v1_2.ModuleSchema(ver), nil }