Aller au contenu principal

Architecture

Sherpack est construit comme un workspace Rust modulaire avec 5 crates.

Vue d'ensemble des crates

sherpack/
├── crates/
│ ├── sherpack-core/ # Types de base
│ ├── sherpack-engine/ # Moteur de template
│ ├── sherpack-kube/ # Intégration Kubernetes
│ ├── sherpack-repo/ # Gestion des dépôts
│ └── sherpack-cli/ # Application CLI

Dépendances

sherpack-cli
├── sherpack-core
├── sherpack-engine ─── sherpack-core
├── sherpack-kube ───── sherpack-core
└── sherpack-repo ───── sherpack-core

sherpack-core

Types de base partagés entre tous les crates.

Types principaux

TypeDescription
PackMétadonnées du pack depuis Pack.yaml
LoadedPackPack avec fichiers chargés
ValuesValeurs de configuration avec fusion
ReleaseÉtat du déploiement
TemplateContextContexte pour les templates
ArchiveOpérations sur archives tar.gz
ManifestChecksums SHA256
SchemaValidation JSON Schema

Fusion des valeurs

Valeurs par défaut du schéma
└── values.yaml
└── fichiers -f (dans l'ordre)
└── flags --set

sherpack-engine

Moteur de template basé sur MiniJinja.

Composants

ComposantDescription
EngineCompilation et rendu des templates
filters.rs25+ filtres compatibles Helm
functions.rsFonctions built-in
suggestions.rsSuggestions d'erreur avec matching flou

Catégories de filtres

  • Sérialisation : toyaml, tojson, tojson_pretty
  • Encodage : b64encode, b64decode, sha256
  • Chaînes : quote, upper, lower, kebabcase, snakecase
  • Indentation : indent, nindent
  • Collections : keys, haskey, merge, dictsort
  • Validation : required, empty, default

sherpack-kube

Intégration Kubernetes.

Composants

ComposantDescription
KubeClient<S>Client principal avec opérations de cycle de vie
ResourceManagerServer-Side Apply avec Discovery
StorageDriverTrait de stockage des releases
HookExecutorGestion du cycle de vie des hooks
HealthCheckerHealth Deployment/StatefulSet
DiffEngineDiff three-way merge

Backends de stockage

BackendStockage
SecretsDriverKubernetes Secrets
ConfigMapDriverKubernetes ConfigMaps
FileDriverSystème de fichiers local
MockDriverEn mémoire (tests)

États des releases

PendingInstall → Deployed

PendingUpgrade → Deployed
↓ ↓
PendingRollback Failed

Deployed

Uninstalling → Uninstalled

sherpack-repo

Gestion des dépôts et dépendances.

Composants

ComposantDescription
RepositoryBackendInterface unifiée
HttpBackendDépôts HTTP avec ETag
OciBackendRegistres OCI
FileBackendRépertoires locaux
IndexCacheRecherche SQLite FTS5
DependencyResolverRésolution des versions
LockFilePack.lock.yaml

Politiques de verrouillage

PolitiqueComportement
StrictVersion + SHA
VersionVersion uniquement (défaut)
SemverPatchAutorise les mises à jour patch
SemverMinorAutorise les mises à jour mineures

Tests

CrateTestsType
sherpack-core19Unitaires
sherpack-engine43Unitaires
sherpack-kube107Unitaires + Mock
sherpack-repo42Unitaires
sherpack-cli71Intégration
Total282

Dépendances clés

DépendanceUtilisation
minijinjaMoteur de template
kubeClient Kubernetes
oci-distributionRegistres OCI
rusqliteSQLite FTS5
minisignSignatures
clapParsing CLI
serdeSérialisation
tokioRuntime async