Configurazione di manent#
manent legge un file YAML indicato con -c (o con la variabile MANENT_CONFIG). Ogni valore non indicato prende il default riportato sotto; le chiavi sconosciute sono un errore. Il file d'esempio completo è configs/manent.yml.
Riferimento#
app#
| Chiave | Default | Descrizione |
|---|---|---|
name |
manent |
Nome dell'applicazione DBOS e APP-NAME dei messaggi inviati al SIEM. |
version |
0.2.0 |
Versione dei workflow registrata da DBOS: un worker riprende solo i workflow della propria versione. Non è la versione del binario e va cambiata solo quando le note di rilascio lo indicano. Vedi Versioni e aggiornamenti. |
dbos#
| Chiave | Default | Descrizione |
|---|---|---|
database_url |
sqlite:manent.db |
Database di sistema DBOS. In produzione Postgres: postgres://user:pass@host:5432/manent. |
executor_id |
hostname | ID del worker: deve essere univoco tra i nodi e stabile tra i riavvii. Vedi Scalabilità. |
queue |
deployments |
Nome della coda dei deploy. |
concurrency |
4 |
Deploy in esecuzione contemporanea su ogni worker. |
global_concurrency |
0 |
Deploy in esecuzione su tutti i worker (0 = nessun limite). |
environment_concurrency |
1 |
Deploy contemporanei della stessa application/environment su tutti i worker. Non può superare global_concurrency. |
schedule_poll_interval |
30s |
Ogni quanto i worker rileggono le schedule ricorrenti. |
region |
Region del worker: con region_routing esegue i passi dei rilasci a ondate su quella region. |
|
region_routing |
false |
Esegue i passi dei rollout sui worker della region dei target, come workflow figli. In multi-region va attivato su tutti i worker. |
tenants |
[] |
Limita il worker alle code dei deploy di questi tenant (la coda di default per quelli che non ne hanno). Vuoto: tutte le code del registro. |
drain_timeout |
2m |
All'arresto il worker smette di prelevare deploy e attende quelli in corso fino a questo tempo (0 = non attende). Vedi drain. |
http#
| Chiave | Default | Descrizione |
|---|---|---|
listen |
:8080 |
Indirizzo dell'API (sovrascrivibile con serve --listen). |
ui.enabled |
true |
Serve l'interfaccia web su /. |
trusted_proxies |
[] |
Indirizzi o CIDR dei reverse proxy il cui X-Forwarded-For dà l'indirizzo del client in log e audit. Vuoto: l'intestazione è ignorata, così nessuno può falsificare l'indirizzo. |
logging e siem#
| Chiave | Default | Descrizione |
|---|---|---|
logging.level |
info |
debug, info, warn, error. |
logging.format |
text |
text oppure json. |
siem.enabled |
false |
Inoltra ogni log alle destinazioni dei log strutturati. |
siem.destinations |
[] |
Le destinazioni, almeno una con enabled; ognuna riceve ogni messaggio. |
siem.destinations[].network |
udp, tcp, unixgram (socket syslog locale) o journald (protocollo nativo). |
|
siem.destinations[].address |
host:porta del collettore; per unixgram e journald il percorso del socket (default /dev/log e /run/systemd/journal/socket). |
Vedi Log e SIEM.
workdir#
Default ./work. Directory locale in cui ogni deploy scarica l'artefatto (workdir/<deployment-id>). Non serve che sia condivisa tra i worker.
tenants#
| Chiave | Default | Descrizione |
|---|---|---|
file |
Il registro dei tenant (tenants.yml). Vuoto: nessun registro, ogni applicazione è untenanted. |
|
cache |
30s |
Per quanto si tiene il registro prima di rileggerlo. |
untenanted |
allow |
Le applicazioni che nessun tenant elenca: allow le rilascia come tenant untenanted, reject le rifiuta (dettagli). |
envconfig#
| Chiave | Default | Descrizione |
|---|---|---|
providers |
[] |
I provider con nome, nessuno = nessuna configurazione di ambiente (Più provider): name, type (consul, file, git), la sezione del tipo con le chiavi elencate sotto, match (applications, artifacts, environments) oppure tenant_only, e on_missing (fail, next). |
required |
false |
Fa fallire il deploy se per l'ambiente non esiste configurazione. |
max_retries |
3 |
Tentativi aggiuntivi di lettura. |
providers[].consul.address |
CONSUL_HTTP_ADDR o http://127.0.0.1:8500 |
Indirizzo dell'agent Consul. |
providers[].consul.datacenter |
Datacenter Consul. | |
providers[].consul.key |
manent/{tenant}/{application}/{artifact}/{environment} |
Modello della chiave KV. |
providers[].consul.token_file |
File con il token ACL (in alternativa a CONSUL_HTTP_TOKEN). |
|
providers[].file.path |
./envconfig/{tenant}/{application}/{artifact}/{environment}.yml |
Modello del percorso per il provider file. |
providers[].git.repository |
Repository Git delle configurazioni (https://, ssh://, git://, file:// o un percorso). Vedi Repository Git. |
|
providers[].git.ref |
refs/heads/main |
Ref di default. |
providers[].git.path |
{tenant}/{application}/{artifact}/{environment}.yml |
Modello del file nel repository. |
providers[].git.allowed_refs |
[] |
Altri ref (pattern con *) che config.ref può indicare; uno SHA deve essere raggiungibile da essi o da providers[].git.ref. |
providers[].git.username, providers[].git.password_ref |
Credenziali HTTPS (la password è un riferimento a un segreto). | |
providers[].git.ssh_key_ref, providers[].git.known_hosts |
Chiave SSH (riferimento a un segreto) e file dei known hosts, obbligatori insieme. | |
providers[].git.ca_file |
CA aggiuntive per HTTPS. | |
providers[].git.require_signed |
false |
Rifiuta i commit senza una firma valida di providers[].git.signers (openpgp_keyring, ssh_allowed_signers). |
providers[].git.max_age |
0 |
Età massima di un commit (0 = nessuna); i rollback manuali ne sono esenti. |
providers[].git.cache_dir |
<workdir>/.git-cache |
Copie locali del repository. |
providers[].git.ref_ttl |
30s |
Per quanto si riusa la risoluzione di un ref prima di un nuovo fetch. |
Vedi Configurazione di ambiente.
callbacks#
| Chiave | Default | Descrizione |
|---|---|---|
timeout |
10s |
Timeout di ogni chiamata. |
max_retries |
3 |
Tentativi aggiuntivi di ogni invio. |
allow_http |
false |
Ammette callback http. |
allowed_hosts |
[] |
Host ammessi, anche *.dominio; vuoto = tutti. |
Vedi Callback.
rollback#
| Chiave | Default | Descrizione |
|---|---|---|
locator |
plugin |
Strategia di default per individuare la release a cui tornare. |
artifact_types.<tipo>.allowed |
application, container, kubernetes, ecs, lambda, cloudrun: true; migration: false |
Il rollback è possibile per il tipo. I tipi non elencati non lo ammettono. |
artifact_types.<tipo>.enabled |
false |
Default per i deploy del tipo. Richiede allowed. |
artifact_types.<tipo>.on |
[deploy, post-test, activation] |
Step il cui fallimento avvia il rollback. |
artifact_types.<tipo>.locator |
Locator specifico del tipo. |
Vedi Rollback.
auth, rbac, audit#
| Chiave | Default | Descrizione |
|---|---|---|
auth.mode |
none |
none: nessuna autenticazione né permessi (solo sviluppo). enabled: token bearer obbligatorio e RBAC. |
auth.oidc |
issuer, audience, username_claim, groups_claim, ca_file, policy_claims (default [email, name]: claim esposti alla policy dei permessi). |
|
auth.tokens |
[] |
Token statici: name, sha256 (mai il token), groups, expires_at. |
auth.tokens_file |
File YAML con altri token (stesso formato, chiave tokens), riletto quando cambia: revoca senza riavvio. |
|
rbac.engine |
builtin |
builtin (i binding qui sotto) o opa (la policy dei permessi delle revisioni; richiede governance.engine: opa). Le policy.* arrivano sempre da rbac.bindings. |
rbac.opa.cache |
30s |
Per quanto si riusano i permessi di un'identità con opa. |
rbac.opa.cache_size |
10000 |
Identità nella cache dei permessi. |
rbac.roles |
{} |
Ruoli aggiuntivi: nome → elenco di azioni. |
rbac.bindings |
[] |
subjects o groups, role, applications (pattern qualificati: shop solo untenanted, payments/*, */* ogni tenant), environments (pattern con *), artifacts, tenants (selettore sul tenant proprietario) e selector (selettore sui tag dell'applicazione). |
rbac.tenant_roles |
{members: deployer, admins: admin} |
Ruoli impliciti di members e admins di un tenant sulle sue applicazioni. Mai policy.*. |
rbac.selector_keys |
[] |
Chiavi che il selector di binding e grant può leggere (vuoto: nessun selettore nei permessi). |
rbac.cross_tenant_inventory |
true |
Chi appartiene a un tenant legge l'inventario di tutti i tenant. |
audit.file |
File JSON Lines delle voci di audit, con catena di hash, oltre al log e al SIEM. | |
audit.max_size_mb |
0 |
Dimensione oltre cui il file viene ruotato (0 = nessuna rotazione). |
audit.hmac_key_ref |
Riferimento alla chiave (almeno 16 byte) con cui la catena diventa un HMAC. |
Vedi Autenticazione, permessi e audit.
governance#
| Chiave | Default | Descrizione |
|---|---|---|
governance.engine |
builtin |
builtin: le regole e le finestre di questo file. opa: policy Rego valutate da OPA, modificabili a runtime. |
governance.rules |
[] |
Regole per applicazione e ambiente (vale la prima che corrisponde): name, applications, environments, requires (ambienti da cui promuovere), approvals (required, allow_self, timeout, default 72h, when, approvers con groups e subjects), change (approval, timeout, default 72h: ticket di change, vedi Chat e change management). Con opa sono i dati della policy predefinita. |
governance.freezes |
[] |
Finestre di freeze: name, reason, applications, environments e from/to oppure cron (5 campi), duration, timezone, hard. Le finestre si possono creare anche a runtime (manent freeze add). |
governance.refresh |
10s |
Ogni quanto ogni processo rilegge la policy e i freeze a runtime. |
governance.max_staleness |
10m |
Oltre questo tempo senza una lettura riuscita, i deploy reali sono rifiutati (503). |
governance.start |
deny |
Cosa ricontrolla l'avvio del deploy: deny (divieti e freeze) o strict (anche approvazioni e change aumentati dopo l'accodamento). |
governance.opa.source |
store |
Revisioni: store (gestite con manent policy), file, bundle, consul. |
governance.opa.store.review |
false |
Una bozza viene approvata da un'identità diversa dal suo autore. |
governance.opa.store.tests |
run |
run: i test della revisione girano se presenti; required: le revisioni senza test sono rifiutate. |
governance.opa.file.dir |
Directory della policy con source: file. |
|
governance.opa.bundle.* |
url, ca_file, credentials_ref, signing (public_key_ref, algorithm, key_id, scope), insecure_skip_verify. |
|
governance.opa.consul.prefix |
manent/policies |
Prefisso del KV con source: consul (indirizzo e token di governance.opa.consul.address/token_file, altrimenti del primo provider consul di envconfig.providers). |
governance.opa.consul.address, datacenter, token_file |
Agent Consul delle policy; vuoti: quello del primo provider consul di envconfig.providers. |
|
governance.opa.query |
data.manent.governance.decision |
Query della decisione. |
governance.opa.eval_timeout |
200ms |
Limite di una valutazione. |
Vedi Governance dei rilasci e Policy in Rego.
descriptor_policy#
| Chiave | Default | Descrizione |
|---|---|---|
params |
{"*": ["*"]} |
Parametri impostabili dal descrittore, per plugin. |
secret_refs |
["*"] |
Riferimenti ai segreti dichiarabili dal descrittore. |
targets |
true |
Target indicati dal descrittore. |
post_test_hosts |
["*"] |
Host raggiungibili dai controlli postTest.http del descrittore (pattern). |
step_params |
{} |
Parametri degli step personalizzati impostabili dal descrittore, per step ("*" = tutti). Default: nessuno. |
config_ref |
none |
Revisione della configurazione di ambiente che il descrittore può scegliere con config.ref (provider git): none, ref (solo ref ammessi) o sha (anche SHA di commit). |
max_parallel |
0 (nessun limite) |
Parallelismo massimo che un descrittore può chiedere (deploy.parallel, rollout.waves[].parallel); una percentuale si calcola su tutti i target. La configurazione di ambiente non vi è soggetta. |
Vedi Sicurezza.
secrets e artifacts#
| Chiave | Default | Descrizione |
|---|---|---|
secrets.vault.enabled |
false |
Abilita lo schema vault:. |
secrets.vault.address, namespace, auth, token_file, approle, kubernetes, ca_file, timeout |
Connessione e login a Vault. | |
artifacts.timeout |
30m |
Durata massima di un download. |
artifacts.allow_unlisted |
true |
Ammette sorgenti non elencate in artifacts.sources. |
artifacts.sources |
[] |
prefix, auth (type, username, header, secret_ref), ca_file. |
Vedi Segreti e sorgenti degli artefatti.
pipeline#
Elenco ordinato degli step, con name, mode (mandatory oppure optional), enabled (default degli step opzionali) e max_retries. Vedi Pipeline e step.
Uno step con type (command o http) è uno step personalizzato, definito da timeout, secrets, params, outputs, ssh, run e dry_run. Si configurano in pipeline.custom:
| Chiave | Default | Descrizione |
|---|---|---|
pipeline.custom.spec_key_refs |
[] |
Chiavi HMAC (almeno 32 byte) che firmano le specifiche registrate nei piani; la prima firma, tutte verificano. |
pipeline.custom.revoked_specs |
[] |
SHA-256 delle specifiche da non eseguire più. |
pipeline.custom.known_hosts |
~/.ssh/known_hosts |
Host key dei target per gli step command. |
pipeline.custom.insecure_ignore_host_key |
false |
Salta la verifica della host key: solo per lo sviluppo. |
pipeline.custom.secrets_dir |
/dev/shm/manent |
Directory dei segreti sui target. |
pipeline.custom.allow_http |
false |
Ammette URL http negli step http. |
plugins#
Plugin da attivare, ciascuno con la propria configurazione:
plugins:
remote-copy: # plugin compilato dentro manent
known_hosts: ~/.ssh/known_hosts
artifact_types: [application]
k8s-deploy: # plugin esterno
external:
command: /opt/manent/plugins/k8s-deploy
sha256: "3f1c…"
artifact_types: [container]
Due chiavi sono lette da manent e non passate al plugin: queue (la coda propria del plugin) e max_parallel, il limite ai target di un lotto che il plugin aggiorna nello stesso momento, qualunque cosa chieda il deploy (default 16): protegge worker e destinazioni, come le connessioni SSH o i rate limit di un'API cloud. Vedi target in parallelo.
Plugin compilati in manent: remote-copy, container, kubernetes, ecs, lambda, cloudrun, jboss, windows. Vedi anche Plugin esterni.
rollout#
Health gate dei rilasci a ondate.
| Chiave | Default | Descrizione |
|---|---|---|
prometheus_url |
API di Prometheus per rollout.health.metrics (es. http://prometheus:9090). Senza, un rollout con metriche Prometheus è rifiutato; lo stesso vale per gli altri sistemi. |
|
alertmanager_url |
API di Alertmanager per rollout.health.alerts. |
|
datadog |
Datadog per le metriche con provider: datadog: url (sito dell'API, default https://api.datadoghq.com), api_key_ref, app_key_ref. |
|
newrelic |
New Relic NerdGraph: url (default https://api.newrelic.com/graphql), account_id, api_key_ref (chiave utente). |
|
elastic |
Elasticsearch ES|QL: url, api_key_ref oppure username e password_ref, ca_file. |
|
cloudwatch |
Amazon CloudWatch: region, endpoint (facoltativo), credenziali dalla catena dell'SDK o da access_key_id_ref e secret_access_key_ref, role_arn ed external_id per assumere un ruolo. |
|
azure_monitor |
Azure Monitor Logs (provider: azure-monitor): workspace_id, un service principal con tenant_id, client_id e client_secret_ref oppure, senza, l'identità del worker (workload o managed identity); endpoint e authority per i cloud sovrani. |
|
check_timeout |
30s |
Tempo massimo di ogni lettura del gate. |
integrations#
Notifiche in Slack e Teams, approvazioni da Slack e ticket di change. Vedi Chat e change management.
| Chiave | Default | Descrizione |
|---|---|---|
integrations.public_url |
Indirizzo dell'interfaccia web, per i link nei messaggi e nei ticket. | |
integrations.language |
en |
Lingua dei messaggi: en o it. |
integrations.timeout |
15s |
Timeout delle chiamate a Slack, Teams e ITSM. |
integrations.slack.bot_token_ref, signing_secret_ref |
Segreti dell'app Slack: messaggi aggiornabili e pulsanti di approvazione. | |
integrations.slack.identities |
ID utente Slack → subject (oidc:alice) e groups dell'identità di manent. |
|
integrations.slack.email_identity |
Identità degli utenti non elencati dalla loro email, es. oidc:{email}. |
|
integrations.notifications |
[] |
Destinazioni: name, applications, environments, events, dry_run e slack (channel o webhook_ref) oppure teams (webhook_ref). |
integrations.change.provider |
servicenow o jira. |
|
integrations.change.poll_interval |
1m |
Intervallo iniziale di lettura dell'approvazione del change (fino a 5 minuti). |
integrations.change.servicenow, jira |
Connessione e campi del sistema ITSM. |
chains#
Catene di deploy: dipendenze tra deploy e release composte.
| Chiave | Default | Descrizione |
|---|---|---|
poll_interval |
5s |
Primo intervallo con cui un deploy in attesa o una release rileggono lo stato dei deploy attesi; raddoppia a ogni lettura fino a 5 minuti. Di norma la lettura avviene prima, perché chi si conclude avvisa chi lo attende. |
observability#
| Chiave | Default | Descrizione |
|---|---|---|
listen |
Indirizzo di un server con /metrics, /healthz e /readyz (es. :9090). Serve ai worker, che non hanno l'API. |
|
metrics |
true |
Metriche Prometheus. |
tracing.enabled |
false |
Esporta le tracce OpenTelemetry via OTLP/HTTP. |
tracing.endpoint |
Collector, es. otel-collector:4318; vuoto: OTEL_EXPORTER_OTLP_ENDPOINT. |
|
tracing.insecure |
false |
Usa http invece di https (endpoint senza schema). |
tracing.sample_ratio |
1 |
Frazione delle tracce campionate, se la richiesta non porta già una decisione. |
Vedi Osservabilità.
recovery#
| Chiave | Default | Descrizione |
|---|---|---|
heartbeat_interval |
15s |
Ogni quanto un worker aggiorna il registro. |
stale_after |
1m |
Ritardo di heartbeat oltre il quale un worker è considerato perso (almeno il doppio di heartbeat_interval). |
auto_recover_after |
0s |
Se maggiore di zero, i workflow in sospeso di un worker della stessa versione arrestato o senza heartbeat da questo tempo vengono ripresi da un altro worker. Almeno stale_after. |
Vedi Recovery, arresto e retention.
retention#
Come tutte le durate della configurazione, i valori si scrivono con l'unità (0s, 10m, 2160h): un numero senza unità non è valido.
| Chiave | Default | Descrizione |
|---|---|---|
max_age |
0s |
I workflow conclusi da più di questo tempo vengono eliminati (0s = mai; altrimenti almeno 24h). |
keep_releases |
10 |
Deploy riusciti conservati comunque per applicazione e ambiente. |
interval |
1h |
Ogni quanto un worker esegue la pulizia. |
reconcile#
Lettura periodica della release in esercizio sui target, per segnalare nell'inventario quelli cambiati fuori da manent (vedi stato reale dei target).
| Chiave | Default | Descrizione |
|---|---|---|
interval |
0s |
Ogni quanto i worker leggono i target di ogni ambiente (0s = disattivata; altrimenti almeno 10s). |
timeout |
30s |
Tempo massimo della lettura di un target. |
concurrency |
8 |
Target di un ambiente letti insieme. |
Variabili d'ambiente#
| Variabile | Effetto |
|---|---|
MANENT_CONFIG |
File di configurazione, in alternativa a -c. |
DBOS_SYSTEM_DATABASE_URL |
Sovrascrive dbos.database_url. |
DBOS__VMID |
Sovrascrive dbos.executor_id. |
CONSUL_HTTP_ADDR |
Indirizzo Consul, se l'address di un provider Consul è vuoto. |
CONSUL_HTTP_TOKEN |
Token ACL Consul. |
OTEL_EXPORTER_OTLP_ENDPOINT |
Collector delle tracce, se observability.tracing.endpoint è vuoto. Valgono anche le altre variabili OTEL_EXPORTER_OTLP_* (intestazioni, certificati). |
I segreti con riferimento env:NOME sono letti dalle variabili d'ambiente del worker.