infra-lib (infra-cli)¶
Analisi del 29/10/2026 sul repository infra-lib (branch main, versione 0.1.9, commit 0eb1be5 del 12/05/2026) e sul suo uso in mdm_installation.
Cos'è¶
Libreria Python con un comando, infra-cli, per gestire gli ambienti (local, stage, prod) e lanciare "operazioni" di infrastruttura. Autore: Franco Merenda. Origine: CodeCommit infra-lib. Build di controllo su CodeBuild (buildspec.yml: ruff, vulture, pytest); nessuna immagine o pacchetto pubblicato.
infra-cli run -e <ambiente> --project-root ./infra -op <operazione>:- carica il contesto dell'ambiente da
infra/environments/<env>/<env>.py; - trova le operazioni decorate con
@infra_operationininfra/operations/; - le esegue rispettando le dipendenze (
depends_on). infra-cli init --template …: crea progetti da modelli AWS (generic, .NET 8, Lambda .NET e Python). Non è usato nei progetti MDM.EnvironmentContext(src/infra_lib/infra/env_context/env_context.py):- unisce, in quest'ordine di precedenza crescente, i file
.envdell'ambiente,TARGET_ENVe le variabili extra del progetto; - con
DockerCompose.up()scrive tutto ininfra/environments/<env>/.infra.generated.env(utils/docker_compose.py). DockerCompose: lanciadocker compose -p <nome> -f … --profile <ambiente> --profile …con queste variabili.- Utilità AWS (S3, Lambda, SQS, API Gateway, EventBridge) pensate anche per LocalStack (
creds.py).
Chi lo usa¶
| Repository | Come | Versione |
|---|---|---|
mdm_installation linea stage (3.8/3.9) |
sottomodulo external/infra-lib (.gitmodules) e dipendenza infra-lib in pyproject.toml ([tool.uv.sources], percorso locale) |
commit 66379db = v0.1.9; su main di infra-lib c'è un solo commit in più |
mdm_installation linea main (3.2.x) |
non lo usa; contiene però lo stesso riferimento al sottomodulo senza .gitmodules (resto della divergenza, innocuo) |
— |
| Altri progetti (midserver, pannello, qAlarm, wrapper) | non lo usano | — |
Come lo usa il box (linea stage)¶
- Ambienti:
infra/environments/prod/prod.pyestage/stage.pyleggono i file.enve.env.build_tagdell'ambiente. Poi chiedono ad AWS Secrets Manager il segretomdm/installation/prodomdm/installation/stage(infra/secrets_loader.py), che deve contenere almeno le chiavi MQTT eINSTALLATION_MONITORING_DELAY_SECONDS. - Operazioni:
infra/operations/stack_operations.pydefinisce l'avvio e l'arresto dello stack per Frigate e per GANZ, con il progetto Composeinstallatione il fileinfra/compose/docker-compose.yml. - Chi le lancia: l'installer e l'update (
mdm update→infra-cli run --environment <env> --operation <detector>-up).
Conseguenze per il box:
- Ogni avvio con infra-cli (installazione, update) richiede AWS raggiungibile e credenziali con accesso al segreto. Le credenziali sono quelle scritte nell'updater (rischio M1). Un riavvio normale dei container (Docker restart) non passa da infra-cli e funziona anche senza AWS.
- I valori del segreto finiscono in chiaro sul disco del box, nel file infra/environments/<env>/.infra.generated.env, comprese le credenziali MQTT (M29).
- Il box deve poter scaricare il sottomodulo da CodeCommit durante l'update (git submodule update).
Soluzione ideale¶
- Il box non ha bisogno di credenziali AWS generiche: legge solo il proprio segreto, con una credenziale per box o di sola lettura su
mdm/installation/<env>(T10.6). .infra.generated.envleggibile solo da root, e ricreato a ogni avvio.infra-libfissato a una versione con tag (oggi è fissato per commit, che coincide con v0.1.9) e aggiornato con un changelog nel repository del box.
Cosa dobbiamo fare¶
| # | Passo | Ticket |
|---|---|---|
| 1 | Credenziale minima per il box (solo lettura del proprio segreto) al posto della chiave scritta nell'updater | T10.6 |
| 2 | Permessi del file .infra.generated.env e verifica che non finisca nei log o nei backup |
MDM-081 |
| 3 | Prova di update e installazione con AWS non raggiungibile: il box deve restare funzionante con la versione precedente | MDM-081 |