From 3c482d9fd312ab2f7d0e42429ac3c6c3c4016f8d Mon Sep 17 00:00:00 2001 From: Sujay Samanta Date: Thu, 8 Jan 2026 08:55:58 +0530 Subject: [PATCH] Add Terraform configuration files for stack migration and AWS resources --- _stacks_generated/.terraform-version | 1 + _stacks_generated/.terraform.lock.hcl | 26 ++++++++++++ _stacks_generated/components.tfcomponent.hcl | 28 +++++++++++++ _stacks_generated/deployment.tfdeploy.hcl | 41 +++++++++++++++++++ _stacks_generated/outputs.tfcomponent.hcl | 15 +++++++ _stacks_generated/providers.tfcomponent.hcl | 19 +++++++++ _stacks_generated/variables.tfcomponent.hcl | 40 +++++++++++++++++++ stacks_migration_infra/.terraform.lock.hcl | 42 ++++++++++++++++++++ stacks_migration_infra/main.tf | 36 +++++++++++++++++ stacks_migration_infra/output.tf | 20 ++++++++++ stacks_migration_infra/variables.tf | 30 ++++++++++++++ 11 files changed, 298 insertions(+) create mode 100755 _stacks_generated/.terraform-version create mode 100755 _stacks_generated/.terraform.lock.hcl create mode 100755 _stacks_generated/components.tfcomponent.hcl create mode 100755 _stacks_generated/deployment.tfdeploy.hcl create mode 100755 _stacks_generated/outputs.tfcomponent.hcl create mode 100755 _stacks_generated/providers.tfcomponent.hcl create mode 100755 _stacks_generated/variables.tfcomponent.hcl create mode 100644 stacks_migration_infra/.terraform.lock.hcl create mode 100644 stacks_migration_infra/main.tf create mode 100644 stacks_migration_infra/output.tf create mode 100644 stacks_migration_infra/variables.tf diff --git a/_stacks_generated/.terraform-version b/_stacks_generated/.terraform-version new file mode 100755 index 0000000..d0e60d6 --- /dev/null +++ b/_stacks_generated/.terraform-version @@ -0,0 +1 @@ +1.13.5 \ No newline at end of file diff --git a/_stacks_generated/.terraform.lock.hcl b/_stacks_generated/.terraform.lock.hcl new file mode 100755 index 0000000..bb3e5b7 --- /dev/null +++ b/_stacks_generated/.terraform.lock.hcl @@ -0,0 +1,26 @@ +# This file is maintained automatically by "terraform stacks providers-lock". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "6.27.0" + hashes = [ + "h1:6PyQLswSmmWDFh6G2H4XIeBG8kY0pKAPKLoBarRdfNs=", + "h1:bixp2PSsP5ZGBczGCxcbSDn6lF5QFlUXlNroq9cdab4=", + "h1:emgTfB1LXSFYh9uAwgsRMoMIN5Wz7jNNKq3rqC0EHWk=", + "zh:177a24b806c72e8484b5cabc93b2b38e3d770ae6f745a998b54d6619fd0e8129", + "zh:4ac4a85c14fb868a3306b542e6a56c10bd6c6d5a67bc0c9b8f6a9060cf5f3be7", + "zh:552652185bc85c8ba1da1d65dea47c454728a5c6839c458b6dcd3ce71c19ccfc", + "zh:60284b8172d09aee91eae0856f09855eaf040ce3a58d6933602ae17c53f8ed04", + "zh:6be38d156756ca61fb8e7c752cc5d769cd709686700ac4b230f40a6e95b5dbc9", + "zh:7a409138fae4ef42e3a637e37cb9efedf96459e28a3c764fc4e855e8db9a7485", + "zh:8070cf5224ed1ed3a3e9a59f7c30ff88bf071c7567165275d477c1738a56c064", + "zh:894439ef340a9a79f69cd759e27ad11c7826adeca27be1b1ca82b3c9702fa300", + "zh:89d035eebf08a97c89374ff06040955ddc09f275ecca609d0c9d58d149bef5cf", + "zh:985b1145d724fc1f38369099e4a5087141885740fd6c0b1dbc492171e73c2e49", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:a80b47ae8d1475201c86bd94a5dcb9dd4da5e8b73102a90820b68b66b76d50fd", + "zh:d3395be1556210f82199b9166a6b2e677cee9c4b67e96e63f6c3a98325ad7ab0", + "zh:db0b869d09657f6f1e4110b56093c5fcdf9dbdd97c020db1e577b239c0adcbce", + "zh:ffc72e680370ae7c21f9bd3082c6317730df805c6797427839a6b6b7e9a26a01", + ] +} diff --git a/_stacks_generated/components.tfcomponent.hcl b/_stacks_generated/components.tfcomponent.hcl new file mode 100755 index 0000000..6f95134 --- /dev/null +++ b/_stacks_generated/components.tfcomponent.hcl @@ -0,0 +1,28 @@ +# Generated by tf-migrate 2.0.0-beta1 + + +component "ec2_instance" { + source = "terraform-aws-modules/ec2-instance/aws" + + inputs = { + "ami" = var.ami_id + "instance_type" = var.instance_type + "monitoring" = true + "name" = var.instance_name + "subnet_id" = "subnet-04ac8df91e75657c9" + "tags" = { + Terraform = "true" + Environment = "dev" + } + "vpc_security_group_ids" = [] + } + + version = "~> 6.0" + + + providers = { + aws = provider.aws.this + } +} + + diff --git a/_stacks_generated/deployment.tfdeploy.hcl b/_stacks_generated/deployment.tfdeploy.hcl new file mode 100755 index 0000000..f309ee5 --- /dev/null +++ b/_stacks_generated/deployment.tfdeploy.hcl @@ -0,0 +1,41 @@ +# Generated by tf-migrate 2.0.0-beta1 + + + +# Note on stacks authentication: +# tf-migrate cannot generate stack authentication, this needs to be manually added before execute +# More on authentication - https://developer.hashicorp.com/terraform/language/stacks/deploy/authenticate + +store "varset" "tokens" { + id = "varset-xvfRyT1qNahGfpWm" + category = "env" +} + +deployment "dev-workspace" { + inputs = { + access_key = store.varset.tokens.AWS_ACCESS_KEY_ID + secret_key = store.varset.tokens.AWS_SECRET_ACCESS_KEY + session_token = store.varset.tokens.AWS_SESSION_TOKEN + ami_id = "ami-0dee22c13ea7a9a67" + instance_name = "stack-v3-test-dev-instance" + instance_type = "t3.micro" + } + import = true +} + + + +deployment "prod-workspace" { + inputs = { + access_key = store.varset.tokens.AWS_ACCESS_KEY_ID + secret_key = store.varset.tokens.AWS_SECRET_ACCESS_KEY + session_token = store.varset.tokens.AWS_SESSION_TOKEN + instance_name = "stack-v3-test-prod-instance" + instance_type = "t3.micro" + ami_id = "ami-0dee22c13ea7a9a67" + } + import = true +} + + + diff --git a/_stacks_generated/outputs.tfcomponent.hcl b/_stacks_generated/outputs.tfcomponent.hcl new file mode 100755 index 0000000..07f7503 --- /dev/null +++ b/_stacks_generated/outputs.tfcomponent.hcl @@ -0,0 +1,15 @@ +# Generated by tf-migrate 2.0.0-beta1 + + +output "instance_id" { + description = "The ID of the EC2 instance" + value = component.ec2_instance.id + type = string +} + +output "instance_public_ip" { + description = "The public IP address of the EC2 instance" + value = component.ec2_instance.public_ip + type = string +} + diff --git a/_stacks_generated/providers.tfcomponent.hcl b/_stacks_generated/providers.tfcomponent.hcl new file mode 100755 index 0000000..f1fe711 --- /dev/null +++ b/_stacks_generated/providers.tfcomponent.hcl @@ -0,0 +1,19 @@ +# Generated by tf-migrate 2.0.0-beta1 + + + +provider "aws" "this" { + config { + region = "ap-south-1" + access_key = var.access_key + secret_key = var.secret_key + token = var.session_token + } +} + +required_providers { + aws = { + source = "hashicorp/aws" + version = ">= 4.66.0, >= 5.0.0" + } +} diff --git a/_stacks_generated/variables.tfcomponent.hcl b/_stacks_generated/variables.tfcomponent.hcl new file mode 100755 index 0000000..c786be7 --- /dev/null +++ b/_stacks_generated/variables.tfcomponent.hcl @@ -0,0 +1,40 @@ +# Generated by tf-migrate 2.0.0-beta1 + + +variable "instance_name" { + description = "Name to be used on all resources as prefix" + type = string + default = "example-instance" +} + +variable "instance_type" { + description = "The type of instance to start" + type = string + default = "t3.micro" +} + +variable "ami_id" { + description = "ID of AMI to use for the instance" + type = string + default = "ami-0dee22c13ea7a9a67" # Amazon Linux 2023 AMI in ap-south-1 (verify this if needed, but using a placeholder/common one is usually okay for templates) +} + +variable "access_key" { + description = "AWS access key" + type = string + ephemeral = true +} + +variable "secret_key" { + description = "AWS sensitive secret key." + type = string + sensitive = true + ephemeral = true +} + +variable "session_token" { + description = "AWS session token." + type = string + sensitive = true + ephemeral = true +} \ No newline at end of file diff --git a/stacks_migration_infra/.terraform.lock.hcl b/stacks_migration_infra/.terraform.lock.hcl new file mode 100644 index 0000000..2795e4f --- /dev/null +++ b/stacks_migration_infra/.terraform.lock.hcl @@ -0,0 +1,42 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/tfe" { + version = "0.72.0" + constraints = ">= 0.67.0" + hashes = [ + "h1:DSx+rdyWBkDyBcollXYzGehREnCvwe5dyNT+gK0S0YQ=", + "zh:0c5a72feab8b911d8ecd618aa875e59693f7ba18d01cac2938693d15d9a3de88", + "zh:2e902f3f26d76f856767c7033de01de94f2128779602eec530ff7b03775ff379", + "zh:4489a949eb07bc606947ae8fedc2e681d12db1ea63915f88698cb2e594fca478", + "zh:541d4532c875b2ee7ecb98da9a1461e76788893b623b0adf7c634d9fff7770e3", + "zh:78db652be0568fafc326e995e3eff153381a0d3abf1ecf96347f1bdf65a2e881", + "zh:89f71cbc5ee52afd5e98bf4603d3f2528bb6272cfb77f0215d9c5ffab3c06d6a", + "zh:a6bd22d4425b425a97cffbb85eddafb9c958ed15d4b95146a0c6da15d97bf098", + "zh:a72507ca718c3040845f14e7f3e72a8fe3fc8b581edcdfc301305e0087b19991", + "zh:a8eb3261495366e739e155d9b65864d88387c409552ccf82e50b9553a3a4ab89", + "zh:aab6de3906be0f112b3ed04179624cd34200b258517f9fad1830af97ac4ef708", + "zh:e194e5d053bd95bbf57dc6ab326850c36ad3938573ba4281b5e465a7ffafb7ab", + "zh:f603f1e884c8a194ea762526f2e462d22599d02fe12cb83ab0c030369be4bd4e", + ] +} + +provider "registry.terraform.io/hashicorp/tfmigrate" { + version = "2.0.0-beta1" + constraints = "2.0.0-beta1" + hashes = [ + "h1:mKHG4z8k+qLDkP+MpPdXu8THvgs2l4/NzxWHBBOR+Zs=", + "zh:1c2433b959b06ed4d1ee77bd41e15c43af6c3eb06a1117b061b152faeb189c0c", + "zh:3ddd5866281772c7c6ed1afbbedbe19646aff7630155b783dc7e553788a5fad0", + "zh:46ee906b17321ba58bcba267acdacf141cec6173d9da16fbe12e4e6299586ea5", + "zh:864d0b62faec50e435e0b410bde3d60e8bede42929ea34f9156ba5545c6f8ebe", + "zh:890df766e9b839623b1f0437355032a3c006226a6c200cd911e15ee1a9014e9f", + "zh:8ab21f0c9014493c3d3676e87b90558aee1a50b48235820a5eb5f537b73bb0e0", + "zh:925cacc6649881255a64faef44a30a525762592de8de321cea24d0374e972ac9", + "zh:9e6b69a03b46881c290965187b471f463467e74101c0caa0b2a26c243fa728a7", + "zh:9fee5bf7e51705a4dc5631d38d1642582845673d61285195358ee2349dd194d1", + "zh:c27ae5372c7b96d0eb42ef63c3377be92b89239553a611ea94a3d3656dc65a8c", + "zh:d26605feea4eb31ef7fec832095d449b0249b8e0bf556fab275e5edf6ed38568", + "zh:e28ab6f7754a0ae63844ed336ccffd6390a722a196260bf595b66c931a5a4549", + ] +} diff --git a/stacks_migration_infra/main.tf b/stacks_migration_infra/main.tf new file mode 100644 index 0000000..576b11d --- /dev/null +++ b/stacks_migration_infra/main.tf @@ -0,0 +1,36 @@ +terraform { + required_providers { + tfe = { + source = "hashicorp/tfe" + version = ">= 0.67.0" + } + tfmigrate = { + source = "hashicorp/tfmigrate" + version = "2.0.0-beta1" + } + } +} + +provider "tfe" { + hostname = var.tfe_hostname + organization = var.organization_name +} + +resource "tfe_project" "stack_project" { + name = var.project_name + organization = var.organization_name +} + +resource "tfe_stack" "stack" { + name = var.stack_name + project_id = tfe_project.stack_project.id +} + +resource "tfmigrate_stack_migration" "stack_migration" { + config_file_dir = var.stacks_config_file_dir + organization = var.organization_name + name = tfe_stack.stack.name + project = tfe_project.stack_project.name + terraform_config_dir = var.terraform_config_dir + workspace_deployment_mapping = var.workspace_deployment_mapping +} \ No newline at end of file diff --git a/stacks_migration_infra/output.tf b/stacks_migration_infra/output.tf new file mode 100644 index 0000000..8c6ced1 --- /dev/null +++ b/stacks_migration_infra/output.tf @@ -0,0 +1,20 @@ +output "project_url" { + value = "https://app.terraform.io/app/${var.organization_name}/projects/${tfe_project.stack_project.id}" +} + +output "stack_url" { + value = "https://app.terraform.io/app/${var.organization_name}/projects/${tfe_project.stack_project.id}/stacks/${tfe_stack.stack.id}" +} + +locals { + stack_deployment_details = ( + tfmigrate_stack_migration.stack_migration.migration_hash != "" ? + provider::tfmigrate::decode_stacks_migration_hash_to_json( + tfmigrate_stack_migration.stack_migration.migration_hash + ) : null + ) +} + +output "stack_deployment_details" { + value = local.stack_deployment_details +} \ No newline at end of file diff --git a/stacks_migration_infra/variables.tf b/stacks_migration_infra/variables.tf new file mode 100644 index 0000000..ccc3659 --- /dev/null +++ b/stacks_migration_infra/variables.tf @@ -0,0 +1,30 @@ +variable "organization_name" { + default = "sujay-test-01" +} + +variable "tfe_hostname" { + default = "app.terraform.io" +} + +variable "project_name" { + default = "stacks-demo-v3" +} + +variable "stack_name" { + default = "hello-stacks-v3" +} + +variable "stacks_config_file_dir" { + default = "/Users/sujaysamanta/Workspace/Cursor-AI/terraform-stacks-migration-test/stack-terraform-test-v4/fantastic-octo-computing-machine/_stacks_generated" +} + +variable "terraform_config_dir" { + default = "/Users/sujaysamanta/Workspace/Cursor-AI/terraform-stacks-migration-test/stack-terraform-test-v4/fantastic-octo-computing-machine" +} + +variable "workspace_deployment_mapping" { + default = { + dev-workspace = "dev-workspace" + prod-workspace = "prod-workspace" + } +}