Editor
The editor resource provides a browser-based code editor tab that allows users to view and edit files. It supports multiple workspaces that can access files from the local filesystem or remote containers, enabling file manipulation within the lab environment.
Use Cases
Section titled “Use Cases”As a lab author, you can use editor resources to provide file editing capabilities:
- Configuration Management: Allow users to edit application config files, server settings, and deployment configurations
- Code Development: Provide an integrated development environment for writing, modifying, and reviewing source code
- Multi-Environment Access: Access files from both the sandbox filesystem and across multiple containers in the same editor
Editor resources provide familiar file editing experiences within the lab interface, supporting hands-on learning with real file systems.
HCL Syntax
Section titled “HCL Syntax”Basic Syntax
Section titled “Basic Syntax”resource "editor" "name" { workspace "config" { directory = "/app/config" }}
Full Syntax
Section titled “Full Syntax”resource "editor" "name" { workspace "local_files" { directory = "assets/templates" }
workspace "container_config" { target = resource.container.app_server directory = "/etc/app" }
workspace "source_code" { target = resource.container.dev_env directory = "/workspace/src" }}
Fields
Section titled “Fields”Field | Required | Type | Description |
---|---|---|---|
workspace | ✓ | block | Workspace definitions (repeatable) |
Workspace Block
Section titled “Workspace Block”editor → workspace
Defines a file workspace that appears as a folder tree in the editor.
Field | Required | Type | Description |
---|---|---|---|
name | ✓ | label | Workspace name (shown in editor sidebar) |
directory | ✓ | string | Path to the directory to expose |
target | reference to container | Container to access files from. Defaults to local filesystem. |
Deprecated Fields
Section titled “Deprecated Fields”Field | Type | Description |
---|---|---|
title |
string | DEPRECATED: Use the title field on the tab in your layout instead |
Validation Rules
Section titled “Validation Rules”- Directory paths: Relative paths are resolved relative to the config file location for local workspaces
- Target references: When specified, can only reference container resources
- Workspace names: Must be unique within the editor
- Directory access: Target containers must have the specified directories
Examples
Section titled “Examples”Local File Editing
Section titled “Local File Editing”resource "editor" "config_editor" { workspace "templates" { directory = "assets/config-templates" }
workspace "scripts" { directory = "files/setup-scripts" }}
Remote Container Files
Section titled “Remote Container Files”resource "editor" "app_editor" { workspace "nginx_config" { target = resource.container.web_server directory = "/etc/nginx/conf.d" }
workspace "app_logs" { target = resource.container.web_server directory = "/var/log/nginx" }}
Development Environment
Section titled “Development Environment”resource "editor" "dev_environment" { workspace "source" { target = resource.container.dev_container directory = "/workspace/app" }
workspace "tests" { target = resource.container.dev_container directory = "/workspace/tests" }
workspace "docs" { target = resource.container.dev_container directory = "/workspace/docs" }}
Mixed Local and Remote
Section titled “Mixed Local and Remote”resource "editor" "hybrid_editor" { workspace "local_assets" { directory = "files/static" }
workspace "app_config" { target = resource.container.application directory = "/app/config" }
workspace "database_config" { target = resource.container.postgres directory = "/etc/postgresql" }}
Usage in Layout
Section titled “Usage in Layout”Editors must be referenced in layout tabs:
resource "layout" "with_editor" { column { width = "40" instructions {} }
column { width = "60"
tab "terminal" { target = resource.terminal.main active = true }
tab "code_editor" { target = resource.editor.config_editor title = "Configuration Files" } }}
File Permissions
Section titled “File Permissions”When accessing files in containers:
# Ensure the target container has proper permissionsRUN mkdir -p /app/config && chmod 755 /app/configRUN chown -R user:user /app/config
For read-only access, files can be mounted as volumes:
resource "container" "app" { image { name = "myapp:latest" }
volume { source = "./config" destination = "/app/config" type = "bind" read_only = true }}
Best Practices
Section titled “Best Practices”- Logical Workspaces: Group related files into meaningful workspaces
- Clear Names: Use descriptive workspace names that indicate content purpose
- Permission Management: Ensure containers have appropriate file permissions
- Directory Structure: Organize files in logical hierarchies within workspaces
- Read-Only Content: Use read-only volumes for reference materials that shouldn’t be modified