K8s deployments and ExternalSecrets for extended bot fleet

Add Deployment, ExternalSecret, and Service manifests for 10 new strategy bots:
- scout (Python)
- assassin (Rust)
- defender (C#)
- farmer (Go)
- kamikaze (Node)
- nomad (Python)
- opportunist (Go)
- pacifist (Node)
- phalanx (Rust)
- raider (Java)

Each bot includes:
- Deployment with ArgoCD Image Updater annotations
- ExternalSecret for OpenBao shared-secret
- ClusterIP service (bot-<name>.acb-bots.svc.cluster.local)

Resource allocations tailored per language (JVM/C#/Rust = higher, Go/Python/Node = lower)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
jedarden 2026-05-22 14:58:41 -04:00
parent 0079812c56
commit 1c8f0aea72
30 changed files with 1210 additions and 0 deletions

View file

@ -0,0 +1,72 @@
# bot-assassin: AssassinBot — Rust strategy bot
# High-priority target elimination, aggressive engagement. Higher CPU/memory due to Rust compilation.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-assassin
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-assassin
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-assassin
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-assassin
template:
metadata:
labels:
app.kubernetes.io/name: bot-assassin
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-assassin:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-assassin-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi

View file

@ -0,0 +1,27 @@
# bot-assassin: ExternalSecret for AssassinBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/assassin
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-assassin-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-assassin
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-assassin-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/assassin
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-assassin: Service for AssassinBot
# DNS: http://bot-assassin.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-assassin
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-assassin
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-assassin
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-defender: DefenderBot — C# strategy bot
# Defensive positioning, core protection, tactical response. Medium-high resource footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-defender
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-defender
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-defender
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-defender
template:
metadata:
labels:
app.kubernetes.io/name: bot-defender
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-defender:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-defender-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 15
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi

View file

@ -0,0 +1,27 @@
# bot-defender: ExternalSecret for DefenderBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/defender
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-defender-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-defender
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-defender-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/defender
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-defender: Service for DefenderBot
# DNS: http://bot-defender.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-defender
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-defender
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-defender
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-farmer: FarmerBot — Go strategy bot
# Sustainable energy harvesting, efficient resource management. Lightweight footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-farmer
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-farmer
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-farmer
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-farmer
template:
metadata:
labels:
app.kubernetes.io/name: bot-farmer
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-farmer:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-farmer-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-farmer: ExternalSecret for FarmerBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/farmer
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-farmer-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-farmer
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-farmer-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/farmer
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-farmer: Service for FarmerBot
# DNS: http://bot-farmer.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-farmer
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-farmer
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-farmer
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-kamikaze: KamikazeBot — Node.js strategy bot
# Aggressive sacrifice tactics, high-risk high-reward engagements. Lightweight-medium footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-kamikaze
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-kamikaze
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-kamikaze
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-kamikaze
template:
metadata:
labels:
app.kubernetes.io/name: bot-kamikaze
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-kamikaze:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-kamikaze-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-kamikaze: ExternalSecret for KamikazeBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/kamikaze
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-kamikaze-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-kamikaze
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-kamikaze-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/kamikaze
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-kamikaze: Service for KamikazeBot
# DNS: http://bot-kamikaze.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-kamikaze
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-kamikaze
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-kamikaze
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-nomad: NomadBot — Python strategy bot
# Roaming strategy, dynamic resource acquisition, adaptable positioning. Lightweight footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-nomad
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-nomad
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-nomad
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-nomad
template:
metadata:
labels:
app.kubernetes.io/name: bot-nomad
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-nomad:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-nomad-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-nomad: ExternalSecret for NomadBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/nomad
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-nomad-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-nomad
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-nomad-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/nomad
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-nomad: Service for NomadBot
# DNS: http://bot-nomad.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-nomad
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-nomad
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-nomad
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-opportunist: OpportunistBot — Go strategy bot
# Capitalizes on enemy mistakes, scavenges energy from conflicts. Lightweight footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-opportunist
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-opportunist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-opportunist
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-opportunist
template:
metadata:
labels:
app.kubernetes.io/name: bot-opportunist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-opportunist:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-opportunist-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-opportunist: ExternalSecret for OpportunistBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/opportunist
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-opportunist-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-opportunist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-opportunist-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/opportunist
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-opportunist: Service for OpportunistBot
# DNS: http://bot-opportunist.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-opportunist
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-opportunist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-opportunist
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-pacifist: PacifistBot — Node.js strategy bot
# Avoids combat entirely, focuses on resource gathering, defensive only. Lightweight-medium footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-pacifist
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-pacifist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-pacifist
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-pacifist
template:
metadata:
labels:
app.kubernetes.io/name: bot-pacifist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-pacifist:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-pacifist-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-pacifist: ExternalSecret for PacifistBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/pacifist
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-pacifist-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-pacifist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-pacifist-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/pacifist
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-pacifist: Service for PacifistBot
# DNS: http://bot-pacifist.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-pacifist
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-pacifist
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-pacifist
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-phalanx: PhalanxBot — Rust strategy bot
# Formation-based defense, coordinated unit movement, defensive stronghold. Higher CPU/memory due to Rust compilation.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-phalanx
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-phalanx
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-phalanx
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-phalanx
template:
metadata:
labels:
app.kubernetes.io/name: bot-phalanx
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-phalanx:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-phalanx-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi

View file

@ -0,0 +1,27 @@
# bot-phalanx: ExternalSecret for PhalanxBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/phalanx
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-phalanx-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-phalanx
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-phalanx-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/phalanx
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-phalanx: Service for PhalanxBot
# DNS: http://bot-phalanx.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-phalanx
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-phalanx
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-phalanx
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-raider: RaiderBot — Java strategy bot
# Rapid strike tactics, hit-and-run engagements, resource disruption. Higher CPU/memory due to JVM.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-raider
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-raider
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-raider
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-raider
template:
metadata:
labels:
app.kubernetes.io/name: bot-raider
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-raider:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-raider-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 15
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 10
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
memory: 256Mi

View file

@ -0,0 +1,27 @@
# bot-raider: ExternalSecret for RaiderBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/raider
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-raider-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-raider
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-raider-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/raider
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-raider: Service for RaiderBot
# DNS: http://bot-raider.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-raider
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-raider
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-raider
ports:
- name: http
port: 80
targetPort: http
protocol: TCP

View file

@ -0,0 +1,72 @@
# bot-scout: ScoutBot — Python strategy bot
# Fast exploration, maps terrain, identifies energy clusters. Lightweight resource footprint.
# HTTP server on port 8080, POST /turn, GET /health.
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: bot-scout
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-scout
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
annotations:
argocd-image-updater.argoproj.io/image-list: app=ronaldraygun/acb-bot-scout
argocd-image-updater.argoproj.io/app.update-strategy: name
argocd-image-updater.argoproj.io/app.allow-tags: 'regexp:^sha-[0-9a-f]+$'
argocd-image-updater.argoproj.io/write-back-method: argocd
reloader.stakater.com/auto: "true"
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: bot-scout
template:
metadata:
labels:
app.kubernetes.io/name: bot-scout
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
restartPolicy: Always
imagePullSecrets:
- name: docker-hub-registry
containers:
- name: bot
image: ronaldraygun/acb-bot-scout:sha-placeholder
imagePullPolicy: Always
env:
- name: BOT_PORT
value: "8080"
- name: BOT_SECRET
valueFrom:
secretKeyRef:
name: acb-bot-scout-secret
key: shared-secret
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 5
periodSeconds: 30
failureThreshold: 3
readinessProbe:
httpGet:
path: /health
port: http
initialDelaySeconds: 3
periodSeconds: 10
failureThreshold: 3
resources:
requests:
cpu: 50m
memory: 64Mi
limits:
memory: 128Mi

View file

@ -0,0 +1,27 @@
# bot-scout: ExternalSecret for ScoutBot shared secret
# Pulls shared_secret from OpenBao at rs-manager/ai-code-battle/bots/scout
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: external-secrets.io/v1
kind: ExternalSecret
metadata:
name: acb-bot-scout-secret
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-scout
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
refreshInterval: 1h
secretStoreRef:
name: openbao
kind: ClusterSecretStore
target:
name: acb-bot-scout-secret
creationPolicy: Owner
data:
- secretKey: shared-secret
remoteRef:
key: rs-manager/ai-code-battle/bots/scout
property: shared_secret

View file

@ -0,0 +1,22 @@
# bot-scout: Service for ScoutBot
# DNS: http://bot-scout.acb-bots.svc.cluster.local
#
# Staging file — sync to declarative-config/k8s/iad-acb/acb-bots/
---
apiVersion: v1
kind: Service
metadata:
name: bot-scout
namespace: acb-bots
labels:
app.kubernetes.io/name: bot-scout
app.kubernetes.io/part-of: ai-code-battle
app.kubernetes.io/component: strategy-bot
spec:
selector:
app.kubernetes.io/name: bot-scout
ports:
- name: http
port: 80
targetPort: http
protocol: TCP