mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: Allow workspace resources to attach multiple agents (#942)
This enables a "kubernetes_pod" to attach multiple agents that could be for multiple services. Each agent is required to have a unique name, so SSH syntax is: `coder ssh <workspace>.<agent>` A resource can have zero agents too, they aren't required.
This commit is contained in:
@@ -2,7 +2,7 @@ terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "0.2.1"
|
||||
version = "~> 0.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -55,12 +55,6 @@ provider "aws" {
|
||||
data "coder_workspace" "me" {
|
||||
}
|
||||
|
||||
data "coder_agent_script" "dev" {
|
||||
arch = "amd64"
|
||||
auth = "aws-instance-identity"
|
||||
os = "linux"
|
||||
}
|
||||
|
||||
data "aws_ami" "ubuntu" {
|
||||
most_recent = true
|
||||
filter {
|
||||
@@ -75,8 +69,9 @@ data "aws_ami" "ubuntu" {
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
instance_id = aws_instance.dev[0].id
|
||||
arch = "amd64"
|
||||
auth = "aws-instance-identity"
|
||||
os = "linux"
|
||||
}
|
||||
|
||||
locals {
|
||||
@@ -105,7 +100,7 @@ Content-Transfer-Encoding: 7bit
|
||||
Content-Disposition: attachment; filename="userdata.txt"
|
||||
|
||||
#!/bin/bash
|
||||
sudo -E -u ubuntu sh -c '${data.coder_agent_script.dev.value}'
|
||||
sudo -E -u ubuntu sh -c '${coder_agent.dev.init_script}'
|
||||
--//--
|
||||
EOT
|
||||
|
||||
@@ -139,11 +134,9 @@ resource "aws_instance" "dev" {
|
||||
ami = data.aws_ami.ubuntu.id
|
||||
availability_zone = "${var.region}a"
|
||||
instance_type = "t3.micro"
|
||||
count = 1
|
||||
|
||||
user_data = data.coder_workspace.me.transition == "start" ? local.user_data_start : local.user_data_end
|
||||
tags = {
|
||||
Name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}"
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "0.2.1"
|
||||
version = "~> 0.3.1"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -42,12 +42,6 @@ provider "aws" {
|
||||
data "coder_workspace" "me" {
|
||||
}
|
||||
|
||||
data "coder_agent_script" "dev" {
|
||||
arch = "amd64"
|
||||
auth = "aws-instance-identity"
|
||||
os = "windows"
|
||||
}
|
||||
|
||||
data "aws_ami" "windows" {
|
||||
most_recent = true
|
||||
owners = ["amazon"]
|
||||
@@ -59,8 +53,9 @@ data "aws_ami" "windows" {
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
instance_id = aws_instance.dev[0].id
|
||||
arch = "amd64"
|
||||
auth = "aws-instance-identity"
|
||||
os = "windows"
|
||||
}
|
||||
|
||||
locals {
|
||||
@@ -71,7 +66,7 @@ locals {
|
||||
user_data_start = <<EOT
|
||||
<powershell>
|
||||
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
|
||||
${data.coder_agent_script.dev.value}
|
||||
${coder_agent.dev.init_script}
|
||||
</powershell>
|
||||
<persist>true</persist>
|
||||
EOT
|
||||
|
||||
+12
-22
@@ -2,7 +2,7 @@ terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "~> 0.2"
|
||||
version = "~> 0.3.1"
|
||||
}
|
||||
google = {
|
||||
source = "hashicorp/google"
|
||||
@@ -42,25 +42,14 @@ provider "google" {
|
||||
project = jsondecode(var.service_account).project_id
|
||||
}
|
||||
|
||||
data "coder_workspace" "me" {
|
||||
}
|
||||
|
||||
data "coder_agent_script" "dev" {
|
||||
auth = "google-instance-identity"
|
||||
arch = "amd64"
|
||||
os = "linux"
|
||||
}
|
||||
|
||||
data "google_compute_default_service_account" "default" {
|
||||
}
|
||||
|
||||
resource "random_string" "random" {
|
||||
length = 8
|
||||
special = false
|
||||
data "coder_workspace" "me" {
|
||||
}
|
||||
|
||||
resource "google_compute_disk" "root" {
|
||||
name = "coder-${lower(random_string.random.result)}"
|
||||
name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root"
|
||||
type = "pd-ssd"
|
||||
zone = var.zone
|
||||
image = "debian-cloud/debian-9"
|
||||
@@ -69,10 +58,16 @@ resource "google_compute_disk" "root" {
|
||||
}
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
auth = "google-instance-identity"
|
||||
arch = "amd64"
|
||||
os = "linux"
|
||||
}
|
||||
|
||||
resource "google_compute_instance" "dev" {
|
||||
zone = var.zone
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
name = "coder-${lower(random_string.random.result)}"
|
||||
count = data.coder_workspace.me.start_count
|
||||
name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}"
|
||||
machine_type = "e2-medium"
|
||||
network_interface {
|
||||
network = "default"
|
||||
@@ -88,10 +83,5 @@ resource "google_compute_instance" "dev" {
|
||||
email = data.google_compute_default_service_account.default.email
|
||||
scopes = ["cloud-platform"]
|
||||
}
|
||||
metadata_startup_script = data.coder_agent_script.dev.value
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
count = length(google_compute_instance.dev)
|
||||
instance_id = google_compute_instance.dev[0].instance_id
|
||||
metadata_startup_script = coder_agent.dev.init_script
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ terraform {
|
||||
required_providers {
|
||||
coder = {
|
||||
source = "coder/coder"
|
||||
version = "~> 0.2"
|
||||
version = "~> 0.3.1"
|
||||
}
|
||||
google = {
|
||||
source = "hashicorp/google"
|
||||
@@ -45,22 +45,11 @@ provider "google" {
|
||||
data "coder_workspace" "me" {
|
||||
}
|
||||
|
||||
data "coder_agent_script" "dev" {
|
||||
auth = "google-instance-identity"
|
||||
arch = "amd64"
|
||||
os = "windows"
|
||||
}
|
||||
|
||||
data "google_compute_default_service_account" "default" {
|
||||
}
|
||||
|
||||
resource "random_string" "random" {
|
||||
length = 8
|
||||
special = false
|
||||
}
|
||||
|
||||
resource "google_compute_disk" "root" {
|
||||
name = "coder-${lower(random_string.random.result)}"
|
||||
name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}-root"
|
||||
type = "pd-ssd"
|
||||
zone = var.zone
|
||||
image = "projects/windows-cloud/global/images/windows-server-2022-dc-core-v20220215"
|
||||
@@ -69,9 +58,15 @@ resource "google_compute_disk" "root" {
|
||||
}
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
auth = "google-instance-identity"
|
||||
arch = "amd64"
|
||||
os = "windows"
|
||||
}
|
||||
|
||||
resource "google_compute_instance" "dev" {
|
||||
zone = var.zone
|
||||
count = data.coder_workspace.me.transition == "start" ? 1 : 0
|
||||
count = data.coder_workspace.me.start_count
|
||||
name = "coder-${data.coder_workspace.me.owner}-${data.coder_workspace.me.name}"
|
||||
machine_type = "e2-medium"
|
||||
network_interface {
|
||||
@@ -89,12 +84,7 @@ resource "google_compute_instance" "dev" {
|
||||
scopes = ["cloud-platform"]
|
||||
}
|
||||
metadata = {
|
||||
windows-startup-script-ps1 = data.coder_agent_script.dev.value
|
||||
windows-startup-script-ps1 = coder_agent.dev.init_script
|
||||
serial-port-enable = "TRUE"
|
||||
}
|
||||
}
|
||||
|
||||
resource "coder_agent" "dev" {
|
||||
count = length(google_compute_instance.dev)
|
||||
instance_id = google_compute_instance.dev[0].instance_id
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user