Skip to content

Commit 8c54653

Browse files
graylikemeclaude
andcommitted
feat: add roster builder infra (roster.battledroids.ru)
K8s Deployment + Service + Ingress, DNS A record, Terraform variable and output for the Roster Builder frontend. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent 4da4b3a commit 8c54653

5 files changed

Lines changed: 99 additions & 0 deletions

File tree

infra/dns.tf

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,3 +10,10 @@ resource "twc_dns_rr" "api" {
1010
type = "A"
1111
value = var.ingress_ip
1212
}
13+
14+
resource "twc_dns_rr" "roster" {
15+
zone_id = data.twc_dns_zone.main.id
16+
name = "roster"
17+
type = "A"
18+
value = var.ingress_ip
19+
}

infra/k8s/roster.yaml

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: battletech-roster
5+
namespace: battletech
6+
labels:
7+
app: battletech-roster
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: battletech-roster
13+
template:
14+
metadata:
15+
labels:
16+
app: battletech-roster
17+
spec:
18+
containers:
19+
- name: roster
20+
image: ghcr.io/graylikeme/battletech-roster:latest
21+
ports:
22+
- containerPort: 80
23+
livenessProbe:
24+
httpGet:
25+
path: /
26+
port: 80
27+
initialDelaySeconds: 5
28+
periodSeconds: 10
29+
readinessProbe:
30+
httpGet:
31+
path: /
32+
port: 80
33+
initialDelaySeconds: 5
34+
periodSeconds: 10
35+
resources:
36+
requests:
37+
cpu: 50m
38+
memory: 32Mi
39+
limits:
40+
cpu: 200m
41+
memory: 64Mi
42+
---
43+
apiVersion: v1
44+
kind: Service
45+
metadata:
46+
name: battletech-roster
47+
namespace: battletech
48+
spec:
49+
selector:
50+
app: battletech-roster
51+
ports:
52+
- port: 80
53+
targetPort: 80
54+
protocol: TCP
55+
type: ClusterIP
56+
---
57+
apiVersion: networking.k8s.io/v1
58+
kind: Ingress
59+
metadata:
60+
name: battletech-roster
61+
namespace: battletech
62+
annotations:
63+
cert-manager.io/cluster-issuer: letsencrypt-prod
64+
spec:
65+
ingressClassName: nginx
66+
tls:
67+
- hosts:
68+
- roster.battledroids.ru
69+
secretName: roster-battledroids-ru-tls
70+
rules:
71+
- host: roster.battledroids.ru
72+
http:
73+
paths:
74+
- path: /
75+
pathType: Prefix
76+
backend:
77+
service:
78+
name: battletech-roster
79+
port:
80+
number: 80

infra/outputs.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ output "api_dns_record" {
4040
value = "${twc_dns_rr.api.name}.${var.domain}${twc_dns_rr.api.value}"
4141
}
4242

43+
output "roster_dns_record" {
44+
description = "DNS A record for roster subdomain"
45+
value = "${twc_dns_rr.roster.name}.${var.domain}${twc_dns_rr.roster.value}"
46+
}
47+
4348
# --- Network ---
4449

4550
output "vpc_id" {

infra/terraform.tfvars.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ ingress_ip = "91.186.196.173" # K8s worker node external IP
2424

2525
# Application
2626
api_image = "ghcr.io/graylikeme/battletech-api:latest"
27+
roster_image = "ghcr.io/graylikeme/battletech-roster:latest"

infra/variables.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,3 +92,9 @@ variable "api_image" {
9292
type = string
9393
default = "ghcr.io/graylikeme/battletech-api:latest"
9494
}
95+
96+
variable "roster_image" {
97+
description = "Docker image for the Battledroids Roster Builder"
98+
type = string
99+
default = "ghcr.io/graylikeme/battletech-roster:latest"
100+
}

0 commit comments

Comments
 (0)