From 335c659ef5867a7d915a9c9231e2a9e74d5eb8db Mon Sep 17 00:00:00 2001 From: Brian Guarraci Date: Sun, 18 May 2025 15:34:23 -0700 Subject: [PATCH] Add Terraform deployment for tickerplant example --- .../deploy/terraform/tickerplant/README.md | 14 +++ examples/deploy/terraform/tickerplant/main.tf | 112 ++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 examples/deploy/terraform/tickerplant/README.md create mode 100644 examples/deploy/terraform/tickerplant/main.tf diff --git a/examples/deploy/terraform/tickerplant/README.md b/examples/deploy/terraform/tickerplant/README.md new file mode 100644 index 0000000..659f0bc --- /dev/null +++ b/examples/deploy/terraform/tickerplant/README.md @@ -0,0 +1,14 @@ +# Ticker Plant Terraform Deployment + +This Terraform module deploys the pub-sub ticker plant example `srv_pubsub.kg` to Kubernetes. The script is stored in a `ConfigMap` and executed using the `klongpy-app:latest` image from the Docker example. + +## Usage + +Ensure your Kubernetes context is configured and the `klongpy-app:latest` image is accessible by the cluster. Then run: + +```bash +terraform init +terraform apply +``` + +The deployment creates the `klongpy` namespace, a `Deployment` running the ticker plant, and a `Service` exposing port `8888`. diff --git a/examples/deploy/terraform/tickerplant/main.tf b/examples/deploy/terraform/tickerplant/main.tf new file mode 100644 index 0000000..495c0b2 --- /dev/null +++ b/examples/deploy/terraform/tickerplant/main.tf @@ -0,0 +1,112 @@ +terraform { + required_providers { + kubernetes = { + source = "hashicorp/kubernetes" + version = "~> 2.28" + } + } +} + +provider "kubernetes" { + config_path = var.kubeconfig +} + +variable "kubeconfig" { + description = "Path to kubeconfig file" + type = string + default = "~/.kube/config" +} + +resource "kubernetes_namespace" "klongpy" { + metadata { + name = "klongpy" + } +} + +resource "kubernetes_config_map" "tickerplant_script" { + metadata { + name = "tickerplant-script" + namespace = kubernetes_namespace.klongpy.metadata[0].name + } + + data = { + "srv_pubsub.kg" = file("../../../ipc/srv_pubsub.kg") + } +} + +resource "kubernetes_deployment" "tickerplant" { + metadata { + name = "tickerplant" + namespace = kubernetes_namespace.klongpy.metadata[0].name + labels = { + app = "tickerplant" + } + } + + spec { + replicas = 1 + + selector { + match_labels = { + app = "tickerplant" + } + } + + template { + metadata { + labels = { + app = "tickerplant" + } + } + + spec { + container { + name = "tickerplant" + image = "klongpy-app:latest" + + env { + name = "KG_FILE_PATH" + value = "/scripts/srv_pubsub.kg" + } + + port { + container_port = 8888 + } + + volume_mount { + name = "script-volume" + mount_path = "/scripts" + } + } + + volume { + name = "script-volume" + + config_map { + name = kubernetes_config_map.tickerplant_script.metadata[0].name + } + } + } + } + } +} + +resource "kubernetes_service" "tickerplant" { + metadata { + name = "tickerplant" + namespace = kubernetes_namespace.klongpy.metadata[0].name + } + + spec { + selector = { + app = "tickerplant" + } + + port { + port = 8888 + target_port = 8888 + } + + type = "ClusterIP" + } +}