coder / coder/internal

Terraform Resources for Dev Containers

Abierto
#1,237 1 comentario 0 reacciones 0 asignados Ver en GitHub
epic
Lenguaje dominante
Sin datos de lenguaje
Estrellas
3
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

# Epic: Terraform Resources for Dev Containers

## Summary

Enable template authors to attach Terraform resources (`coder_app`, `coder_script`, `coder_env`, `coder_ai_task`) to `coder_devcontainer` resources, eliminating the need to choose between Dev Containers and our collection of Terraform modules.

## Problem Statement

**Opting in** to Dev Containers requires **opting out** of our collection of Terraform modules as there is no way of associating terraform resources to the `coder_devcontainer` resource.

Agents used for Dev Containers are created dynamically *after* workspace provisioning. Since the sub-agent doesn't exist at Terraform plan/apply time, there is no way to reference it in Terraform.

## Solution Overview

### Phase 1: Terraform-defined Resources

Introduce a computed `subagent_id` field on the `coder_devcontainer` resource that can be referenced by other Terraform resources. This ID is pre-computed at plan time and used when the sub-agent is created at runtime.

```hcl
resource "coder_devcontainer" "main" {
agent_id = coder_agent.main.id
workspace_folder = "/workspaces/project"
}

resource "coder_app" "code_server" {
agent_id = coder_devcontainer.main.subagent_id
slug = "code-server"
display_name = "VS Code"
url = "http://localhost:8080"
}
```

### Phase 2: `devcontainer.json`-defined Resources

Enable Terraform modules to be defined directly in `devcontainer.json` via `customizations.coder.modules`, allowing developers to attach modules to their dev container without modifying Terraform templates. The modules are provisioned by coderd using `coder/preview`.

```json
{
"customizations": {
"coder": {
"modules": {
"registry.coder.com/coder/code-server/coder:1.0.0": {},
"registry.coder.com/coder/zed/coder:1": {
"folder": "/home/coder/coder"
}
}
}
}
}
```

The key format is `:` and the value is an object of key-value mappings where each key is translated into a Terraform variable.

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.