## Default values for openstack-api-simulator.
## Image: https://hub.docker.com/r/inecs/openstack-api-simulator

replicaCount: 1

image:
  repository: inecs/openstack-api-simulator
  pullPolicy: IfNotPresent
  # Overrides the image tag whose default is the chart appVersion.
  tag: "0.1.1"

imagePullSecrets: []
nameOverride: ""
fullnameOverride: ""

serviceAccount:
  create: true
  annotations: {}
  name: ""

podAnnotations: {}
podLabels: {}

podSecurityContext:
  fsGroup: 10001

securityContext:
  runAsNonRoot: true
  runAsUser: 10001
  runAsGroup: 10001
  allowPrivilegeEscalation: false
  capabilities:
    drop: ["ALL"]
  readOnlyRootFilesystem: true

## Internal simulator Service (FastAPI on 8080). Clients should use gateway.
service:
  type: ClusterIP
  port: 8080

## Nginx api-gateway — OpenStack default ports (same as docker-compose).
## Sets X-OpenStack-Service / X-Forwarded-Port so path roots do not collide.
gateway:
  enabled: true
  image:
    repository: nginx
    tag: "1.28.0-alpine"
    pullPolicy: IfNotPresent
  replicaCount: 1
  service:
    type: ClusterIP
    # Published OpenStack API ports (name → port). Keep in sync with docs/ports.md.
    ports:
      - name: keystone
        port: 5000
      - name: nova
        port: 8774
      - name: neutron
        port: 9696
      - name: glance
        port: 9292
      - name: cinder
        port: 8776
      - name: placement
        port: 8003
      - name: heat
        port: 8004
      - name: heat-cfn
        port: 8000
      - name: swift
        port: 8080
      - name: ironic
        port: 6385
      - name: octavia
        port: 9876
      - name: barbican
        port: 9311
      - name: manila
        port: 8786
      - name: designate
        port: 9001
      - name: magnum
        port: 9511
      - name: zun
        port: 9517
      - name: trove
        port: 8779
      - name: mistral
        port: 8989
      - name: aodh
        port: 8042
      - name: cloudkitty
        port: 8889
      - name: freezer
        port: 9090
      - name: blazar
        port: 1234
      - name: vitrage
        port: 8999
      - name: masakari
        port: 15868
      - name: tacker
        port: 9890
      - name: adjutant
        port: 5050
      - name: watcher
        port: 9322
      - name: zaqar
        port: 8888
      - name: http
        port: 80
  resources:
    requests:
      cpu: 50m
      memory: 64Mi
    limits:
      memory: 256Mi

## Application environment (non-secret).
config:
  logLevel: INFO
  # OpenStack contract packs live under contracts/openstack/<series>/.
  # Optional override for active series at cold start (yoga|antelope|caracal|dalmatian).
  openstackSeries: dalmatian
  requestIdHeader: X-Request-ID

## Secrets. Prefer existingSecret in production.
secret:
  # Create a Secret from the values below when existingSecret is empty.
  create: true
  existingSecret: ""
  # Keys expected in an existing secret (when existingSecret is set):
  #   DATABASE_URL, TICKET_SIGNING_KEY
  ticketSigningKey: "change-me-to-a-long-random-secret"
  # Used only when postgresql.enabled=true and databaseUrl is empty.
  databaseUrl: ""

## Bundled PostgreSQL (official image — same major as docker-compose.release.yml).
postgresql:
  enabled: true
  image:
    repository: postgres
    tag: "17.5-bookworm"
    pullPolicy: IfNotPresent
  auth:
    username: openstack
    password: openstack
    database: openstack_simulator
  persistence:
    enabled: true
    size: 8Gi
    storageClass: ""
  resources:
    requests:
      cpu: 50m
      memory: 128Mi
    limits:
      memory: 512Mi

## External database when postgresql.enabled=false.
externalDatabase:
  host: ""
  port: 5432
  user: openstack
  password: ""
  database: openstack_simulator
  existingSecret: ""
  existingSecretPasswordKey: database-password

## Database migrations.
## Default: idempotent initContainer on the Deployment (recommended).
migrate:
  enabled: true
  asJob: false
  backoffLimit: 20
  activeDeadlineSeconds: 600
  resources: {}

## Optional post-install seed Job (lab data).
## Profiles: minimal | demo  (demo ≈ 1000 servers + full topology)
seed:
  enabled: false
  profile: minimal
  backoffLimit: 3
  resources: {}

resources:
  requests:
    cpu: 100m
    memory: 256Mi
  limits:
    cpu: "1"
    memory: 1Gi

livenessProbe:
  httpGet:
    path: /health/live
    port: http
  initialDelaySeconds: 10
  periodSeconds: 10
  timeoutSeconds: 3
  failureThreshold: 3

readinessProbe:
  httpGet:
    path: /health/ready
    port: http
  initialDelaySeconds: 5
  periodSeconds: 10
  timeoutSeconds: 3
  failureThreshold: 8

nodeSelector: {}
tolerations: []
affinity: {}

## Ingress + TLS via cert-manager (Let's Encrypt).
## Backend is the api-gateway Keystone/UI port (5000) when gateway.enabled.
ingress:
  enabled: false
  className: nginx
  annotations: {}
  hosts:
    - host: os-sim.example.com
      paths:
        - path: /
          pathType: Prefix
  tls:
    - secretName: openstack-api-simulator-tls
      hosts:
        - os-sim.example.com

## cert-manager ClusterIssuers for Let's Encrypt.
## Requires cert-manager already installed in the cluster.
certManager:
  enabled: false
  createClusterIssuer: true
  email: admin@example.com
  issuerName: letsencrypt-prod
  server: https://acme-v02.api.letsencrypt.org/directory
  createStagingIssuer: true
  stagingIssuerName: letsencrypt-staging
  stagingServer: https://acme-staging-v02.api.letsencrypt.org/directory
  useStaging: false
  solverIngressClassName: ""
