the existing infrastructure

This commit is contained in:
Platform team
2026-11-02 09:55:40 +00:00
commit aef641e978
55 changed files with 618 additions and 0 deletions
+29
View File
@@ -0,0 +1,29 @@
apiVersion: quai.dev/v1beta1
kind: ResourceType
metadata:
name: app
title: Application
description: An Argo CD Application that deploys a directory of a team's repository.
icon: rocket
category: Delivery
version: 1.0.0
spec:
locate: { strategy: dir, path: "apps/{name}" }
params:
- { name: name, title: Name, pattern: "[a-z][a-z0-9-]{1,40}" }
schema: schemas/app.schema.json
generate:
kind: component
component: argocd.application
with:
name: ${{ params.name }}
repoURL: ${{ inputs.repoURL }}
path: ${{ inputs.path }}
targetRevision: ${{ inputs.?revision }}
destinationNamespace: ${{ inputs.namespace }}
automated: ${{ inputs.?autoSync.orValue(true) }}
syncOptions: [CreateNamespace=true]
cascadeDelete: true
ownership: { field: owner }
paramFields: { name: name }
deletion: allowed
+27
View File
@@ -0,0 +1,27 @@
apiVersion: quai.dev/v1beta1
kind: ResourceType
metadata:
name: config
title: Configuration
description: Settings for an application, as a ConfigMap in its namespace.
icon: settings
category: Kubernetes
version: 1.0.0
spec:
locate: { strategy: dir, path: "configs/{namespace}/{name}" }
params:
- { name: namespace, title: Namespace, type: enum, discover: true }
- { name: name, title: Name, pattern: "[a-z][a-z0-9-]{1,30}" }
schema: schemas/config.schema.json
generate:
kind: component
component: raw
with:
manifests:
- apiVersion: v1
kind: ConfigMap
metadata: { name: "${{ params.name }}", namespace: "${{ params.namespace }}" }
data: ${{ inputs.data }}
ownership: { field: owner }
paramFields: { name: name, namespace: namespace }
deletion: allowed
+37
View File
@@ -0,0 +1,37 @@
apiVersion: quai.dev/v1beta1
kind: ResourceType
metadata:
name: database
title: PostgreSQL database
description: A managed PostgreSQL instance, claimed from the platform's Crossplane API.
icon: database
category: Data
version: 1.0.0
spec:
locate: { strategy: dir, path: "databases/{namespace}/{name}" }
params:
- { name: namespace, title: Namespace, type: enum, discover: true }
- { name: name, title: Name, pattern: "[a-z][a-z0-9-]{1,30}" }
schema: schemas/database.schema.json
generate:
kind: component
component: crossplane.claim
with:
apiVersion: database.example.org/v1alpha1
kind: PostgreSQLInstance
name: ${{ params.name }}
namespace: ${{ params.namespace }}
spec:
parameters:
version: ${{ inputs.version }}
storageGB: ${{ inputs.storageGB }}
highAvailability: ${{ inputs.?highAvailability.orValue(false) }}
compositionSelector: { matchLabels: { provider: example } }
writeConnectionSecretToRef: { name: "${{ params.name }}-connection" }
ownership: { field: owner }
paramFields: { name: name, namespace: namespace }
deletion: approval
ui:
order: [version, storageGB, highAvailability]
fields:
version: { immutable: true }
+31
View File
@@ -0,0 +1,31 @@
apiVersion: quai.dev/v1beta1
kind: ResourceType
metadata:
name: namespace
title: Team namespace
description: A team's namespace with a quota of CPU and memory requests.
icon: box
category: Kubernetes
version: 1.0.0
spec:
locate: { strategy: dir, path: "namespaces/{name}" }
params:
- { name: name, title: Name, pattern: "[a-z][a-z0-9-]{1,30}" }
schema: schemas/namespace.schema.json
generate:
kind: component
component: k8s.namespace
with:
name: ${{ params.name }}
labels: { team: "${{ inputs.team }}" }
quota:
requests.cpu: ${{ inputs.?cpu }}
requests.memory: ${{ inputs.?memory }}
ownership: { field: owner }
paramFields: { name: name }
deletion: approval
approval:
rules:
- name: quota
when: inputs.?cpu != previous.?cpu || inputs.?memory != previous.?memory
approvers: [group:platform-admins]
+26
View File
@@ -0,0 +1,26 @@
apiVersion: quai.dev/v1beta1
kind: ResourceType
metadata:
name: sync
title: Flux sync
description: A Flux Kustomization that applies a directory of the platform repository to a namespace.
icon: refresh
category: Delivery
version: 1.0.0
spec:
locate: { strategy: dir, path: "flux/{name}" }
params:
- { name: name, title: Name, pattern: "[a-z][a-z0-9-]{1,40}" }
schema: schemas/sync.schema.json
generate:
kind: component
component: flux.kustomization
with:
name: ${{ params.name }}
source: platform
path: ${{ inputs.path }}
interval: ${{ inputs.?interval }}
targetNamespace: ${{ inputs.targetNamespace }}
ownership: { field: owner }
paramFields: { name: name }
deletion: approval