apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition metadata: name: piecedtenants.pieced.ch annotations: controller-gen.kubebuilder.io/version: v0.17.2 spec: group: pieced.ch names: kind: PiecedTenant listKind: PiecedTenantList plural: piecedtenants singular: piecedtenant shortNames: - pt scope: Cluster versions: - name: v1alpha1 served: true storage: true subresources: status: {} additionalPrinterColumns: - name: Display Name type: string jsonPath: .spec.displayName - name: Phase type: string jsonPath: .status.phase - name: Namespace type: string jsonPath: .status.tenantNamespace - name: Age type: date jsonPath: .metadata.creationTimestamp schema: openAPIV3Schema: type: object description: PiecedTenant represents a customer tenant on the PieCed IT multi-tenant platform. properties: apiVersion: type: string kind: type: string metadata: type: object spec: type: object required: - displayName properties: displayName: type: string description: Human-readable tenant name. packages: type: array description: Enabled package IDs from the catalog. items: type: string agentId: type: string description: OpenClaw agent identifier. Defaults to "assistant". agentName: type: string description: Display name of the agent. Defaults to "Assistant". storageSize: type: string description: PVC size for OpenClaw workspace. Defaults to "5Gi". workspaceFiles: type: object description: > MD files seeded into the agent workspace on first boot. Keys are filenames (SOUL.md, AGENTS.md, TOOLS.md), values are content. Seeded once — runtime mutations persist on PVC. additionalProperties: type: string channelUsers: type: object description: > Maps channel names (telegram, discord, etc.) to lists of authorized user IDs. Sets dmPolicy to "allowlist" and populates allowFrom for each channel in the OpenClawInstance config. additionalProperties: type: array items: type: string suspend: type: boolean description: Stops reconciliation without deleting resources. openClawImage: type: object description: > Per-tenant override for the OpenClaw container image tag. When unset, the operator uses the platform default from the pieced-openclaw-config ConfigMap. Set by platform admins via the portal; customer- facing onboarding does not expose this field. properties: tag: type: string description: Image tag (e.g. "2026.4.22"). status: type: object properties: conditions: type: array items: type: object properties: type: type: string status: type: string lastTransitionTime: type: string format: date-time reason: type: string message: type: string required: - type - status - lastTransitionTime - reason phase: type: string tenantNamespace: type: string litellmTeamId: type: string litellmKeyAlias: type: string enabledPackages: type: array items: type: string suspendedAt: type: string format: date-time warnings: type: array items: type: object required: - source properties: source: type: string reason: type: string message: type: string since: type: string format: date-time observedGeneration: type: integer format: int64