diff --git a/.changelog/1052.txt b/.changelog/1052.txt new file mode 100644 index 000000000..b426ca536 --- /dev/null +++ b/.changelog/1052.txt @@ -0,0 +1,5 @@ +```release-note:improvement +Waypoint resources for templates and add-on definitions no longer require setting +a `terraform_cloud_workspace_details` resource, and instead can be set by the +`terraform_project_id` param. +``` diff --git a/docs/resources/waypoint_add_on_definition.md b/docs/resources/waypoint_add_on_definition.md index e9b91d764..be309dce2 100644 --- a/docs/resources/waypoint_add_on_definition.md +++ b/docs/resources/waypoint_add_on_definition.md @@ -20,13 +20,14 @@ Waypoint Add-on Definition resource - `name` (String) The name of the Add-on Definition. - `summary` (String) A short summary of the Add-on Definition. - `terraform_no_code_module_source` (String) Terraform Cloud no-code Module Source, expected to be in one of the following formats: "app.terraform.io/hcp_waypoint_example/ecs-advanced-microservice/aws" or "private/hcp_waypoint_example/ecs-advanced-microservice/aws" +- `terraform_project_id` (String) The ID of the Terraform Cloud Project to create workspaces in. The ID is found on the Terraform Cloud Project settings page. ### Optional - `labels` (List of String) List of labels attached to this Add-on Definition. - `project_id` (String) The ID of the HCP project where the Waypoint Add-on Definition is located. - `readme_markdown_template` (String) The markdown template for the Add-on Definition README (markdown format supported). -- `terraform_cloud_workspace_details` (Attributes) Terraform Cloud Workspace details. If not provided, defaults to the HCP Terraform project of the associated application. (see [below for nested schema](#nestedatt--terraform_cloud_workspace_details)) +- `terraform_cloud_workspace_details` (Attributes, Deprecated) Terraform Cloud Workspace details. If not provided, defaults to the HCP Terraform project of the associated application. (see [below for nested schema](#nestedatt--terraform_cloud_workspace_details)) - `variable_options` (Attributes Set) List of variable options for the Add-on Definition. (see [below for nested schema](#nestedatt--variable_options)) ### Read-Only diff --git a/docs/resources/waypoint_template.md b/docs/resources/waypoint_template.md index f22c27220..a0af66eed 100644 --- a/docs/resources/waypoint_template.md +++ b/docs/resources/waypoint_template.md @@ -18,8 +18,8 @@ Waypoint Template resource - `name` (String) The name of the Template. - `summary` (String) A brief description of the template, up to 110 characters -- `terraform_cloud_workspace_details` (Attributes) Terraform Cloud Workspace details (see [below for nested schema](#nestedatt--terraform_cloud_workspace_details)) - `terraform_no_code_module_source` (String) Terraform Cloud No-Code Module details +- `terraform_project_id` (String) The ID of the Terraform Cloud Project to create workspaces in. The ID is found on the Terraform Cloud Project settings page. ### Optional @@ -27,6 +27,7 @@ Waypoint Template resource - `labels` (List of String) List of labels attached to this Template. - `project_id` (String) The ID of the HCP project where the Waypoint Template is located. - `readme_markdown_template` (String) Instructions for using the template (markdown format supported). +- `terraform_cloud_workspace_details` (Attributes, Deprecated) Terraform Cloud Workspace details (see [below for nested schema](#nestedatt--terraform_cloud_workspace_details)) - `variable_options` (Attributes Set) List of variable options for the template (see [below for nested schema](#nestedatt--variable_options)) ### Read-Only diff --git a/internal/provider/waypoint/resource_waypoint_add_on_definition.go b/internal/provider/waypoint/resource_waypoint_add_on_definition.go index 744cd0ebe..11ec392e3 100644 --- a/internal/provider/waypoint/resource_waypoint_add_on_definition.go +++ b/internal/provider/waypoint/resource_waypoint_add_on_definition.go @@ -47,6 +47,7 @@ type AddOnDefinitionResourceModel struct { Description types.String `tfsdk:"description"` ReadmeMarkdownTemplate types.String `tfsdk:"readme_markdown_template"` + TerraformProjectID types.String `tfsdk:"terraform_project_id"` TerraformCloudWorkspace types.Object `tfsdk:"terraform_cloud_workspace_details"` TerraformNoCodeModuleSource types.String `tfsdk:"terraform_no_code_module_source"` TerraformVariableOptions []*tfcVariableOption `tfsdk:"variable_options"` @@ -109,9 +110,17 @@ func (r *AddOnDefinitionResource) Schema(ctx context.Context, req resource.Schem Description: "The markdown template for the Add-on Definition README (markdown format supported).", Optional: true, }, + "terraform_project_id": schema.StringAttribute{ + Required: true, + Description: "The ID of the Terraform Cloud Project to create workspaces in. The ID is found on the Terraform Cloud Project settings page.", + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, "terraform_cloud_workspace_details": &schema.SingleNestedAttribute{ - Optional: true, - Computed: true, + DeprecationMessage: "terraform_cloud_workspace_details is deprecated, use terraform_project_id instead", + Optional: true, + Computed: true, Description: "Terraform Cloud Workspace details. If not provided, defaults to " + "the HCP Terraform project of the associated application.", Attributes: map[string]schema.Attribute{ @@ -254,18 +263,6 @@ func (r *AddOnDefinitionResource) Create(ctx context.Context, req resource.Creat VariableOptions: varOpts, } - // Decode the base64 encoded readme markdown template to see if it is encoded - readmeBytes, err := base64.StdEncoding.DecodeString(plan.ReadmeMarkdownTemplate.ValueString()) - // If there is an error, we assume that it is because the string is not encoded. This is ok and - // we will just use the string as is in the ReadmeTemplate field of the model. - // Eventually the ReadMeMarkdownTemplate field will be deprecated, so the default behavior will be to - // expect the readme to not be encoded - if err != nil { - modelBody.ReadmeTemplate = plan.ReadmeMarkdownTemplate.ValueString() - } else { - modelBody.ReadmeMarkdownTemplate = readmeBytes - } - if !plan.TerraformCloudWorkspace.IsNull() && !plan.TerraformCloudWorkspace.IsUnknown() { workspaceDetails := &tfcWorkspace{} diags := plan.TerraformCloudWorkspace.As(ctx, workspaceDetails, basetypes.ObjectAsOptions{}) @@ -273,12 +270,33 @@ func (r *AddOnDefinitionResource) Create(ctx context.Context, req resource.Creat resp.Diagnostics.Append(diags...) return } + + if workspaceDetails.Name.IsNull() { + // Set a default if none provided + workspaceDetails.Name = plan.Name + } + if workspaceDetails.TerraformProjectID.IsNull() { + // Set a default if none provided + workspaceDetails.TerraformProjectID = plan.TerraformProjectID + } modelBody.TerraformCloudWorkspaceDetails = &waypointModels.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ Name: workspaceDetails.Name.ValueString(), ProjectID: workspaceDetails.TerraformProjectID.ValueString(), } } + // Decode the base64 encoded readme markdown template to see if it is encoded + readmeBytes, err := base64.StdEncoding.DecodeString(plan.ReadmeMarkdownTemplate.ValueString()) + // If there is an error, we assume that it is because the string is not encoded. This is ok and + // we will just use the string as is in the ReadmeTemplate field of the model. + // Eventually the ReadMeMarkdownTemplate field will be deprecated, so the default behavior will be to + // expect the readme to not be encoded + if err != nil { + modelBody.ReadmeTemplate = plan.ReadmeMarkdownTemplate.ValueString() + } else { + modelBody.ReadmeMarkdownTemplate = readmeBytes + } + params := &waypoint_service.WaypointServiceCreateAddOnDefinitionParams{ NamespaceID: ns.ID, Body: modelBody, @@ -498,18 +516,6 @@ func (r *AddOnDefinitionResource) Update(ctx context.Context, req resource.Updat VariableOptions: varOpts, } - // Decode the base64 encoded readme markdown template to see if it is encoded - readmeBytes, err := base64.StdEncoding.DecodeString(plan.ReadmeMarkdownTemplate.ValueString()) - // If there is an error, we assume that it is because the string is not encoded. This is ok and - // we will just use the string as is in the ReadmeTemplate field of the model. - // Eventually the ReadMeMarkdownTemplate field will be deprecated, so the default behavior will be to - // expect the readme to not be encoded - if err != nil { - modelBody.ReadmeTemplate = plan.ReadmeMarkdownTemplate.ValueString() - } else { - modelBody.ReadmeMarkdownTemplate = readmeBytes - } - if !plan.TerraformCloudWorkspace.IsNull() && !plan.TerraformCloudWorkspace.IsUnknown() { workspaceDetails := &tfcWorkspace{} diags := plan.TerraformCloudWorkspace.As(ctx, workspaceDetails, basetypes.ObjectAsOptions{}) @@ -517,12 +523,33 @@ func (r *AddOnDefinitionResource) Update(ctx context.Context, req resource.Updat resp.Diagnostics.Append(diags...) return } + + if workspaceDetails.Name.IsNull() { + // Set a default if none provided + workspaceDetails.Name = plan.Name + } + if workspaceDetails.TerraformProjectID.IsNull() { + // Grab the top level project ID if this was not provided + workspaceDetails.TerraformProjectID = plan.TerraformProjectID + } modelBody.TerraformCloudWorkspaceDetails = &waypointModels.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ Name: workspaceDetails.Name.ValueString(), ProjectID: workspaceDetails.TerraformProjectID.ValueString(), } } + // Decode the base64 encoded readme markdown template to see if it is encoded + readmeBytes, err := base64.StdEncoding.DecodeString(plan.ReadmeMarkdownTemplate.ValueString()) + // If there is an error, we assume that it is because the string is not encoded. This is ok and + // we will just use the string as is in the ReadmeTemplate field of the model. + // Eventually the ReadMeMarkdownTemplate field will be deprecated, so the default behavior will be to + // expect the readme to not be encoded + if err != nil { + modelBody.ReadmeTemplate = plan.ReadmeMarkdownTemplate.ValueString() + } else { + modelBody.ReadmeMarkdownTemplate = readmeBytes + } + params := &waypoint_service.WaypointServiceUpdateAddOnDefinitionParams{ NamespaceID: ns.ID, Body: modelBody, diff --git a/internal/provider/waypoint/resource_waypoint_add_on_definition_test.go b/internal/provider/waypoint/resource_waypoint_add_on_definition_test.go index 3721f14d1..2441663ff 100644 --- a/internal/provider/waypoint/resource_waypoint_add_on_definition_test.go +++ b/internal/provider/waypoint/resource_waypoint_add_on_definition_test.go @@ -142,14 +142,15 @@ resource "hcp_waypoint_add_on_definition" "test" { name = %q summary = "some summary for fun" description = "some description for fun" - terraform_no_code_module = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" } variable_options = [ - { - name = "string_variable" + { + name = "string_variable" variable_type = "string" options = [ "b" diff --git a/internal/provider/waypoint/resource_waypoint_add_on_test.go b/internal/provider/waypoint/resource_waypoint_add_on_test.go index 15d4e2cb5..116eb183f 100644 --- a/internal/provider/waypoint/resource_waypoint_add_on_test.go +++ b/internal/provider/waypoint/resource_waypoint_add_on_test.go @@ -191,6 +191,7 @@ resource "hcp_waypoint_template" "test" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -208,6 +209,7 @@ resource "hcp_waypoint_add_on_definition" "test" { summary = "some summary for fun" description = "some description for fun" terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -228,6 +230,7 @@ resource "hcp_waypoint_template" "test" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -246,17 +249,18 @@ resource "hcp_waypoint_add_on_definition" "test_var_opts" { description = "some description for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" } labels = ["fallout", "vault-tec"] variable_options = [ - { - name = "vault_dweller_name" + { + name = "vault_dweller_name" variable_type = "string" user_editable = true - options = [ + options = [ "lucy", "courier", "lone-wanderer", @@ -264,10 +268,10 @@ resource "hcp_waypoint_add_on_definition" "test_var_opts" { ] }, { - name = "faction" + name = "faction" variable_type = "string" user_editable = true - options = [ + options = [ "ncr", "brotherhood-of-steel", "caesars-legion", @@ -284,16 +288,16 @@ resource "hcp_waypoint_add_on" "test_var_opts" { application_id = hcp_waypoint_application.test.id add_on_input_variables = [ - { - name = "faction" + { + name = "faction" variable_type = "string" - value = "brotherhood-of-steel" + value = "brotherhood-of-steel" }, { - name = "vault_dweller_name" + name = "vault_dweller_name" variable_type = "string" - value = "courier" - } + value = "courier" + } ] } @@ -307,6 +311,7 @@ resource "hcp_waypoint_template" "test" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -324,26 +329,27 @@ resource "hcp_waypoint_add_on_definition" "test_var_opts" { summary = "some summary for fun" description = "some description" readme_markdown_template = base64encode("# Some Readme") - terraform_no_code_module = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" } labels = ["fallout", "vault-tec"] variable_options = [ - { - name = "vault_dweller_name" + { + name = "vault_dweller_name" variable_type = "string" user_editable = false - options = [ + options = [ "lone-wanderer", ] }, { - name = "faction" + name = "faction" variable_type = "string" user_editable = false - options = [ + options = [ "brotherhood-of-steel", ] }, @@ -351,7 +357,7 @@ resource "hcp_waypoint_add_on_definition" "test_var_opts" { } resource "hcp_waypoint_add_on" "test_var_opts" { - name = "%s" + name = "%s" definition_id = hcp_waypoint_add_on_definition.test_var_opts.id application_id = hcp_waypoint_application.test.id }`, tempName, appName, defName, addOnName) diff --git a/internal/provider/waypoint/resource_waypoint_application_test.go b/internal/provider/waypoint/resource_waypoint_application_test.go index 67f88f4d1..d4c1e8760 100644 --- a/internal/provider/waypoint/resource_waypoint_application_test.go +++ b/internal/provider/waypoint/resource_waypoint_application_test.go @@ -192,10 +192,8 @@ resource "hcp_waypoint_template" "test" { name = "%s" summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") - terraform_no_code_module = { - source = "private/waypoint-tfc-testing/waypoint-template-starter/null" - version = "0.0.2" - } + terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -216,6 +214,7 @@ resource "hcp_waypoint_template" "test_var_opts" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -274,25 +273,26 @@ resource "hcp_waypoint_template" "test_var_opts" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" } labels = ["fallout", "vault-tec"] variable_options = [ - { - name = "vault_dweller_name" + { + name = "vault_dweller_name" variable_type = "string" user_editable = false - options = [ + options = [ "lone-wanderer", ] }, { - name = "faction" + name = "faction" variable_type = "string" user_editable = false - options = [ + options = [ "brotherhood-of-steel", ] }, diff --git a/internal/provider/waypoint/resource_waypoint_template.go b/internal/provider/waypoint/resource_waypoint_template.go index 7cf1c3579..d5c51e5d6 100644 --- a/internal/provider/waypoint/resource_waypoint_template.go +++ b/internal/provider/waypoint/resource_waypoint_template.go @@ -50,17 +50,12 @@ type TemplateResourceModel struct { Description types.String `tfsdk:"description"` ReadmeMarkdownTemplate types.String `tfsdk:"readme_markdown_template"` + TerraformProjectID types.String `tfsdk:"terraform_project_id"` TerraformCloudWorkspace *tfcWorkspace `tfsdk:"terraform_cloud_workspace_details"` TerraformNoCodeModuleSource types.String `tfsdk:"terraform_no_code_module_source"` TerraformVariableOptions []*tfcVariableOption `tfsdk:"variable_options"` } -type tfcWorkspace struct { - Name types.String `tfsdk:"name"` - // this refers to the project ID found in Terraform Cloud - TerraformProjectID types.String `tfsdk:"terraform_project_id"` -} - func (t tfcWorkspace) attrTypes() map[string]attr.Type { return map[string]attr.Type{ "name": types.StringType, @@ -68,6 +63,12 @@ func (t tfcWorkspace) attrTypes() map[string]attr.Type { } } +type tfcWorkspace struct { + Name types.String `tfsdk:"name"` + // this refers to the project ID found in Terraform Cloud + TerraformProjectID types.String `tfsdk:"terraform_project_id"` +} + type tfcVariableOption struct { Name types.String `tfsdk:"name"` VariableType types.String `tfsdk:"variable_type"` @@ -132,9 +133,17 @@ func (r *TemplateResource) Schema(ctx context.Context, req resource.SchemaReques listplanmodifier.UseStateForUnknown(), }, }, - "terraform_cloud_workspace_details": &schema.SingleNestedAttribute{ + "terraform_project_id": schema.StringAttribute{ Required: true, - Description: "Terraform Cloud Workspace details", + Description: "The ID of the Terraform Cloud Project to create workspaces in. The ID is found on the Terraform Cloud Project settings page.", + PlanModifiers: []planmodifier.String{ + stringplanmodifier.RequiresReplace(), + }, + }, + "terraform_cloud_workspace_details": &schema.SingleNestedAttribute{ + DeprecationMessage: "terraform_cloud_workspace_details is deprecated, use terraform_project_id instead", + Optional: true, + Description: "Terraform Cloud Workspace details", Attributes: map[string]schema.Attribute{ "name": &schema.StringAttribute{ Required: true, @@ -260,18 +269,27 @@ func (r *TemplateResource) Create(ctx context.Context, req resource.CreateReques }) } + tfProjID := plan.TerraformProjectID.ValueString() + tfWsName := plan.TerraformCloudWorkspace.Name.ValueString() + if tfWsName == "" { + // NOTE: this field is optional anyways, so if its unset, lets just use + // the template name for it. + tfWsName = plan.Name.ValueString() + } + tfWsDetails := &waypoint_models.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ + Name: tfWsName, + ProjectID: tfProjID, + } + modelBody := &waypoint_models.HashicorpCloudWaypointWaypointServiceCreateApplicationTemplateBody{ ApplicationTemplate: &waypoint_models.HashicorpCloudWaypointApplicationTemplate{ - Name: plan.Name.ValueString(), - Summary: plan.Summary.ValueString(), - Labels: strLabels, - Description: plan.Description.ValueString(), - ModuleSource: plan.TerraformNoCodeModuleSource.ValueString(), - TerraformCloudWorkspaceDetails: &waypoint_models.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ - Name: plan.TerraformCloudWorkspace.Name.ValueString(), - ProjectID: plan.TerraformCloudWorkspace.TerraformProjectID.ValueString(), - }, - VariableOptions: varOpts, + Name: plan.Name.ValueString(), + Summary: plan.Summary.ValueString(), + Labels: strLabels, + Description: plan.Description.ValueString(), + ModuleSource: plan.TerraformNoCodeModuleSource.ValueString(), + TerraformCloudWorkspaceDetails: tfWsDetails, + VariableOptions: varOpts, }, } @@ -521,18 +539,27 @@ func (r *TemplateResource) Update(ctx context.Context, req resource.UpdateReques }) } + tfProjID := plan.TerraformProjectID.ValueString() + tfWsName := plan.TerraformCloudWorkspace.Name.ValueString() + if tfWsName == "" { + // NOTE: this field is optional anyways, so if its unset, lets just use + // the template name for it. + tfWsName = plan.Name.ValueString() + } + tfWsDetails := &waypoint_models.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ + Name: tfWsName, + ProjectID: tfProjID, + } + modelBody := &waypoint_models.HashicorpCloudWaypointWaypointServiceUpdateApplicationTemplateBody{ ApplicationTemplate: &waypoint_models.HashicorpCloudWaypointApplicationTemplate{ - Name: plan.Name.ValueString(), - Summary: plan.Summary.ValueString(), - Labels: strLabels, - Description: plan.Description.ValueString(), - ModuleSource: plan.TerraformNoCodeModuleSource.ValueString(), - TerraformCloudWorkspaceDetails: &waypoint_models.HashicorpCloudWaypointTerraformCloudWorkspaceDetails{ - Name: plan.TerraformCloudWorkspace.Name.ValueString(), - ProjectID: plan.TerraformCloudWorkspace.TerraformProjectID.ValueString(), - }, - VariableOptions: varOpts, + Name: plan.Name.ValueString(), + Summary: plan.Summary.ValueString(), + Labels: strLabels, + Description: plan.Description.ValueString(), + ModuleSource: plan.TerraformNoCodeModuleSource.ValueString(), + TerraformCloudWorkspaceDetails: tfWsDetails, + VariableOptions: varOpts, }, } diff --git a/internal/provider/waypoint/resource_waypoint_template_test.go b/internal/provider/waypoint/resource_waypoint_template_test.go index 1f6cd2ff7..164e82541 100644 --- a/internal/provider/waypoint/resource_waypoint_template_test.go +++ b/internal/provider/waypoint/resource_waypoint_template_test.go @@ -158,6 +158,7 @@ resource "hcp_waypoint_template" "test" { summary = "some summary for fun" readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-template-starter/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o" @@ -173,6 +174,7 @@ resource "hcp_waypoint_template" "var_opts_test" { summary = "A template with a variable with options." readme_markdown_template = base64encode("# Some Readme") terraform_no_code_module_source = "private/waypoint-tfc-testing/waypoint-vault-dweller/null" + terraform_project_id = "prj-gfVyPJ2q2Aurn25o" terraform_cloud_workspace_details = { name = "Default Project" terraform_project_id = "prj-gfVyPJ2q2Aurn25o"