Skip to content

SSD Schema Reference

Keyword: What's the SSD schema?

The Service Spec Definition (SSD) is the YAML manifest that configures how SmartTouch deploys and runs your service. Every SmartTouch service requires a smarttouch.yaml file in the repository root.


service

Required. Identifies the service.

Field Type Required Description
name string Yes Unique service identifier. Lowercase, hyphens only. Maximum 63 characters.
version string Yes SemVer string for example, "1.0.0"
service:
  name: remote-access-service
  version: "1.0.0"

deployment

Required. Configures the runtime deployment.

Field Type Required Default Description
replicas integer Yes Minimum replica count. KEDA scales above this.
image string Yes Full Harbor image URI including tag.
port integer Yes Port your service listens on. Must match EXPOSE in the Docker file.
resources.cpu string No "100m" CPU request. Kubernetes format for example, "250m".
resources.memory string No "128Mi" Memory request. Kubernetes format for example, "256Mi".
deployment:
  replicas: 2
  image: harbor.smarttouch.io/myteam/remote-access-service:1.0.0
  port: 8080
  resources:
    cpu: "250m"
    memory: "256Mi"

Observability

Optional. Enables metrics and distributed tracing.

Field Type Required Default Description
metrics 'boolean' No true Expose a Prometheus metrics endpoint at /metrics on port 8081.
tracing 'boolean' No true Enable OpenTelemetry distributed tracing.
observability:
  metrics: true
  tracing: true

Remote-access

Optional. Configures the SmartTouch remote device access session broker.

Field Type Required Default Description
enabled 'boolean' Yes Must be true to activate the remote access subsystem.
session-timeout duration No "30m" Maximum session duration. Closed automatically when exceeded.
idle-timeout duration No "5m" Sessions idle for this period are closed.
max-concurrent-sessions integer No 10 Platform-wide session limit.
protocols[].name string Yes shell, diagnostics, or file-transfer
protocols[].enabled 'boolean' Yes true to enable this protocol.
access-control.<protocol>.allowed-roles array Yes Roles that can open this protocol type.
audit.enabled 'boolean' No true Enable session audit logging.
audit.retention duration No "30d" How long audit records are retained.
audit.log-keystrokes 'boolean' No false Record every keystroke in shell sessions. Enable only for compliance requirements.
remote-access:
  enabled: true
  session-timeout: "30m"
  idle-timeout: "5m"
  max-concurrent-sessions: 50
  protocols:
    - name: shell
      enabled: true
    - name: diagnostics
      enabled: true
    - name: file-transfer
      enabled: false
  access-control:
    shell:
      allowed-roles: [platform-engineer, administrator]
    diagnostics:
      allowed-roles: [platform-engineer, administrator, developer]
    file-transfer:
      allowed-roles: [administrator]
  audit:
    enabled: true
    retention: "90d"
    log-keystrokes: false

secrets

Optional. Configures Vault secret injection at runtime.

Field Type Required Description
vault-path string Yes Vault path pattern. Use {{env}} as an environment placeholder.
inject[].key string Yes Secret key name in Vault.
inject[].mount-path string Yes File path where the secret is written inside the pod.
secrets:
  vault-path: "secret/remote-access-service/{{env}}"
  inject:
    - key: broker-tls-cert
      mount-path: /vault/secrets/broker.crt
    - key: broker-tls-key
      mount-path: /vault/secrets/broker.key

Config

Optional. References a Kubernetes ConfigMap for environment-specific non-secret configuration.

Field Type Required Description
from-configmap string Yes Name of the ConfigMap to read.
env-vars array Yes List of keys to inject as environment variables.
config:
  from-configmap: remote-access-service-config
  env-vars:
    - SESSION_TIMEOUT
    - MAX_CONCURRENT_SESSIONS
    - IDLE_TIMEOUT

Canary

Optional. Configures a canary deployment alongside the stable version.

Field Type Required Default Description
enabled 'boolean' Yes It must be true to activate canary mode.
stable-version string Yes The version string of the stable deployment.
initial-weight integer No 10 Percentage of new sessions routed to the canary on first deploy.
analysis.metrics[].name string Yes Metric name to evaluate.
analysis.metrics[].threshold number Yes Value above which the canary is automatically halted.
analysis.interval duration No "5m" How often metrics are evaluated.
canary:
  enabled: true
  stable-version: "1.1.0"
  initial-weight: 10
  analysis:
    metrics:
      - name: error-rate
        threshold: 1
      - name: session-open-latency-p99
        threshold: 500
    interval: 5m

Complete example

service:
  name: remote-access-service
  version: "1.2.0"

deployment:
  replicas: 2
  image: harbor.smarttouch.io/myteam/remote-access-service:1.2.0
  port: 8080
  resources:
    cpu: "250m"
    memory: "256Mi"

observability:
  metrics: true
  tracing: true

remote-access:
  enabled: true
  session-timeout: "30m"
  idle-timeout: "5m"
  max-concurrent-sessions: 50
  protocols:
    - name: shell
      enabled: true
    - name: diagnostics
      enabled: true
    - name: file-transfer
      enabled: false
  access-control:
    shell:
      allowed-roles: [platform-engineer, administrator]
    diagnostics:
      allowed-roles: [platform-engineer, administrator, developer]
    file-transfer:
      allowed-roles: [administrator]
  audit:
    enabled: true
    retention: "90d"
    log-keystrokes: false

secrets:
  vault-path: "secret/remote-access-service/{{env}}"
  inject:
    - key: broker-tls-cert
      mount-path: /vault/secrets/broker.crt
    - key: broker-tls-key
      mount-path: /vault/secrets/broker.key

config:
  from-configmap: remote-access-service-config
  env-vars:
    - SESSION_TIMEOUT
    - MAX_CONCURRENT_SESSIONS

Validation

Validate your SSD before committing:

stctl validate --file smarttouch.yaml

All fields are validated against this schema. Unknown fields produce a warning. Invalid values produce an error that blocks deployment.