Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 5 additions & 6 deletions registry/coder/modules/coder-utils/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ The Coder Utils module is a building block for modules that need to run multiple
```tf
module "coder_utils" {
source = "registry.coder.com/coder/coder-utils/coder"
version = "1.0.1"
version = "1.1.0"

agent_id = coder_agent.main.id
agent_name = "myagent"
Expand Down Expand Up @@ -56,10 +56,9 @@ module "coder_utils" {

The module orchestrates scripts in the following order:

1. **Log File Creation** - Creates module directory and log files
2. **Pre-Install Script** (optional) - Runs before installation
3. **Install Script** - Main installation
4. **Post-Install Script** (optional) - Runs after installation
5. **Start Script** - Starts the application
1. **Pre-Install Script** (optional) - Runs before installation
2. **Install Script** (required) - Main installation
3. **Post-Install Script** (optional) - Runs after installation
4. **Start Script** (optional) - Starts the application

Each script waits for its prerequisites to complete before running using `coder exp sync` dependency management.
4 changes: 2 additions & 2 deletions registry/coder/modules/coder-utils/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ describe("coder-utils", async () => {
testRequiredVariables(import.meta.dir, {
agent_id: "test-agent-id",
agent_name: "test-agent",
module_dir_name: ".test-module",
start_script: "echo 'start'",
module_directory: ".test-module",
install_script: "echo 'install'",
});
});
75 changes: 34 additions & 41 deletions registry/coder/modules/coder-utils/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ variable "pre_install_script" {
variable "install_script" {
type = string
description = "Script to install the agent used by AgentAPI."
default = null
}

variable "post_install_script" {
Expand All @@ -41,6 +40,7 @@ variable "post_install_script" {
variable "start_script" {
type = string
description = "Script that starts AgentAPI."
default = null
}

variable "agent_name" {
Expand All @@ -49,33 +49,39 @@ variable "agent_name" {

}

variable "module_dir_name" {
variable "module_directory" {
type = string
description = "The name of the module directory."
description = "The module's working directory for scripts and logs."
}

locals {
encoded_pre_install_script = var.pre_install_script != null ? base64encode(var.pre_install_script) : ""
encoded_install_script = var.install_script != null ? base64encode(var.install_script) : ""
encoded_install_script = base64encode(var.install_script)
encoded_post_install_script = var.post_install_script != null ? base64encode(var.post_install_script) : ""
encoded_start_script = base64encode(var.start_script)
encoded_start_script = var.start_script != null ? base64encode(var.start_script) : ""

pre_install_script_name = "${var.agent_name}-pre_install_script"
install_script_name = "${var.agent_name}-install_script"
post_install_script_name = "${var.agent_name}-post_install_script"
start_script_name = "${var.agent_name}-start_script"

module_dir_path = "$HOME/${var.module_dir_name}"
pre_install_path = "${var.module_directory}/pre_install.sh"
install_path = "${var.module_directory}/install.sh"
post_install_path = "${var.module_directory}/post_install.sh"
start_path = "${var.module_directory}/start.sh"

pre_install_log_path = "${var.module_directory}/pre_install.log"
install_log_path = "${var.module_directory}/install.log"
post_install_log_path = "${var.module_directory}/post_install.log"
start_log_path = "${var.module_directory}/start.log"

pre_install_path = "${local.module_dir_path}/pre_install.sh"
install_path = "${local.module_dir_path}/install.sh"
post_install_path = "${local.module_dir_path}/post_install.sh"
start_path = "${local.module_dir_path}/start.sh"
install_sync_deps = var.pre_install_script != null ? local.pre_install_script_name : null

pre_install_log_path = "${local.module_dir_path}/pre_install.log"
install_log_path = "${local.module_dir_path}/install.log"
post_install_log_path = "${local.module_dir_path}/post_install.log"
start_log_path = "${local.module_dir_path}/start.log"
start_sync_deps = (
var.post_install_script != null
? "${local.install_script_name} ${local.post_install_script_name}"
: local.install_script_name
)
}

resource "coder_script" "pre_install_script" {
Expand All @@ -88,7 +94,7 @@ resource "coder_script" "pre_install_script" {
set -o errexit
set -o pipefail

mkdir -p ${local.module_dir_path}
mkdir -p ${var.module_directory}

trap 'coder exp sync complete ${local.pre_install_script_name}' EXIT
coder exp sync start ${local.pre_install_script_name}
Expand All @@ -109,11 +115,11 @@ resource "coder_script" "install_script" {
set -o errexit
set -o pipefail

mkdir -p ${local.module_dir_path}
mkdir -p ${var.module_directory}

trap 'coder exp sync complete ${local.install_script_name}' EXIT
%{if var.pre_install_script != null~}
coder exp sync want ${local.install_script_name} ${local.pre_install_script_name}
%{if local.install_sync_deps != null~}
coder exp sync want ${local.install_script_name} ${local.install_sync_deps}
%{endif~}
coder exp sync start ${local.install_script_name}
echo -n '${local.encoded_install_script}' | base64 -d > ${local.install_path}
Expand Down Expand Up @@ -145,6 +151,7 @@ resource "coder_script" "post_install_script" {
}

resource "coder_script" "start_script" {
count = var.start_script != null ? 1 : 0
agent_id = var.agent_id
display_name = "Start Script"
run_on_start = true
Expand All @@ -155,11 +162,7 @@ resource "coder_script" "start_script" {

trap 'coder exp sync complete ${local.start_script_name}' EXIT

%{if var.post_install_script != null~}
coder exp sync want ${local.start_script_name} ${local.install_script_name} ${local.post_install_script_name}
%{else~}
coder exp sync want ${local.start_script_name} ${local.install_script_name}
%{endif~}
coder exp sync want ${local.start_script_name} ${local.start_sync_deps}
coder exp sync start ${local.start_script_name}

echo -n '${local.encoded_start_script}' | base64 -d > ${local.start_path}
Expand All @@ -169,22 +172,12 @@ resource "coder_script" "start_script" {
EOT
}

output "pre_install_script_name" {
description = "The name of the pre-install script for sync."
value = local.pre_install_script_name
}

output "install_script_name" {
description = "The name of the install script for sync."
value = local.install_script_name
}

output "post_install_script_name" {
description = "The name of the post-install script for sync."
value = local.post_install_script_name
}

output "start_script_name" {
description = "The name of the start script for sync."
value = local.start_script_name
output "script_names" {
description = "The names of the scripts for sync."
value = {
pre_install = var.pre_install_script != null ? local.pre_install_script_name : ""
install = local.install_script_name
post_install = var.post_install_script != null ? local.post_install_script_name : ""
start = var.start_script != null ? local.start_script_name : ""
}
}
Loading
Loading