From e7df49987486f25ff85f42d4f28a1aee37926a31 Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Tue, 17 Feb 2026 11:33:05 -0500 Subject: [PATCH] feat: integrate terraform-ls LSP for Terraform development MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add terraform-ls Dockerfile (Alpine-based, v0.38.4) - Add terraform-ls service to docker-compose.yml - Create LSP wrapper script for Crush integration - Add terraform entry to crush.json under lsp section - Update STATUS.md with terraform-ls working status ๐Ÿงก Generated with Crush Assisted-by: GLM-5 via Crush --- STATUS.md | 1 + crush.json | 3 +++ docker-compose.yml | 14 +++++++++++++- dockerfiles/terraform-ls/Dockerfile | 27 +++++++++++++++++++++++++++ lsp-terraform-wrapper.sh | 4 ++++ 5 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 dockerfiles/terraform-ls/Dockerfile create mode 100755 lsp-terraform-wrapper.sh diff --git a/STATUS.md b/STATUS.md index 6128762..d016a67 100644 --- a/STATUS.md +++ b/STATUS.md @@ -77,6 +77,7 @@ All the following ahujasid repositories exist but contain no code (empty repos w - โœ“ bash-language-server: Working (v5.6.0) - stdio-based, configured in crush.json - โœ“ docker-language-server: Working (v0.0.0) - stdio-based, configured in crush.json - โœ“ marksman: Working (2025-12-13) - stdio-based, configured in crush.json +- โœ“ terraform-ls: Working (v0.38.4) - stdio-based, configured in crush.json ## Detailed Status diff --git a/crush.json b/crush.json index 9d85933..17e9761 100644 --- a/crush.json +++ b/crush.json @@ -9,6 +9,9 @@ }, "markdown": { "command": "/home/charles/Projects/KNEL/KNEL-AIMiddleware/lsp-marksman-wrapper.sh" + }, + "terraform": { + "command": "/home/charles/Projects/KNEL/KNEL-AIMiddleware/lsp-terraform-wrapper.sh" } }, "mcp": { diff --git a/docker-compose.yml b/docker-compose.yml index 97e28a9..b0ead40 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -147,7 +147,7 @@ services: - ops # ========================================== - # Development Tools (2 servers) + # Development Tools (3 servers) # ========================================== # Bash Language Server - LSP for bash @@ -162,6 +162,18 @@ services: profiles: - dev + # Terraform Language Server - LSP for Terraform + # NOTE: This is a stdio-based LSP server, run on-demand by Crush via docker run + terraform-ls: + image: kneldevstack-aimiddleware-terraform-ls + build: + context: . + dockerfile: dockerfiles/terraform-ls/Dockerfile + container_name: kneldevstack-aimiddleware-terraform-ls + restart: "no" + profiles: + - dev + # Context7 MCP - Documentation framework # NOTE: This is a stdio-based MCP server, run on-demand by Crush via docker run context7-mcp: diff --git a/dockerfiles/terraform-ls/Dockerfile b/dockerfiles/terraform-ls/Dockerfile new file mode 100644 index 0000000..1030258 --- /dev/null +++ b/dockerfiles/terraform-ls/Dockerfile @@ -0,0 +1,27 @@ +# Terraform Language Server (terraform-ls) +# Official HashiCorp LSP for Terraform +# https://github.com/hashicorp/terraform-ls + +FROM alpine:3.18 + +# Install dependencies +RUN apk add --no-cache \ + curl \ + ca-certificates \ + git \ + unzip + +# Install terraform-ls +ARG TERRAFORM_LS_VERSION=0.38.4 +RUN curl -fsSL https://releases.hashicorp.com/terraform-ls/${TERRAFORM_LS_VERSION}/terraform-ls_${TERRAFORM_LS_VERSION}_linux_amd64.zip \ + -o terraform-ls.zip && \ + unzip terraform-ls.zip && \ + mv terraform-ls /usr/local/bin/ && \ + chmod +x /usr/local/bin/terraform-ls && \ + rm terraform-ls.zip + +# Set up working directory +WORKDIR /workspace + +# Run terraform-ls in stdio mode +ENTRYPOINT ["terraform-ls", "serve"] diff --git a/lsp-terraform-wrapper.sh b/lsp-terraform-wrapper.sh new file mode 100755 index 0000000..691d448 --- /dev/null +++ b/lsp-terraform-wrapper.sh @@ -0,0 +1,4 @@ +#!/bin/bash +docker run -i --rm \ + -v "$(pwd):/workspace" \ + kneldevstack-aimiddleware-terraform-ls