From 8fa06f91fc459dc422b8462747c326f411b83959 Mon Sep 17 00:00:00 2001 From: "Matthew C. Morgan" Date: Fri, 13 Feb 2026 14:00:11 -0500 Subject: [PATCH] look up portfolio and product ids --- common/data.tf | 8 ++++++++ common/defaults.tf | 13 +++++++------ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/common/data.tf b/common/data.tf index d333f63..ffd5ed3 100644 --- a/common/data.tf +++ b/common/data.tf @@ -40,3 +40,11 @@ data "aws_servicecatalog_provisioning_artifacts" "this" { accept_language = var.accept_language product_id = var.product_id } + +data "external" "portfolio" { + program = ["bash", "-c", "aws servicecatalog list-portfolios --region ${local.region} --query 'PortfolioDetails[?contains(Name, `Service Portfolio for`)] | [0] | {id: id}' --output json"] +} + +data "external" "product" { + program = ["bash", "-c", "aws servicecatalog search-products --region ${local.region} --filters 'SearchQuery=EC2 Instance' --query 'ProductViewSummaries[?contains(Name, `RHEL`)] | [0] | {id: ProductId}' --output json"] +} diff --git a/common/defaults.tf b/common/defaults.tf index cc6b5c2..3fc712d 100644 --- a/common/defaults.tf +++ b/common/defaults.tf @@ -1,11 +1,12 @@ locals { vpc_id = data.aws_vpc.vpc.id + az_name = data.aws_subnet.subnets[sort(data.aws_subnets.subnets.ids)[0]].availability_zone + + # Use provided portfolio_id or fall back to external data source lookup + portfolio_id = var.portfolio_id != null ? var.portfolio_id : try(data.external.portfolio.result.id, null) - # Portfolio ID is required - must be provided via var.portfolio_id - portfolio_id = var.portfolio_id - - # Product ID is required - must be provided via var.product_id - product_id = var.product_id + # Use provided product_id or fall back to external data source lookup + product_id = var.product_id != null ? var.product_id : try(data.external.product.result.id, null) # Get the latest provisioning artifact ID latest_artifact_id = try( @@ -22,7 +23,7 @@ locals { default_parameters = { ProjectName = var.project_name VpcId = local.vpc_id - AZName = data.aws_subnet.subnets[sort(data.aws_subnets.subnets.ids)[0]].availability_zone + AZName = local.az_name InstanceType = var.instance_type OSName = var.os_name Creator = var.creator