Skip to content

Commit b2349d3

Browse files
committed
start traffic
1 parent 486e0f2 commit b2349d3

File tree

9 files changed

+311
-90
lines changed

9 files changed

+311
-90
lines changed

scaletest/terraform/action/coder_proxies.tf

Lines changed: 0 additions & 63 deletions
This file was deleted.

scaletest/terraform/action/coderd.tf

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
data "http" "coder_healthy" {
2+
url = local.deployments.primary.url
3+
// Wait up to 5 minutes for DNS to propagate
4+
retry {
5+
attempts = 30
6+
min_delay_ms = 10000
7+
}
8+
9+
lifecycle {
10+
postcondition {
11+
condition = self.status_code == 200
12+
error_message = "${self.url} returned an unhealthy status code"
13+
}
14+
}
15+
16+
depends_on = [helm_release.coder_primary, cloudflare_record.coder["primary"]]
17+
}
18+
19+
resource "null_resource" "api_key" {
20+
provisioner "local-exec" {
21+
interpreter = ["/bin/bash", "-c"]
22+
command = <<EOF
23+
curl '${local.deployments.primary.url}/api/v2/users/first' \
24+
--data-raw $'{"email":"${local.coder_admin_email}","password":"${local.coder_admin_password}","username":"${local.coder_admin_user}","name":"${local.coder_admin_full_name}","trial":false}' \
25+
--insecure --silent --output /dev/null
26+
27+
session_token=$(curl '${local.deployments.primary.url}/api/v2/users/login' \
28+
--data-raw $'{"email":"${local.coder_admin_email}","password":"${local.coder_admin_password}"}' \
29+
--insecure --silent | jq -r .session_token)
30+
31+
api_key=$(curl '${local.deployments.primary.url}/users/me/keys/tokens' \
32+
-H "Coder-Session-Token: $${session_token}" \
33+
--data-raw '{"token_name":"terraform","scope":"all"}' \
34+
--insecure --silent | jq -r .key)
35+
36+
mkdir -p ${path.module}/.coderv2
37+
echo -n $${api_key} > ${path.module}/.coderv2/api_key
38+
EOF
39+
}
40+
41+
depends_on = [data.http.coder_healthy]
42+
}
43+
44+
data "local_file" "api_key" {
45+
filename = "${path.module}/.coderv2/api_key"
46+
depends_on = [null_resource.api_key]
47+
}
48+
49+
resource "coderd_license" "license" {
50+
license = var.coder_license
51+
lifecycle {
52+
create_before_destroy = true
53+
}
54+
}
55+
56+
resource "coderd_workspace_proxy" "europe" {
57+
name = "europe"
58+
display_name = "Europe"
59+
icon = "/emojis/1f950.png"
60+
61+
depends_on = [coderd_license.license]
62+
}
63+
64+
resource "coderd_workspace_proxy" "asia" {
65+
name = "asia"
66+
display_name = "Asia"
67+
icon = "/emojis/1f35b.png"
68+
69+
depends_on = [coderd_license.license]
70+
}
71+
72+
resource "local_file" "kubernetes_template" {
73+
filename = "${path.module}/.coderv2/templates/kubernetes/main.tf"
74+
content = <<EOF
75+
terraform {
76+
required_providers {
77+
coder = {
78+
source = "coder/coder"
79+
version = "~> 0.23.0"
80+
}
81+
kubernetes = {
82+
source = "hashicorp/kubernetes"
83+
version = "~> 2.30"
84+
}
85+
}
86+
}
87+
88+
provider "coder" {}
89+
90+
provider "kubernetes" {
91+
config_path = null # always use host
92+
}
93+
94+
data "coder_workspace" "me" {}
95+
data "coder_workspace_owner" "me" {}
96+
97+
resource "coder_agent" "main" {
98+
os = "linux"
99+
arch = "amd64"
100+
}
101+
102+
resource "kubernetes_pod" "main" {
103+
count = data.coder_workspace.me.start_count
104+
metadata {
105+
name = "coder-$${lower(data.coder_workspace_owner.me.name)}-$${lower(data.coder_workspace.me.name)}"
106+
namespace = "${local.coder_namespace}"
107+
labels = {
108+
"app.kubernetes.io/name" = "coder-workspace"
109+
"app.kubernetes.io/instance" = "coder-workspace-$${lower(data.coder_workspace_owner.me.name)}-$${lower(data.coder_workspace.me.name)}"
110+
}
111+
}
112+
spec {
113+
security_context {
114+
run_as_user = "1000"
115+
fs_group = "1000"
116+
}
117+
container {
118+
name = "dev"
119+
image = "${var.workspace_image}"
120+
image_pull_policy = "Always"
121+
command = ["sh", "-c", coder_agent.main.init_script]
122+
security_context {
123+
run_as_user = "1000"
124+
}
125+
env {
126+
name = "CODER_AGENT_TOKEN"
127+
value = coder_agent.main.token
128+
}
129+
resources {
130+
requests = {
131+
"cpu" = "${local.scenarios[var.scenario].workspace.cpu_request}"
132+
"memory" = "${local.scenarios[var.scenario].workspace.mem_request}"
133+
}
134+
limits = {
135+
"cpu" = "${local.scenarios[var.scenario].workspace.cpu_limit}"
136+
"memory" = "${local.scenarios[var.scenario].workspace.mem_limit}"
137+
}
138+
}
139+
}
140+
141+
affinity {
142+
node_affinity {
143+
required_during_scheduling_ignored_during_execution {
144+
node_selector_term {
145+
match_expressions {
146+
key = "cloud.google.com/gke-nodepool"
147+
operator = "In"
148+
values = ["${google_container_node_pool.node_pool["primary_workspaces"].name}","${google_container_node_pool.node_pool["europe_workspaces"].name}","${google_container_node_pool.node_pool["asia_workspaces"].name}"]
149+
}
150+
}
151+
}
152+
}
153+
}
154+
}
155+
}
156+
EOF
157+
}
158+
159+
resource "coderd_template" "kubernetes" {
160+
name = "kubernetes"
161+
versions = [{
162+
directory = "${path.module}/.coderv2/templates/kubernetes"
163+
active = true
164+
}]
165+
}

scaletest/terraform/action/deployments.tf

Lines changed: 0 additions & 25 deletions
This file was deleted.

scaletest/terraform/action/gcp_clusters.tf

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,29 @@ data "google_compute_default_service_account" "default" {
44
}
55

66
locals {
7+
deployments = {
8+
primary = {
9+
subdomain = "${var.name}-scaletest"
10+
url = "http://${var.name}-scaletest.${var.cloudflare_domain}"
11+
region = "us-east1"
12+
zone = "us-east1-c"
13+
cidr = "10.200.0.0/24"
14+
}
15+
europe = {
16+
subdomain = "${var.name}-europe-scaletest"
17+
url = "http://${var.name}-europe-scaletest.${var.cloudflare_domain}"
18+
region = "europe-west1"
19+
zone = "europe-west1-b"
20+
cidr = "10.201.0.0/24"
21+
}
22+
asia = {
23+
subdomain = "${var.name}-asia-scaletest"
24+
url = "http://${var.name}-asia-scaletest.${var.cloudflare_domain}"
25+
region = "asia-southeast1"
26+
zone = "asia-southeast1-a"
27+
cidr = "10.202.0.0/24"
28+
}
29+
}
730
node_pools = {
831
primary_coder = {
932
name = "coder"

scaletest/terraform/action/k8s_coder_asia.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ resource "kubernetes_secret" "proxy_token_asia" {
3636
namespace = kubernetes_namespace.coder_asia.metadata.0.name
3737
}
3838
data = {
39-
token = trimspace(data.local_file.asia_proxy_token.content)
39+
token = coderd_workspace_proxy.asia.session_token
4040
}
4141
lifecycle {
4242
ignore_changes = [timeouts, wait_for_service_account_token]

scaletest/terraform/action/k8s_coder_europe.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ resource "kubernetes_secret" "proxy_token_europe" {
3636
namespace = kubernetes_namespace.coder_europe.metadata.0.name
3737
}
3838
data = {
39-
token = trimspace(data.local_file.europe_proxy_token.content)
39+
token = coderd_workspace_proxy.europe.session_token
4040
}
4141
lifecycle {
4242
ignore_changes = [timeouts, wait_for_service_account_token]

scaletest/terraform/action/main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,11 @@ terraform {
3838
source = "cloudflare/cloudflare"
3939
version = "~> 4.0"
4040
}
41+
42+
coderd = {
43+
source = "coder/coderd"
44+
version = "~> 0.0.8"
45+
}
4146
}
4247

4348
required_version = "~> 1.9.0"

scaletest/terraform/action/vars.tf

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,24 @@ variable "provisionerd_image_tag" {
8585
description = "Tag to use for Provisionerd image."
8686
default = "latest"
8787
}
88+
89+
// Traffic
90+
variable "traffic_bytes_per_tick" {
91+
description = "Number of bytes to send per tick."
92+
default = 1024
93+
}
94+
95+
variable "traffic_tick_interval" {
96+
description = "Interval between ticks."
97+
default = "1s"
98+
}
99+
100+
variable "workspace_count" {
101+
description = "Number of workspaces to create."
102+
default = 10
103+
}
104+
105+
variable "workspace_create_concurrency" {
106+
description = "Number of workspaces to create concurrently."
107+
default = 1
108+
}

0 commit comments

Comments
 (0)