application.yml Reference
Floci-AZ is a Quarkus application. All settings can be overridden via environment variables
(replace . with _ and uppercase, e.g. floci-az.storage.mode โ FLOCI_AZ_STORAGE_MODE).
floci-az:
port: 4577
base-url: http://localhost:4577
# When set, overrides the hostname used in URLs returned by the API
# (e.g. blob SAS URLs, function invoke URLs).
# hostname: myhost.internal
auth:
# Not enforced yet: every value, strict included, accepts any credentials
# without SharedKey signature validation (see the note below the table).
mode: dev
# Azure parity level: compat (default) | azure | strict. Each override
# defaults from it; see the ARM page for what each one changes.
parity: compat
# parity-overrides:
# subscription-listing: true # default: on from azure
# strict-subscriptions: true # default: on from strict
# resource-group-semantics: true # default: on from azure
# resource-group-delete: true # default: on from azure
# strict-resource-groups: true # default: on from strict
# Cloud of the default tenant: AzureCloud | AzureUSGovernment | AzureChinaCloud
cloud:
default: AzureCloud
# Extra tenants and subscriptions for the ARM directory (only id is required)
# tenants:
# - id: 11111111-0000-0000-0000-000000000000
# cloud: AzureUSGovernment
# subscriptions:
# - id: 22222222-0000-0000-0000-000000000000
# tenant-id: 11111111-0000-0000-0000-000000000000
# state: Disabled
storage:
# Global default: applies to every service unless overridden below.
# Supported: memory | persistent | hybrid | wal
mode: memory
path: /app/data
wal:
compaction-interval-ms: 30000
hybrid:
flush-interval-ms: 5000
# Per-service storage overrides (uncomment to activate)
services:
blob:
# mode: wal
flush-interval-ms: 5000
queue:
# mode: hybrid
flush-interval-ms: 5000
table:
# mode: persistent
flush-interval-ms: 5000
app-config:
# mode: persistent
flush-interval-ms: 5000
container-apps:
# mode: persistent
flush-interval-ms: 5000
directory: # ARM tenants and subscriptions
# mode: persistent
flush-interval-ms: 5000
dns:
# When floci-az runs inside Docker, an embedded DNS server starts on UDP/53
# and is injected into every Azure Functions container as their resolver.
# It resolves *.hostname (above) and any extra suffixes to floci-az's
# Docker-network IP so virtual-hosted URLs work from inside function containers.
# extra-suffixes:
# - myapp.internal
docker:
docker-host: unix:///var/run/docker.sock
endpoint-mode: auto # auto ยท published: address sidecars at the Docker daemon's host + published port (remote daemons)
log-max-size: "10m"
log-max-file: "3"
resource-namespace: "" # Optional; inserted into sidecar container/volume names (floci-az-<ns>-...)
ui: # The web console sidecar, started by GET /_floci/ui
enabled: true
image: floci/floci-ui:0.7.0
port: 4500 # Host port; floci-aws's console uses 4500 too
internal-port: 4500 # The console's PORT inside its container
# endpoint: http://floci-az:4577 # How the console reaches floci-az (derived when unset)
keep-running-on-shutdown: false
services:
blob:
enabled: true
# Comma-separated accounts with hierarchical namespace (ADLS Gen2) enabled by default
hierarchical-namespace-accounts: devstoreaccount1
queue:
enabled: true
table:
enabled: true
functions:
enabled: true
# Directory where extracted function code is stored on the host.
code-path: ~/.floci-az/functions
# ephemeral: true โ fresh container per invocation (no warm reuse)
ephemeral: false
# Evict warm containers idle longer than this (seconds); 0 disables eviction
container-idle-timeout-seconds: 300
app-config:
enabled: true
container-apps:
enabled: true
mocked: true
dns-suffix: azurecontainerapps.io
ingress-timeout-seconds: 60
Key Environment Variables
| Environment Variable | Default | Description |
|---|---|---|
FLOCI_AZ_PORT |
4577 |
Listening port |
FLOCI_AZ_AUTH_MODE |
dev |
Not enforced yet: every value behaves like dev and accepts any credentials |
FLOCI_AZ_PARITY |
compat |
Azure parity level: compat, azure or strict; the default for every parity-overrides key |
FLOCI_AZ_PARITY_OVERRIDES_SUBSCRIPTION_LISTING |
(on from azure) |
List subscriptions registered on first use, and echo the directory's subscription id |
FLOCI_AZ_PARITY_OVERRIDES_STRICT_SUBSCRIPTIONS |
(on from strict) |
Refuse unknown subscriptions with 404 SubscriptionNotFound |
FLOCI_AZ_PARITY_OVERRIDES_RESOURCE_GROUP_SEMANTICS |
(on from azure) |
Resource-group re-PUT answers 200, a resource PUT creates a missing group, and groups persist in the directory store |
FLOCI_AZ_PARITY_OVERRIDES_RESOURCE_GROUP_DELETE |
(on from azure) |
Resource-group DELETE is a 202 long-running operation that deletes every resource in the group; a write into a group being deleted is 409, and /resources also lists Monitor, Event Grid and Email resources |
FLOCI_AZ_PARITY_OVERRIDES_STRICT_RESOURCE_GROUPS |
(on from strict) |
Refuse a request for a resource under a missing group with 404 ResourceGroupNotFound; groups persist in the directory store |
FLOCI_AZ_CLOUD_DEFAULT |
AzureCloud |
Cloud of the default tenant. Endpoints, issuers and DNS suffixes stay the public cloud's for now |
FLOCI_AZ_STORAGE_MODE |
memory |
Global storage mode |
FLOCI_AZ_STORAGE_PATH |
/app/data |
Persistence directory |
FLOCI_AZ_STORAGE_SERVICES_BLOB_MODE |
(global) | Per-service blob mode |
FLOCI_AZ_STORAGE_SERVICES_QUEUE_MODE |
(global) | Per-service queue mode |
FLOCI_AZ_STORAGE_SERVICES_TABLE_MODE |
(global) | Per-service table mode |
FLOCI_AZ_STORAGE_SERVICES_APP_CONFIG_MODE |
(global) | Per-service App Configuration mode |
FLOCI_AZ_STORAGE_SERVICES_CONTAINER_APPS_MODE |
(global) | Per-service Container Apps mode |
FLOCI_AZ_STORAGE_SERVICES_DIRECTORY_MODE |
(global) | Per-service mode of the ARM tenant and subscription directory |
FLOCI_AZ_SERVICES_FUNCTIONS_EPHEMERAL |
false |
Fresh container per invocation |
FLOCI_AZ_SERVICES_FUNCTIONS_CONTAINER_IDLE_TIMEOUT_SECONDS |
300 |
Evict warm containers idle longer than this (seconds); 0 disables eviction |
FLOCI_AZ_SERVICES_BLOB_HIERARCHICAL_NAMESPACE_ACCOUNTS |
devstoreaccount1 |
Comma-separated accounts with hierarchical namespace enabled by default |
FLOCI_AZ_SERVICES_APP_CONFIG_ENABLED |
true |
Enable/disable App Configuration |
FLOCI_AZ_SERVICES_CONTAINER_APPS_MOCKED |
true |
Keep Container Apps ARM state without Docker runtimes |
FLOCI_AZ_SERVICES_FUNCTIONS_CODE_PATH |
~/.floci-az/functions |
Function code directory |
FLOCI_AZ_DOCKER_DOCKER_HOST |
unix:///var/run/docker.sock |
Docker daemon socket |
FLOCI_AZ_DOCKER_ENDPOINT_MODE |
auto |
How sidecar containers are addressed: auto (container name or IP and internal port inside Docker, localhost and the published port otherwise) or published (the Docker daemon's host and the published port, for remote daemons such as docker-in-docker or kubedock) |
FLOCI_AZ_DOCKER_RESOURCE_NAMESPACE |
(unset) | Namespace inserted into the name of every container and volume floci-az creates (floci-az-<ns>-...) and added as the floci_namespace label, so parallel emulator instances on one Docker host don't collide |
auth.mode is not read by any service today. Setting it to strict does not turn on SharedKey
or SAS signature validation: requests are accepted exactly as in dev. The one signature floci-az
does check, the Blob service SAS, is validated against the per-account keys below whatever
auth.mode says.
Blob service SAS signing keys are configured per account (independent of auth.mode):
devstoreaccount1 defaults to the standard Azurite account key. For that existing entry, the
environment override is FLOCI_AZ_AUTH_STORAGE_ACCOUNT_KEYS_DEVSTOREACCOUNT1.
Use YAML to declare additional account names. User delegation SAS keeps its separate,
process-local signing keys.
Accounts without an explicit entry use the standard Azurite account key, including accounts created through ARM. Explicit account entries take precedence over this fallback.